www.mikrocontroller.net

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


Autor: Steffen Scholz (funkbastler)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie machst du dein RESET-Impuls?

RESET sollte im Betrieb auf VCC liegen.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das Programm läuft nur im Programmieradapter

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

Autor: Bascomfehler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du einen Schaltplan von dem ProgAdapter?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bascomfehler (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bascomfehler wrote:
> Hast du einen Schaltplan von dem ProgAdapter?

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Falsch. Auf 0x9F!

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
recht hast DU >0x9F> somit RAMEND!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.