Forum: Mikrocontroller und Digitale Elektronik ATtiny13 kein Programmstart bei power on


von Steffen S. (funkbastler)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

wie machst du dein RESET-Impuls?

RESET sollte im Betrieb auf VCC liegen.

von Klaus (Gast)


Lesenswert?

>Das Programm läuft nur im Programmieradapter

Das ist ein kleines Wunder! Wo wird denn der SP init.?

von Bascomfehler (Gast)


Lesenswert?

Hast du einen Schaltplan von dem ProgAdapter?

von Klaus (Gast)


Lesenswert?

>  ;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

von Bascomfehler (Gast)


Lesenswert?

Programm läuft auch ohne daß der Stack eingerichtet ist.
Auch auf einem Tiny2313.
Seltsam, warum auch immer.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

Bascomfehler wrote:
> Hast du einen Schaltplan von dem ProgAdapter?

Das sollte die Beschaltung des Platinchens sein
http://www.mikrocontroller.net/attachment/31361/LPmikroSoft.jpg

von Klaus (Gast)


Lesenswert?

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 :(

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>SPL ist auf 0x1F nach dem Start initaliesiert (DB Seite 11)
>und zeigt somit auf R31!

Falsch. Auf 0x9F!

von Klaus (Gast)


Lesenswert?

recht hast DU >0x9F> somit RAMEND!

von Gast (Gast)


Lesenswert?

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