Forum: Mikrocontroller und Digitale Elektronik Programm läuft - aber nur direkt nach flashen


von Stephan E. (loetzinn02)


Angehängte Dateien:

Lesenswert?

Guten Tag in die werte Runde,

hier habe ich ein seltsames Problem:
Auf einem Attiny13a soll das angehängte Programm laufen. Momentan macht 
das nicht viel, außer einer LED an PB4, welche in einem bestimmten 
Rhythmus aufleuchtet.

Das Programm läuft direkt nach dem flashen wie gewünscht, und auch im 
Simulator gibt's keinerlei Probleme.
Sobald ich aber den Controller vom Strom ab- und wieder anklemme 
(sprich: vom Programmer den USB-Stecker abziehe und gleich wieder 
anstecke), passieren unvorhersehbare Dinge. Meistens passiert einfach 
gar nichts (LED bleibt aus) oder - denn die Versorgungsspannung nur kurz 
getrennt wird - die LED leuchtet nach scheinbar zufälligem Muster oder 
invertiert. Ein Reset über den reset-Pin bringt auch keine Änderung. 
Wenn ich jetzt wieder neu flashe läuft alles wieder wie erwartet - bis 
zur nächsten Trennung der Stromversorgung.

Am Attiny hängt nichts außer dem Programmer sowie der gegen GND 
geschalteten LED samt 2K-Vorwiderstand und einem 100n-Kondensator 
zwischen Vcc und GND, alles auf einem Steckbrett.
Die Fuses sind im Auslieferungszustand (64ms startup-time). Beim flashen 
selbst und auch einem verify mit avrdude treten keinerlei Fehler auf.

Ich habe auch schon versucht die Warteschleife, die am Ende des Codes 
steht, gleich zu Beginn mehrmals laufen zu lassen - keine Änderung 
(außer daß das Programm direkt nach dem flashen halt später startet). 
Alternativ habe ich auch eine Version, die statt des eeproms den SRAM 
nutzt. Damit exakt dasselbe Phänomen, so daß ein defekter eeprom 
vermutlich auch eher unwahrscheinlich ist.

Die Spannungsversorgung von 3.3V kommt aus einer stabilen Quelle, 
genauer aus einem Diamex AVR ISP. Damit hatte ich noch nie Probleme und 
glaube nicht, daß es daran liegt.

Hat zufällig jemand einen sachdienlichen Hinweis für mich?

von C-hater (c-hater)


Lesenswert?

Stephan E. schrieb:

> Das Programm läuft direkt nach dem flashen wie gewünscht, und auch im
> Simulator gibt's keinerlei Probleme.
> Sobald ich aber den Controller vom Strom ab- und wieder anklemme
> (sprich: vom Programmer den USB-Stecker abziehe und gleich wieder
> anstecke), passieren unvorhersehbare Dinge.

Sehr wahrscheinlich: nicht initialisierte "Variablen".

Vermutlich ist das Programm allein mit dem Simulator entwickelt worden. 
Der initialisiert den SRAM immer komplett auf Null. Das ist aber nicht 
das Verhalten der realen Hardware. Da enthält der SRAM beim 
Programmstart mehr oder weniger zufällige Werte.

Beim Simulator fallen fehlende Initialisierungen auf Null deswegen nicht 
auf. Auf der realen Hardware dann aber schon...

von Stephan E. (loetzinn02)


Lesenswert?

> Sehr wahrscheinlich: nicht initialisierte "Variablen".
Wahnsinn - genau das war's. Vielen Dank - wieder was gelernt.



> Vermutlich ist das Programm allein mit dem Simulator entwickelt worden.
Ja, genau.

: Bearbeitet durch User
von Jörn P. (jonnyp)


Lesenswert?

C-hater schrieb:
> Sehr wahrscheinlich: nicht initialisierte "Variablen".

Ich seh zwar das du die Datanrichtung DDRD des PB4 setzt, aber nicht das 
du den Port auch schaltest, PB4 auf hi/lo setzt.

von S. L. (sldt)


Lesenswert?

1
sbi PINB,LED  ; toggle
'Writing a logic one to PINxn toggles the value of PORTxn, independent 
on the value of DDRxn. Note that the SBI instruction can be used to 
toggle one single bit in a port.'

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.