Forum: Mikrocontroller und Digitale Elektronik STM32 resetet Atmega8: und das war's


von Mehmet K. (mkmk)


Lesenswert?

Servus allerseits

Als Neueinsteiger in die STM32-Welt habe ich mich bei meinem jetzigen 
Projekt nicht getraut, nur auf die STM32-Karte zu setzen. Ich gestehe: 
pure Feigheit.
Deshalb habe ich alles was hardware-nah war, einem Atmega8 anvertraut, 
der seine Anweisungen vom STM32 via UART empfaengt.
Ueber eine Leitung kann der STM32 den Atmega8 reseten.

Alles laeuft reibungslos. Bis ich via STM32 den Atmega8 resete. Nach 
diesem Reset laeuft auf dem Atmega nichts mehr.
Wenn am Atmega ein Debugger angeschlossen ist, kann ich nach dem Reset 
mit "continue" weiterfahren. Aber wenn kein Debugger angeschlossen ist, 
gibt der Atmega kein Lebenszeichen mehr von sich.

Die Spannung ist sauber, das Resetsignal ebenfalls. Weiss jemand Rat?

MfG aus Istanbul

von chris (Gast)


Lesenswert?

Schaltplan?
wie lange ist der Resetimpuls der vom STM an den Atmega geht?

von Mehmet K. (mkmk)


Lesenswert?

Mit der Dauer des Resetimpulses habe ich weidlich herumgespielt. Daran 
dürfte es nicht liegen. Selbst mit Einzellschritt beim Debuggen gibt es 
diesen Blackout beim Atmega.
Ausser ich habe die Reset-Spezification falsch interpretiert. Dort 
heisst es Minimum pulse width on RESET Pin: Max 2.5us
Ich gehe davon aus, dass der Reset-Impuls min. 2.5us betragen muss; nach 
oben keine Beschraenkung.

Schaltplan: ein Pullup 10k Widerstand haengt am Reseteingang, wo auch 
die Drain eines N-Mosfet angeschlossen ist. Die Gate, mit einem Pulldown 
Widerstand von 47k ist mit der STM32-Leitung verbunden. Und die Source 
natürlich am Ground.

von Peter D. (peda)


Lesenswert?

Der AVR rennt mit Sicherheit los.
Aber irgendein Fehler in Deinem Programm bewirkt, daß ne Bedingung 
ständig falsch ist und er dann ewig in einer Schleife rumhängt.

Vielleicht setzt Du aber auch den Watchdog und das Init dauert zu lange, 
so daß er ständig neu resettet.

Es wird also irgendwas in Deiner SW sein.


Mehmet Kendi schrieb:
> Wenn am Atmega ein Debugger angeschlossen ist, kann ich nach dem Reset
> mit "continue" weiterfahren.

?
Der ATmega8 hat doch weder JTAG noch DW.


Peter

von Mehmet K. (mkmk)


Lesenswert?

:) Pardon! Sollte natürlich Atmega88 heissen.

von nur n Vermutung (Gast)


Lesenswert?

bei einem reset wird der atmega zwar zurück gesetzt aber die variablen 
im ram bleiben auf dem alten wert.
kann es sein dass irgendeine (globale) variable beim start nicht 
initialisiert wird nun eben beim zweiten hochlauf nicht auf "0" ist!?

von Mehmet K. (mkmk)


Lesenswert?

nur n Vermutung schrieb:
> aber die variablen im ram bleiben auf dem alten wert.

Hmmm, daran habe ich gar nicht gedacht. Aber ich greif mal Peter's 
Gedanke auf und lass mal bei jedem Step die Led leuchten und verbleibe 
im Endlosloop.
Mal schauen, ob ich durch die Initialisierung komme.

von Mehmet K. (mkmk)


Lesenswert?

Ich habe die Atmega-main zu Testzwecken wie folgt geaendert:
1
int main(void)
2
{
3
  LED_RED_OFF;
4
  LED_GREEN_OFF;
5
  LED_RED_DDR   |= (1 << LED_RED_PIN);
6
  LED_GREEN_DDR |= (1 << LED_GREEN_PIN);
7
8
  LED_GREEN_ON;
9
  my_delay_100ms(10);
10
  LED_GREEN_OFF;
11
  LED_RED_ON;
12
  while(1);
13
}

Ich schalte das Geraet ein, die güne LED geht für 1 Sekunde an, erlischt 
und dann geht die rote LED an.
Nun starte ich den STM32-Debugger, die die Reset-Line auf LOW zieht: es 
passiert nichts. Dann hight: es passiert nichts. Die rote LED bleibt an.
Und auf dem Multimeter, der am Reset angeschlossen ist, sehe ich diesen 
Reset weil ich step by step debuggern tue.

von Mehmet K. (mkmk)


Lesenswert?

Ich hab den Fehler gefunden.
Der Reset-Pin wird ja beim Atmega88 waehrend dem Debuggen als DebugWire 
benutzt!
Nachdem ich die DebugFunktion verlassen hatte, war der Spuk vorbei.

Sorry! Mea culpa.

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.