www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STK500 + Attiny2313


Autor: Dobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe seit ein paar Wochen ein STK500 und bis jetzt auch schon "recht 
erfolgreich" rumprogrammiert. (Ein Lauflicht, das die auf dem Board 
verbauten LEDs benutzt zum leuchten gebracht hat.) Der µC war ein 
ATMEGA8515.
Leider musste ich jetzt festellen dass mein Controller wohl den Geist 
augegeben hat, weil er nach dem neu beschreiben nichtmehr funktioniert 
(also die LEDs leuchten nichtmehr und das beschreiben hat extrem lange 
gedauert... Normal waren so 1-2sekunden, beim letzten mal waren es 
bestimmt 20sek)
Da ich aber keinen baugleichen ersatz hier habe wollte ich es jetzt 
nochmal mit einem ATTINY2313 versuchen.
Jetzt bin ich mir aber nicht 100% sicher ob ich alles richtig gemacht 
habe.
Die ISP-, die PORTB-LEDs bzw PORTD-SWITCHES Kabel habe ich nicht 
verändert.
Den µC habe ich in den Roten sockel mit der Beschriftung SCKT3300D3 
gesteckt.
Zum Testen habe ich das folgende Programm benutzt:

.include "tn2313def.inc"

         ldi r16, 0xFF
         out DDRB, r16

Main:  ldi r16, 0b11111110
        out PORTB, r16
    rjmp loop

    ldi r16, 0b11111101
    out PORTB, r16
    rcall loop
    rjmp Main

loop:   ldi r17, 255
    loop1:ldi r18, 255
    loop2:dec r18
    brne loop2
    dec r17
    brne loop1
    ret

ende:    rjmp ende

Jetzt sollten ja nach dem beschreiben des FLASH durch ISP die ersten 
zwei LEDs auf dem Board blinken. Tun sie aber nicht.... Es leuchtet nur 
LED0.
Habe das Programm jetzt mal langsam durchlaufen lassen und er spring mit 
dem Befehl "ret" vom unterprogramm loop nicht zurück in die MAIN sondern 
an den Programmanfang (Erste zeile nach .include)
Hat wer eine Idee was ich falsch gemacht habe?

Schonmal vielen Dank für die Hilfe! :)

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil keine Adresse im stackpointer ist, zu der er springen soll, also 
springt er an den anfang. wenn du loop mit rcall aufrufst, wir dire 
rücksprungadresse in den stackpointer geladen und beim return geht er 
zurück nach main:

Autor: DerGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dobby schrieb:
> rjmp loop

probier mal rcall

Autor: Dobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs grad mal mit call ausprobiert, aber mein AVRStudio sagt mir 
dass der Attiny den Befehl nicht unterstützt...
Und bei rcall bekomme ich eine Meldung

Uninitialized stack pointer used at 0x0004

OK der stack ist für die Rücksprungadresse zuständig, aber wie soll ich 
den den denn Initialisieren? Ist dafür nicht meine .include am Anfang 
zuständig?

Autor: Dobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mein Problem gelöst!
Hier der neue CODE:

.include "tn2313def.inc"

      LDI   r16,LOW(RAMEND) ;Initiate Stackpointer
      OUT   SPL,r16

         ldi r16, 0xFF
         out DDRB, r16

Main:  ldi r16, 0b11111110
        out PORTB, r16
    rcall loop

    ldi r16, 0b11111101
    out PORTB, r16
    rcall loop
    rjmp Main

loop:
ldi r16,255
LOOP1: ldi r17,255
LOOP2: ldi r18,5
LOOP3: dec r18
brne LOOP3
dec r17
brne LOOP2
dec r16
brne LOOP1
ret

ende:    rjmp ende




VIELEN DANK FÜR DIE HILFE! =)

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ist dafür nicht meine .include am Anfang zuständig?

Nein.

Normalerweise wird der Stack so initialisiert (ATTiny2313):

  ldi r16,RAMEND
  out SPL,r16

Allerdings wird beim ATTiny2313 der Stack beim Reset automatisch 
initialisiert. Nur scheint das der Simulator(1) nicht zu wissen. Wenn du 
den Simulator2 nimmst, kommt die Meldung nicht.

MfG Spess

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.