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