Forum: Mikrocontroller und Digitale Elektronik Probleme mit ROL / ROR und AvrStudio Simulation


von Patrick K. (unknown_artist)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!



Ich versuche ein LED Lauflicht zu programmieren (Wie schon millionen 
Anfänger vor mir). Genauer gesagt soll es "normal" links herum laufen, 
aber wenn man auf einen Taster drückt (im Code angeschlossen an PIND.0) 
soll es die Richtung ändern.

Die Hardware ist das STK500 mit dem mitgelieferten AtMega8515L, die 
verbauten LEDs und Taster werden verwendet.
Code im Anhang. Ist wahrscheinlich alles noch sehr ungeschickt 
programmiert, dafür kommentiert.
Vor dem ausführen wird timer=50000 gesetzt, die 1 nur zum simulieren.


Jetzt das eigentliche Problem:

In der Simulation funktioniert das ganze Prima. Alle Unterprogramme 
laufen durch, gibt nichts zu meckern. Wenn ich mir PORTB anschaue läuft 
alles exakt wie gewünscht, mit den Carry Bits gibts auch keine Probleme.

Aber sobald ich das Programm auf den Atmega lade funktioniert es 
nichtmehr. Es leuchtet nur der Angangszustand, also die erste LED und 
das wars dann.

Um das Problem zu lösen habe ich folgendes probiert:

Jeder Programmteil (also rechtsrum / linksrum) habe ich  in ein eigenes 
Programm gepackt und raufgeladen - Beide Richtungen funktionieren an 
sich.

Dann hab ich die "Abfrageroutine" rausgeschrieben und zwei einfachere 
Unterprogramme konstruiert: Für "nicht drücken" sind alle Lichter aus, 
beim drücken geht eine LED an PORTB an - funktioniert auch.

Sobald ich alles zusammenpacke geht es in der Simulation ganz normal, 
aber nicht mehr auf dem Controller.


Was könnte ich falschmachen?
Vielen Dank für die Hilfe!

Grüße,

Patrick

von Patrick K. (unknown_artist)


Angehängte Dateien:

Lesenswert?

Mist, das txt ist abgeschnitten. Sorry, hier das neue!

von Jürgen W. (juergen_w) Benutzerseite


Lesenswert?

Patrick K. schrieb:
1
time:
2
  ldi r25,HIGH(timer)    ;Zeitschleife
3
  ldi r24,LOW(timer)  
4
      
5
  nop
6
  nop
7
  nop
8
  
9
  sbiw r24,1      
10
  brne time
11
 
12
     ret
>

Dieses Unterprogramm wird nicht wieder verlassen, da du immer wieder 
nach "time:" springst
wo ja dein Timer Startwert geladen wird.

von Patrick K. (unknown_artist)


Lesenswert?

Oh mann .. das hab ich völlig übersehen.
Klar, wenn ich zum simulieren den "timer" Wert mit ner 1 lade, dann 
funktionierts natürlich ...


Jetzt funktioniert die Linksschleife :D
Tausend Dank soweit.

Nur, der Richtungswechsel geht (noch) nicht ...

von Patrick K. (unknown_artist)


Angehängte Dateien:

Lesenswert?

Hab noch ein paar Fehler ausgemerzt, jetzt laufen beide Richtungen.


Wer noch Zeit und Lust auf Tips hat: Wie kann ich das "professioneller" 
programmieren? Also "geschickter"?

Danke soweit für die Hilfe!!

(Korrekter Sourcecode hängt dran)

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.