Forum: Mikrocontroller und Digitale Elektronik Atmel megaAT power on oder reset unterscheiden, wie?


von Joachim B. (jar)


Lesenswert?

siehe Titel:

Atmel megaAT (m8, m328p, m1284p)power on oder reset unterscheiden, wie?

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

siehe Datenblatt:
10.9.1 MCUSR – MCU Status Register

von g457 (Gast)


Lesenswert?

Kuckst Du Datenplatt. Beim m8 isses das MCUCSR, bei den anderen analog. 
Rechtzeitig sichern und löschen nicht vergessen.

HTH

von wirsch (Gast)


Lesenswert?

Joachim B. schrieb:
> siehe Titel:
>
> Atmel megaAT (m8, m328p, m1284p)power on oder reset unterscheiden, wie?

megaAt, häh?

von Joachim B. (jar)


Lesenswert?

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
von g457 (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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?

von Joachim B. (jar)


Lesenswert?

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
von Mike A. (Gast)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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!

von g457 (Gast)


Lesenswert?

> 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

von Jan H. (jan_m_h)


Lesenswert?

Kann es sein, dass der Bootloader vom Mighty die Register liest und 
löscht?

von Joachim B. (jar)


Lesenswert?

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

von Klaus 2. (klaus2m5)


Lesenswert?

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

von Joachim B. (jar)


Lesenswert?

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