Wie programmiert man einen Reset beim Programmstart ? Für Anfänger einfaches LED - Blink Programm. Mit AVR Studio 4. Im Programmer läuft es, jedoch wenn ich den Controller herausnehme und auf eine kleine Leiterplatte montiere, tut sich nichts. Da das Programm im Programmer läuft, nehme ich an, dass ein RESET beim Programmstart fehlt. Wie macht man das ? ;Blink2.asm Blinker mit Unterprogramm .include "tn13def.inc" rjmp Anfang Anfang: ldi r16,0x18 ;PB4 und PB4 out ddrb,r16 ;Datenrichtung Schleife: ldi r16,8 ;8 = 0x08 out portb,r16 ;PB3 = 1, PB4 = 0 rcall Warten ;Unterprogrammaufruf ldi r16,16 ;16 = 0x10 out portb,r16 ;PB3 = 0, PB4 = 1 rcall Warten ;Unterprogrammaufruf rjmp Schleife Warten: Ldi r16,250 Warten1: ;äußere Schleife Ldi r17,50 Warten2: ;innere Schleife dec r17 brne Warten2 dec r16 brne Warten1 ret ;Rücksprung Hilfe erbeten Uwe
Die Spannung hinreichend schnell ansteigen lassen, damit die power-on-reset-Logik zuschlägt. Nein, du wirst ein komplett anderes Problem haben.
Uwe Wensauer wrote: > Da das Programm im Programmer läuft, nehme ich an, dass ein RESET beim > Programmstart fehlt. Reset ist ein Pin, der muß auf VCC liegen, damit das Programm startet. Das Programm sieht o.k. aus. Vielleicht ist das Delay zu klein und Du sieht das Flackern nicht (>50Hz) Peter
Ja ! die Power on- Seset logik scheint nicht zu funktionieren. Es kann vorkommen, dass das Programm erst nach mehrmaligem Ein/Ausschalten der Betriebsspannung startet. Habe auch scon einen Pull- UP von 10K an Pin1 gelegt.- ohne Erfolg Hätte es einen Sinn von VCC nach Masse ein C ( zB. 100uF - 1uF ) zu legen ? 73 uwe
dk1kq wrote: > Habe auch scon einen Pull- UP von 10K an Pin1 gelegt.- ohne Erfolg Der ist eingebaut. > Hätte es einen Sinn von VCC nach Masse ein C ( zB. 100uF - 1uF ) zu > legen ? Errm, willst du damit sagen, dass du den ATtiny13 komplett unabgeblockt betreibst? Da gehört ein Keramikkondensator von 100 nF möglichst nahe dran. Eigentlich sollte die Powerup-Reset-Logik recht zuverlässig klappen, solange man nicht gerade extrem langsame Anstiegszeiten von Vcc hat. Um einzukreisen, ob du ein Reset-Problem hast, kannst du ja im Fehlerfall mal kurzzeitig /RESET nach Masse ziehen. Das wäre dann ein Extern-Reset, danach muss er auf jeden Fall loslaufen.
>Da gehört ein Keramikkondensator von 100 nF möglichst nahe am Attiny13. Am besten zwei ;-) > ldi r16,0x18 ;PB4 und PB4 > out ddrb,r16 ;Datenrichtung Irgend wie leuchtet mir das nicht ein. Müsste des jetzt nicht eher so lauten: sbi ddrb,8 oder 0x08 für PB4 heißen oder täusch ich mich? für PB0 = ddrb,0 PB1 = ddrb,1 PB2 = ddrb,2 PB3 = ddrb,3 Gruß Norad
AVRFan wrote:
> Stackinitialisierung?
Macht das Reset.
Hat ja lange genug gedauert, ehe Atmel das endlich richtig gemacht hat.
Peter
Hehe, auf Seite 6 des Data Sheet zum ATtiny13 ist zu lesen "All user programs must initialize the SP in the Reset routine (before subroutines or interrupts are executed)." Aber zugegeben, auf Seite 9 ebendieses Dokuments steht tatsächlich "This Stack space in the data SRAM is automaticall defined to the last address in SRAM during power on reset." Was soll man davon halten? ;-) Danke für den Hinweis.
wenn ich pin 1 kurzzeitig an Masse lege, legt der Tiny los. ein oder 2 100nF sind wirkungslos. auch größere 1uF / 10uf zeigen keine Wirkung. jetzt mache ich schluß und trinke ein Bier 73 Uwe
dk1kq wrote: > wenn ich pin 1 kurzzeitig an Masse lege, legt der Tiny los. > ein oder 2 100nF sind wirkungslos. > auch größere 1uF / 10uf zeigen keine Wirkung. > > jetzt mache ich schluß und trinke ein Bier > > 73 > Uwe Hi! Es ist nur EIN C am VCC sinnvoll und nur max. 100nF. Mehr hat wieder einen anderen Effekt und ist nicht sinnvoll. Nimm nur 100nF.
AVRFan wrote: > Hehe, auf Seite 6 des Data Sheet zum ATtiny13 ist zu lesen > > "All user programs must initialize the SP in the Reset routine > (before subroutines or interrupts are executed)." Standardtext. Copy&pasted aus der Zeit, bevor das SP-Register einen sinnvolleren Initialwert als 0 bekam.
>Standardtext. Copy&pasted...
War mir schon klar :-) Aber ich freu mich, dass das Copy&Pasten von...
ldi temp, Low(RAMEND)
out SPL, temp
ldi temp, High(RAMEND)
out SPH, temp
...jetzt ein Ende hat (bei Verwendung der neuen Controller).
Hallo Leser, das Problem ist gelöst ! Nachdem ich mit PonyProg den Tiny ausgelesen habe, untersuchte ich die FUSE-Bits. Dort war BODLEVEL1 mit einem Haken versehen. Das Interpretiere ich als Brown- Out disabled. Haken raus - und - der Tiny startet ! Danke für all die Tipps - jetzt kann ich mit der nächsten Lernstufe auseinandersetzen - Ausgänge schalten Uwe
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.