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


von Michi (Gast)


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!

von Michi (Gast)


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

von Falk B. (falk)


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

von Michi (Gast)


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)

von Matthias Kölling (Gast)


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.

von Falk B. (falk)


Lesenswert?

Versuchs mal so.

1
    .include "m8535def.inc"
2
3
sbi ddrb,0
4
5
test:
6
    rcall warteschleife
7
    cbi  portb,0
8
    rcall warteschleife
9
    sbi  portb,0
10
rjmp test
11
12
Warteschleife:
13
    ldi  r16,255
14
Warteschleife1:
15
    ldi  r19,255
16
Warteschleife2:
17
  dec r19
18
  brne Warteschleife2
19
  dec  r16
20
  brne Warteschleife1
21
  ret

MfG
Falk

von Michael U. (amiga)


Lesenswert?

Hallo,

wo ist die Stackpointer-Initialisierung?

Gruß aus Berlin
Michael

von Falk B. (falk)


Lesenswert?

Uups ;-)

von Michi (Gast)


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

von Falk B. (falk)


Lesenswert?

@  Michi (Gast)

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

Der hat ja auch einen Hardwarestack.

MfG
Falk

von Michi (Gast)


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.

von Michi (Gast)


Lesenswert?

hmm komisch. in einem anderen Programm funktioniert das ganze 
programm...

Ich werde wohl das ganze nochmals anschauen müssen,

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.