Forum: Mikrocontroller und Digitale Elektronik Resetabfrage beim Tiny26, MCUSR-Register


von Michael (Gast)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

@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

von Thomas (Gast)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger wrote:

> Wenn die höhere Stromaufnahme stört, muß man einen
> externen Brownout-IC verwenden.

Ach, die arbeiten mit der Umgebungsluft?

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.