Forum: Mikrocontroller und Digitale Elektronik Wie bei Attiny13 RESET programmieren


von Uwe W. (dk1kq)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die Spannung hinreichend schnell ansteigen lassen, damit die
power-on-reset-Logik zuschlägt.

Nein, du wirst ein komplett anderes Problem haben.

von Peter D. (peda)


Lesenswert?

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

von dk1kq (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von norad (Gast)


Lesenswert?

>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

von AVRFan (Gast)


Lesenswert?

Stackinitialisierung?

von Peter D. (peda)


Lesenswert?

AVRFan wrote:
> Stackinitialisierung?

Macht das Reset.
Hat ja lange genug gedauert, ehe Atmel das endlich richtig gemacht hat.


Peter

von AVRFan (Gast)


Lesenswert?

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.

von dk1kq (Gast)


Lesenswert?

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

von Uwe N. (Firma: Privat) (djuwert)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von AVRFan (Gast)


Lesenswert?

>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).

von dk1kq (Gast)


Lesenswert?

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