mikrocontroller.net

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


Autor: Patrick K. (unknown_artist)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick K. (unknown_artist)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist, das txt ist abgeschnitten. Sorry, hier das neue!

Autor: Jürgen W. (juergen_w) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick K. schrieb:
time:
  ldi r25,HIGH(timer)    ;Zeitschleife
  ldi r24,LOW(timer)  
      
  nop
  nop
  nop
  
  sbiw r24,1      
  brne time
 
     ret
  
>

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

Autor: Patrick K. (unknown_artist)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Patrick K. (unknown_artist)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

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.