mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warteschleife mit Atmega8535 funktioniert nicht?


Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche nun schon verzweifelt meine billige Warteschleife in 
betrieb zu nehmen. Hier mein Programmbeispiel:

____________________________________________________
    .include "m8535def.inc"

      rjmp Anfang

Anfang:
sbi ddrb,0

Initanzeige:
    rcall warteschleife
    cbi  portb,0

test:
rjmp test



Warteschleife:
    ldi  r16,255
Warteschleife1:
    ldi  r19,255
Warteschleife2:
  dec r19
  brne Warteschleife2
  dec  r16
  brne Warteschleife1
  sbi portb,0
  ret
____________________________________________________

Das problem ist, dass er nicht mehr aus der Warteschleife zurück kommt. 
sbi portb,0 wird noch ausgeführt, aber das cbi portb,0 nicht mehr.

Jemand eine ahnung wiso? Das LED leuchtet durchgehend.

Und eine 2. Frage hab ich gleich auch noch:
Wie kann ich den Takt des Atmegas konfigurieren?

Ich hoffe ihr könnt mir helfen :) vielen dank!

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja was vergessen sorry:

Diese Warteschleife hier funktioniert komischerweise:

XTAL wurde mit .def XTAL = 8000000 definiert.


           ldi  temp1, ( XTAL * 5 / 607 ) / 1000
WGLOOP0:   ldi  temp2, $C9
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  temp1
           brne WGLOOP0
           ret

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Michi (Gast)

>Ich versuche nun schon verzweifelt meine billige Warteschleife in
>betrieb zu nehmen. Hier mein Programmbeispiel:

Tja, hast du dir mal überlegt oder simuliert, was da passiert?

>sbi ddrb,0

Auf Ausgang schalten, OK

>    rcall warteschleife

Schleif hab ich mal vom logischen Ablauf reinkopiert.

>Warteschleife:
>    ldi  r16,255
>Warteschleife1:
>    ldi  r19,255
>Warteschleife2:
>  dec r19
>  brne Warteschleife2
>  dec  r16
>  brne Warteschleife1

Zwei verschtelte Schleifen, mit 65536 Durchläufen.

>  sbi portb,0

LED ein.

>  ret

Zurückspringen

>    cbi  portb,0

LED aus.

>test:
>rjmp test

Endlosschleife

Hmm, wenn du mich fragst, verdammt wenig Zeit zum leuchten. ;-)

Kann es sein, dass du ein STK500 hast, und die LEDs low active sind?

MfG
Falk

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast das falsch verstanden. das LED leuchtet IMMER! es hört nicht auf 
zu leuchten. Und da es erst vor dem ret eingeschaltet wird, wird wohl 
auch da der Fehler sein denke ich. Allerdings finde ich keinen ???? Hab 
ich eventuell was falsch eingestellt? der Atmega ist Fabrikneu und hab 
bisher nichts gross umgestellt. ausser "BODEN" auf 1 (bzw auf 0 im AVR)

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Kathoden (das ist der Minusanschluss) der LEDs am Port hängen 
werden sie durch
cbi  portb,0
eingeschaltet und dann geht Dein Programm in die Endlosschleife.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal so.

    .include "m8535def.inc"

sbi ddrb,0

test:
    rcall warteschleife
    cbi  portb,0
    rcall warteschleife
    sbi  portb,0
rjmp test

Warteschleife:
    ldi  r16,255
Warteschleife1:
    ldi  r19,255
Warteschleife2:
  dec r19
  brne Warteschleife2
  dec  r16
  brne Warteschleife1
  ret

MfG
Falk

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wo ist die Stackpointer-Initialisierung?

Gruß aus Berlin
Michael

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uups ;-)

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr meint das hier?:

           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten 
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

auch wenn ich das ganze miteinbinde ganz am anfang vom Programm 
funktionierts nicht. Beim Atiny13 den ich vorhher hatte hat alles 
wunderbar funktioniert.

Ich werde morgen mal nochmals einen Versuch machen. Komme heute nicht 
mehr dazu und schreib dann wies ausgegangen ist.

Gruss Michi ;)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Michi (Gast)

>funktionierts nicht. Beim Atiny13 den ich vorhher hatte hat alles
>wunderbar funktioniert.

Der hat ja auch einen Hardwarestack.

MfG
Falk

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja für den hatte ich so n' Starterkit, dass so zimlich alles selber 
gemacht hat, bzw. eingestellt hat. Daher bin ich mir nicht sicher ob ich 
nun mit dem AVR und Pinyprog alles richtig mache.

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm komisch. in einem anderen Programm funktioniert das ganze 
programm...

Ich werde wohl das ganze nochmals anschauen müssen,

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.