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
Mist, das txt ist abgeschnitten. Sorry, hier das neue!
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.
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.