Forum: Mikrocontroller und Digitale Elektronik ATmega - ominöser zweiter Reset bei Power-on


von Jens K. (candev)


Lesenswert?

Hallo,

ich bitte um Nachsicht falls das Thema hier schon erörtert wurde. Über 
die Suche habe ich vor meiner Registrierung schon einiges gefunden - das 
Entscheidende war offenbar nicht dabei.

Mein Problem:
Mein ATmega644 resettet beim Power-on zweimal, d.h. einmal korrekt wie 
ich es erwarten würde und einmal zusätzlich (und unerwünscht) nach ca. 
einer halben Sekunde. Das sieht man im u.a. Programm am Binken der LED, 
ich habe es aber auch mit dem Scope nachvollzogen: der RESET-Pin geht 
definitiv auf LOW.
Der RESET-Pin ist mit 10K  Pullup gegen VCC geschaltet. Die 
Versorgungsspannung ist stabil, ein BrownOut-Reset dürfte damit 
ausschalten.

Einzige "Besonderheit" meiner Hardware ist, dass ich den Wegfall der 
Versorgungsspannung frühzeitig erkennen will. Dazu sind AIN0/1 mit 
entsprechenden Spannungsabgriffen verdrahtet (einer direkt von +12V 
(natürlich auf 5V begrenzt), der andere mit Vcc der Schaltung (5V 
gepuffert). Die Erkennung auf Power-Down funktioniert übrigens 
einwandfrei - nur beim Hochlaufen habe ich eben ein Problem.

Zum Programm:
Ich habe den Code mal soweit runtergestrippt dass man sich hoffentlich 
nicht mehr in Nebensächsichkeiten verläuft:
1
// ******************************
2
void wdtOff(void) __attribute__ ((naked)) \
3
    __attribute__ ((section (".init1")));
4
5
void wdtOff(void)
6
{
7
  MCUSR &= ~(1<<WDRF);
8
  wdt_disable();
9
}
10
11
12
int main(void)
13
{
14
//  theApp.Run();
15
  
16
  SET_OUTPUT(LED1);  // green
17
  SET(LED1);
18
  while (1) 
19
    ;
20
21
  return 0;
22
}
23
// ******************************

Erläuterungen:
Die Macros SET_OUTPUT und SET setzen die Portrichtung bzw. das Portbit 
und steuern auf meinem Board damit ein LED an.
Das Ausschalten des WatchDogTimers beim Start habe ich hier über die 
Suche gefunden - das hat aber keine Veränderung gebracht.

Fuses (0xFD, 0x99, 0x77):
BODLEVEL: ist bei mir auf 2.7V eingeschaltet, aber auch bei 1.8V bzw. 
4.3V tritt das Problem unverändert auf.
WDTON ist nicht gesetzt (ich will ja keinen WatchDog)
SUT_CKSEL ist auf "FullSwingOsc., 16K CK + 65ms; CrystalOsc., slowly 
rising" gesetzt.

Ich hoffe, dass ich alle relevanten Infos abgeliefert habe. Falls nicht 
wäre ich für eine kurze Nachfrage dankbar. Dies ist mein erstes 
ATmega-Projekt...

Gruß,
Jens

von Michael B. (mb_)


Lesenswert?

Ist der ISP noch angeklemmt? Wenn ja, klemm den mal ab.

Ich hab auch mal nach einem komischen Reset nach 0.5 sekunden gesucht, 
und er kam vom ISP. Bis ich da mal drauf gekommen bin. Im Nachhinein 
logisch... :D

von Jens K. (candev)


Lesenswert?

Hallo Michael!

Ich brech' zusammen!!!!

Ich habe eben meiner Frau das Problem geschildert und dabei gemerkt, 
dass ich wohl alles schon versucht habe - ausser mal ohne ISP zu 
arbeiten. Aaaarggghhh!!! Ohne ging's dann.

Und als ich jetzt meinen Beitrag hier entsprechend ergänzen wollte da 
war Deine Antwort da mit der Problemlösung.

UND ICH ID**T LABORIERE HIER SEIT EINER WOCHE AN DEM PROBLEM HERUM :-(((

Ok, erstmal ein grosses DANKE an Dich! Und nächstes Mal werde ich früher 
hier nachfragen, wenn aus dem Datenblatt keine Lösung hervorgeht - so 
viel habe ich immerhin gelernt!

Danke und Gruß,
Jens

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.