siehe Titel: Atmel megaAT (m8, m328p, m1284p)power on oder reset unterscheiden, wie?
:
Bearbeitet durch User
siehe Datenblatt: 10.9.1 MCUSR – MCU Status Register
Kuckst Du Datenplatt. Beim m8 isses das MCUCSR, bei den anderen analog. Rechtzeitig sichern und löschen nicht vergessen. HTH
Joachim B. schrieb: > siehe Titel: > > Atmel megaAT (m8, m328p, m1284p)power on oder reset unterscheiden, wie? megaAt, häh?
Peter Dannegger schrieb: > 10.9.1 MCUSR – MCU Status Register danke Peter, • Bit 2 – BORF: Brown-out Reset Flag This bit is set if a Brown-out Reset occurs. The bit is reset by a Power-on Reset, or by writing a logic zero to the flag. • Bit 1 – EXTRF: External Reset Flag This bit is set if an External Reset occurs. The bit is reset by a Power-on Reset, or by writing a logic zero to the flag. • Bit 0 – PORF: Power-on Reset Flag This bit is set if a Power-on Reset occurs. The bit is reset only by writing a logic zero to the flag. kann man also (wenn Brown-out programmiert ist) bit 2 und bit 0 hier gleichwertig verwenden? Bit 1 nur wenn der Reset Taster gedrückt wurde? g457 schrieb: > Rechtzeitig sichern und löschen nicht vergessen. was meinst du damit? ich möchte ja nur feststellen wenn der MC startet ob es power on war oder ein Reset
:
Bearbeitet durch User
> was meinst du damit? > > ich möchte ja nur feststellen wenn der MC startet ob es power on war > oder ein Reset Die Bits können sich aufkumulieren. Wenn Du erst einen POR machst, dann einen externen Reset, vielleicht spuckt Dir dann einer in den Brown-Out und womöglich beisst auch noch der Watchdog zu, dann sind alle jene Bits gesetzt. Also zwischendrin zurücksetzen.
Ist etwas tricky, je nach Dauer des Abfall und Anstieg der VCC kann BORF, PORF oder beide gesetzt sein. Nur wenn beide 0 sind und EXTRF = 1, dann war es extern. Und nach dem Lesen das Löschen nicht vergessen.
Peter Dannegger schrieb: > Ist etwas tricky, Peter Dannegger schrieb: > Und nach dem Lesen das Löschen nicht vergessen. ah, ich glaube ich verstehe so langsam, löschen damit ich beim nächsten Lesen nicht reinfalle? Sie werden wieder gesetzt wenn der AVR vom Strom getrennt wurde?
Peter D. schrieb: > siehe Datenblatt: > 10.9.1 MCUSR – MCU Status Register so nun bin ich endlich zum probieren gekommen, im Arduino nano 328p klappt es prima
1 | Serial.begin(19200); |
2 | delay(200); |
3 | Serial.println(); |
4 | Serial.println(); |
5 | Serial.println(); |
6 | if(MCUSR&(1<<PORF)) |
7 | { MCUSR&=~(1<<PORF); |
8 | Serial.println(F("Erststart pow")); |
9 | }
|
10 | if(MCUSR&(1<< EXTRF)) |
11 | { MCUSR&=~(1<< EXTRF); |
12 | Serial.println(F("RESET ")); |
13 | }
|
dito im Arduino mighty atmega1284p leider nicht! Die Register und Bits haben lt. Datenblatt dieselben Namen, der Code wird nicht ausgeführt, es wird weder
1 | Serial.println(F("Erststart pow")); |
noch
1 | Serial.println(F("RESET ")); |
"geprintet" alles andere davor und danach aber wird "geprintet" also vor und nach den "if" hat jemand eine Idee? Es gibt auch keine Fehlermeldungen von der IDE, wird anstandslos übersetzt und "gebrannt". EDIT ich printe das natürlich ohne angeschlossenen USB auch auf das LCD weil in der Arduino IDE immer RESET nach power ON kommt, kann es also nur am Steckernetzeil erkennen
:
Bearbeitet durch User
Joachim B. schrieb: > hat jemand eine Idee? Ein Reset - welcher auch immer - wird doch nicht spurlos am MCUSR vorüber gehen. Guck dir mal einen Dump vom MCUSR ohne irgendwelche "if"s.
Mike A. schrieb: > Guck dir mal einen Dump vom MCUSR ohne gute Idee nur wie? ein globales uint8_t my_mcusr=MCUSR; sollte nach dem reset mindestens so initialisiert sein, ist aber immer 0. und dump ohne Aruino an power ist auch nicht möglich, ich stecke mal von PC auf Netzteil um. immer noch 0 auf dem LCD auch am Netzteil.
so den Code auf nano328p und 1284p portiert am PC in der Arduino IDE auf nano328p Ausgabe der MCUSR dez 6 auf mighty1284p Ausgabe der MCUSR dez 0 am Steckernetzteil powerON auf nano328p Ausgabe der MCUSR dez 5 auf mighty1284p Ausgabe der MCUSR dez 0 am Steckernetzteil resetTASTER auf nano328p Ausgabe der MCUSR dez 7 auf mighty1284p Ausgabe der MCUSR dez 0 sieht für den nano plausibel aus, für den mighty immer noch nicht!
> sieht für den nano plausibel aus, für den mighty immer noch nicht!
Dann schau Dir die Register doch mal etwas früher an, z.B. in der .init1
oder .init3. Siehe hierzu auch meine Beiträge vom 21.01.2015 und die
zugehörige Doku.
HTH
Kann es sein, dass der Bootloader vom Mighty die Register liest und löscht?
g457 schrieb: > Siehe hierzu auch meine Beiträge LINK? Jan H. schrieb: > Kann es sein, dass der Bootloader vom Mighty die Register liest und > löscht? ja nein vielleicht? ich weiss es nicht
Jan H. schrieb: > Kann es sein, dass der Bootloader vom Mighty die Register liest und > löscht? Kommt drauf an, welche Version Du benutzt. Aber in optiboot.c steht zum Beispiel:
1 | // Adaboot no-wait mod
|
2 | ch = MCUSR; |
3 | MCUSR = 0; |
4 | if (!(ch & _BV(EXTRF))) appStart(); |
Guckst Du hier: https://github.com/maniacbug/mighty-1284p/tree/master/bootloaders
Klaus 2. schrieb: > Kommt drauf an, welche Version Du benutzt. ich nutze die aus dem Original mighty Thread optiboot_mighty1284p_1M.hex
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.