Hi, ich bin auf eine Ungereimtheit im Datenblatt des Tiny26 gestoßen. Dort steht auf Seite 33: "BORF: Brown-out Reset Flag This bit is set if a Brown-out Reset occurs. The bit is reset by a Power-on Reset..." Wenn ich mir aber das Register MCUSR nach dem Einschalten anschaue, dann sind die Bits 2 (BORF) und 1 (Power-on Reset) gesetzt???? Wie kann das sein? Das BORF soll doch bei einem Power-on Reset gelöscht werden... Hat sich Atmel da vertippt? Gruß, Michael
Auch wenn das Thema schon sehr alt ist. Mich quält gerade das gleiche Problem mit einem Tiny24. In 50% der Einschaltversuche wird die BORF gesetzt? Die Versorgungsspannung habe ich gemessen, diese steigt innerhalb von 50µs auf 4V. Brown Out ist auf 2,7V gestellt. Kennt jemand dieses Problem und weis es zu lösen?
Thomas wrote:
> Kennt jemand dieses Problem und weis es zu lösen?
Was für ein Problem ergibt sich denn dadurch für Dich?
Wenn das Poweron-Bit gesetzt ist, ignoriere das Brownout-Bit einfach.
Die Poweron Schwelle ist kleiner als das Brownout, daher ist es früher
beendet und das Brownout kann zuschlagen.
Es sollte allerdings egal sein, ob der Reset durch längeres Ausschalten
oder nen kurzen Spannungseinbruch erfolgt, Du kannst den Daten im SRAM
nicht mehr trauen.
Daher wüßte ich nicht, warum man überhaupt zwischen Poweron und Brownout
unterscheiden können sollte.
Peter
Peter Dannegger wrote: > Daher wüßte ich nicht, warum man überhaupt zwischen Poweron und Brownout > unterscheiden können sollte. Vielleicht willst du ja beim Poweron irgendeine Benutzer-Interaktion durchführen zum Start der Applikation, während du nach einem Brownout möglichst nahtlos weitermachst. Die Daten der Benutzer-Interaktion kann man sich ja im EEPROM ablegen, damit man sie nach dem Brownout nicht neu eingeben muss. Ansonsten aber Zustimmung: wenn PORF gesetzt ist, dann war es halt ein Power-on, und man kann alle anderen Reset-Bits getrost löschen und ignorieren.
Die Initialisierung aller Register und des RAMs muss ich natürlich nach enem Brown Out erneut durchführen. Nur soll möglichst der Benutzer nichts von diesem Malheur merken. Die Abfrage der PORF funktioniert porblemlos. Den Sinn und Zweck der BORF erkenne ich aber nicht. Mal ist sie gesetzt, mal wieder nicht. Absolut für nichts zu gebrauchen dieses Bit.
Thomas wrote:
> Absolut für nichts zu gebrauchen dieses Bit.
Doch: bei einem reinen brown-out reset ist es natürlich gesetzt.
Nur beim power-on sind die Verhältnisse (vermutlich je nach
Spannungsanstiegsgeschwindigkeit, Anlaufverhalten des Taktgenerators,
eingestellter SUT-Fuse etc.) nicht klar.
Das PORF muß man selber löschen. Wenn PORF und BORF gesetzt sind war das PORF wohl nicht zurückgesetzt. Das BORF wurde dann zusätzlich gesetzt. Also nach dem Start MCUSR auswerten und dann löschen! gruß hans
hans wrote: > Das PORF muß man selber löschen. Alle Reset-Flags muss man selbst löschen. Bei den aktuellen AVRs ist es bei Benutzung des Watchdog-Resets völlig unumgänglich, dass man sich auch um das WDRF-Flag kümmert, ansonsten hat man 15 ms später einen neuen Watchdog-Reset...
Thomas wrote: > Die Initialisierung aller Register und des RAMs muss ich natürlich nach > enem Brown Out erneut durchführen. Nur soll möglichst der Benutzer > nichts von diesem Malheur merken. Was fürn Maleur? Wenn die Spannung weg ist, isse weg. Und dann ist es eigentlich egal, ob sie nur wenige Sekunden weg ist (nur BORF gesetzt) oder länger (PORF gesetzt, BORF egal). Die CPU bleibt stehen und setzt alle Ausgänge tristate, das merkt der Benutzer in jedem Fall. Das PORF kommt, wenn die Spannung bis unter 1V absinkt, ansonsten nur das BORF. Das PORF ist vergleichbar mit der Super-Billig-Resetschaltung (RC-Glied) in älteren Geräten, wo dann immer in der BDA steht: "Ziehen Sie den Netzstecker für >30s, um das Gerät zu resetten". Kurze Einbrüche erkennt es nicht, dafür reichen diese, um die CPU abstürzen zu lassen. > Den Sinn und Zweck der > BORF erkenne ich aber nicht. Mal ist sie gesetzt, mal wieder nicht. > Absolut für nichts zu gebrauchen dieses Bit. Na klar doch. Du weißt, das ein Spannungseinbruch den Reset ausgelöst hat und nicht ein wildgewordener Programmcounter an den Resetvektor gesprungen ist. Nochmal ganz kurz: BORF gesetzt: Spannungseinbruch PORF gesetzt: tiefer Spannungseinbruch Man muß daher nur wissen, daß eines gesetzt ist, welches, das ist wurscht. Peter
ich würde eher sagen: WDRF gesetzt: Watchdog reset EXRF gesetzt: externes Reset PORF gesetzt: Power On Reset WDRF nicht gesetzt, EXRF nicht gesetzt, PORF nicht gesetzt: Brown Out Reset Aber das BORF ist zum Feststellen des Resetgrundes ungeeignet.
@Thomas Dein System läuft mit 5 V, dein AVR arbeitet aber noch bis 2,7 V. Ein angeschlossenes Display ist jedoch empfindlich und hört bei 4 V auf bzw. macht Ärger. BO wird auf 4 V (oder 4,2 o.ä.) gesetzt. Nach einem Spannungseinbruch auf 3,5 V erkennst du im MCUSR das es ein BO war aber kein PO. Daher weist du, daß dein System zwar noch läuft, aber dein Display wahrscheinlich nichtmehr. Jetzt reicht ein Displayreset mit Initalisierung. gruß hans
gutes Beispiel. Aber wenn ich die BORF abfrage wird sie ja auch im Falle eines Power-On gesetzt. Die BORF ist also kein sicheres Zeichen für ein Brown-Out Reset. Um ein Brown-Out festzustellen muss ich wie ober geschrieben vorgehen.
Nach Atmel dürfte nur ein Bit gesetzt sein, wenn man nach einem Reset/der Auswertung das MCUSR gelöscht hat.
1 | To make use of the Reset Flags to identify a reset condition, the user should read and then reset |
2 | the MCUCSR as early as possible in the program. If the register is cleared before another reset |
3 | occurs, the source of the reset can be found by examining the Reset Flags. |
Bei einem PO kann je nach Spannungsferlauf auch BO als zweiter Auslöser auftreten obwohl der µC noch nicht gestartet hat. Dadurch ist PORF noch gesetzt und BORF wird gesetzt. Wenn also nach dem Start MCUSR gelöscht war und beide Flags sind gesetzt -> PO hat recht gruß hans
hans wrote: > Nach einem Spannungseinbruch auf 3,5 V erkennst du im MCUSR > das es ein BO war aber kein PO. Daher weist du, daß dein System > zwar noch läuft, aber dein Display wahrscheinlich nichtmehr. Das ist Quatsch, Dein System läuft nicht nach einem Brownout-Reset, Du mußt alle Register neu initialisieren. Das ginge nur mit nem Brownout-Interrupt, z.B. über den Analog-Komparator. Poweronreset und Brownoutreset machen genau das gleiche, bloß die Schwelle ist unterschiedlich. Beim Brownout ist die Schwelle so hoch, daß die CPU einwandfrei arbeiten kann, wenn sie aus dem Reset raus ist. Beim Poweron ist die Schwelle zu niedrig und die CPU kann spinnen. Das ist weniger ein Problem beim Einschalten (da schneller Anstieg), sondern beim Ausschalten. Dann sinkt die VCC durch den Ladeelko im Netzteil ganz langsam ab und die CPU kann Unfug machen. Deshalb wird oft die EEPROM-Zelle gelöscht, auf die das Adreßregister als letztes zeigt (wenn man den EEPROM ohne Brownout benutzt). Wenn man zuverlässige Geräte haben will, muß das Brownout immmer eingeschaltet sein. Wenn die höhere Stromaufnahme stört, muß man einen externen Brownout-IC verwenden. Im Prinzip ist das Poweron-Reset daher überflüssig. Peter
Thomas wrote: > Aber das BORF ist zum Feststellen des Resetgrundes ungeeignet. Träum schön weiter. Gib mal unter AVR-GCC nen Interrupt frei, der keinen Handler hat und Du wirst Deine sogenannten "Brownoutresets" am laufenden Band erhalten. Das BORF ist sehr wichtig, wenn man ordentlich programmieren will, um eigene Softwarefehler von Spannungseinbrüchen zu unterscheiden. Peter
Peter Dannegger wrote: > Wenn die höhere Stromaufnahme stört, muß man einen > externen Brownout-IC verwenden. Ach, die arbeiten mit der Umgebungsluft?
Jörg Wunsch wrote: >> Wenn die höhere Stromaufnahme stört, muß man einen >> externen Brownout-IC verwenden. > > Ach, die arbeiten mit der Umgebungsluft? Ja. TI hat welche mit 0,22µA, die interne Bandgap braucht dagegen 10µA. Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.