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
Schaltplan? wie lange ist der Resetimpuls der vom STM an den Atmega geht?
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.
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
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!?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.