ATtiny13 kein Programmstart bei power on

OP #1144520
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
Gast #1144563
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
#1144605
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.
Gast #1144675
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren