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.
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
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