Hallo ich bin Neuling bei Atmel und habe bisher nur mit PIC gespielt. Jetzt ist mir ein "LernpaketMikrocontroller" von Franzis auf den Tisch gekommen und ich mache die ersten Trockenübungen mit dem beiliegenden ATtiny13 - wie zu Anfang üblich: eine LED blinken lassen (Blink2 nach den Franzis-Buch): hier das Prog. ;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,250 Warten2: ;innere Schleife dec r17 brne Warten2 dec r16 brne Warten1 ret ;Rücksprung Problem: Das Programm läuft nur im Programmieradapter. Wenn ich den Programmieradapter vom PC abziehe und von außen mit Spannung versorge, startet es nicht. Erst ein RESET-Impuls an Pin1 lässt es loslaufen. Ich habe schon mit diversen Beschaltungen des RESET-Pins experimentiert, leider ohne Erfolg. Schlagen hier eventl. Interrupts zu (brown out?), es sind ja keine Interruptvektoren programmiert ? Bin i.Moment völlig ratlos und könnte einen Tip gut brauchen. Danke von Funkbastler
wie machst du dein RESET-Impuls? RESET sollte im Betrieb auf VCC liegen.
>Das Programm läuft nur im Programmieradapter
Das ist ein kleines Wunder! Wo wird denn der SP init.?
> ;Stack einrichten > ldi R16, LOW(RAMEND) > out SPL, R16 ldi r16,0x18 ;PB 3 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,250 Warten2: ;innere Schleife dec r17 brne Warten2 dec r16 brne Warten1 ret ;Rücksprung Gruß Klaus
Programm läuft auch ohne daß der Stack eingerichtet ist. Auch auf einem Tiny2313. Seltsam, warum auch immer.
Bascomfehler wrote: > Programm läuft auch ohne daß der Stack eingerichtet ist. > Auch auf einem Tiny2313. > Seltsam, warum auch immer. Einige Prozessoren richten den Stackpointer automatisch beim Power-On Reset auf die letzte SRAM Adresse ein. Keine Ahnung ob der Tiny13 das auch macht. Aber wenns funktioniert, wenn das Platinchen am PC steckt, aber nicht wenn es vom PC weg ist, würde ich auch erst mal die Reset Beschaltung in Verdacht haben.
Bascomfehler wrote: > Hast du einen Schaltplan von dem ProgAdapter? Das sollte die Beschaltung des Platinchens sein http://www.mikrocontroller.net/attachment/31361/LPmikroSoft.jpg
Verblüffend!!!! SPL ist auf 0x1F nach dem Start initaliesiert (DB Seite 11) und zeigt somit auf R31! jetzt bin ich fretsch, ich will nach haus :(
>SPL ist auf 0x1F nach dem Start initaliesiert (DB Seite 11) >und zeigt somit auf R31! Falsch. Auf 0x9F!
Steht doch im Datenblatt ("Stack Pointer", Seite 9): "The Stack Pointer points to the data SRAM Stack area where the Subroutine and Interrupt Stacks are located. This Stack space in the data SRAM is automaticall defined to the last address in SRAM during power on reset." Der "alte" Passus... "All user programs must initialize the SP in the Reset routine (before subroutines or interrupts are executed)." ...steht allerdings auch immer noch auf Seite 6, obwohl das "must" jetzt ja so nicht mehr gilt.
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.