Forum: Mikrocontroller und Digitale Elektronik AVR Assembler, LED-Dimmen


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe ein programm geschrieben, welches zwei leds über zwei 
Vergleichsregister (OCR1A/OCR1B) steuert/dimmt. Die LEDs fangen 
gleichzeitig an hinauf zu dimmen. Nun ab einen bestimmten Punkt 
verzögert eine LED um einen Schritt. Es wird nun sauber weiter hinauf 
gedimmt aber die eine LED ist natürlich einen Schritt später fertig. Ich 
habe OCR1A und OCR1B vertauscht und mir ist aufgefallen dass es nur bei 
OCR1A auftritt. Anschleißend habe ich einen neuen Atmega16 ausprobiert, 
das Problem ist geblieben. Nun komme ich nicht mehr weiter und bitte um 
Hilfe.

von Johannes M. (johnny-m)


Lesenswert?

Warum schickst Du die Projektdatei? Mit der kann in dem Zusammenhang 
keiner was anfangen, weil die keinen Quellcode enthält.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

nun hier ist die asm-Datei

von Johannes M. (johnny-m)


Lesenswert?

>  out  OCR1AL,  DimWertL      ;gib DimWertL in OCR1AL aus
>  out  OCR1AH, DimWertH      ;gib DimWertH in OCR1AL aus
Du beachtest die Zugriffsreihenfolge beim Schreiben der Compare-Register 
nicht! Beim Schreiben von 16-Bit-Registern der Timer muss 
grundsätzlich das High-Byte zuerst geschrieben werden.

von Stefan (Gast)


Lesenswert?

ok, danke probiere ich gleich aus

von Johannes M. (johnny-m)


Lesenswert?

Info: Datenblatt (aktuelle Version von 08/07) z.B. auf Seite 92, 
Abschnitt "Accessing 16-Bit Registers"...

von Stefan (Gast)


Lesenswert?

da ist irgendwie nichts gescheites rausgekommen. Ich habe auch 
nachgeschaut, ich kanns mir nicht erklären aber er schreibt den high 
wert zuerst, soweit ich dass in AVR Studio überblickt habe.

von Stefan (Gast)


Lesenswert?

wie kann ich ein Video anhängen?

von Johannes M. (johnny-m)


Lesenswert?

> aber er schreibt den high
> wert zuerst, soweit ich dass in AVR Studio überblickt habe.
Warum sagst Du nicht gleich, dass Du das im Simulator machst? Der 
Simulator hat einige Macken, was die 16-Bit-Timer angeht. Zitat aus der 
Hilfe:
"16-bit Timer/Counters on all devices have several problems with PWM, 
prescaler and output compare. Output compare registers are not buffered 
properly."

von Johannes M. (johnny-m)


Lesenswert?

Stefan wrote:
> wie kann ich ein Video anhängen?
Am besten gar nicht.

von Stefan (Gast)


Lesenswert?

Als ich die high werte zuerst geladen habe haben sich die led nicht 
sauber gedimmt. wenn ich die low werte zuerst lade dimmen sie sauber nur 
dass ocr1A mittendrin die Dimmstufen um einen Schritt verzögert ausgibt. 
Der ocr1B macht es sauber(geprüft auf dem Board). Es kann auch sein dass 
ich mehrere Fehler drin habe und sie sich so ausgleichen. Ich habe erst 
angefangen zu "programmieren"

von Stefan (Gast)


Lesenswert?

hast du icq?
dann könnte ich dir das im video zeigen

von Johannes M. (johnny-m)


Lesenswert?

Stefan wrote:
> hast du icq?
> dann könnte ich dir das im video zeigen
Nein, hab ich nicht. Hast Du es mittlerweile noch mal im realen System 
ausprobiert?

von Stefan (Gast)


Lesenswert?

ja, schon aber die Abfolge der Helligkeiten der Leds ergiebt irgendwie 
keinen Sinn. Ich hab die werte auch umgedreht 2,4,8 usw. auch hierbei 
ist nichts brauchbares herrausgekommen. Im Internet habe ich auch 
gelesen dass das high Byte zuerst geladen werden muss. Andersherum gings 
eben bei mir besser :-D. Was ich überhaupt nicht verstehe, warum 
arbeiten im realen System OCR1A und OCR1B nicht "geich"

von Johannes M. (johnny-m)


Lesenswert?

1
>   ldi   r16,  0x03          ;Z�hler setzen, jetz fangt er mit der
2
>   out   TCNT1H,  r16            ;Hauptschleife zu z�hlen an
3
>   ldi   r16,  0xFF
4
>   out   TCNT1L,  r16
Hat zwar vermutlich nix mit dem eigentlichen Problem zu tun, aber fiel 
mir grad noch so auf: Was soll das da? Warum lädst Du den Timer am 
Anfang vor?

Was Du da in der Hauptschleife machst, erschließt sich mir auch nicht so 
ganz...

von Stefan (Gast)


Lesenswert?

ohne diesen vers fangen die leds nicht "sauber" an, versteh ich selber 
nicht so ganz, habe irgendwo im internet gefunden, funktioniert aber

von Johannes M. (johnny-m)


Lesenswert?

Stefan wrote:
> ohne diesen vers fangen die leds nicht "sauber" an,
              ^^^^
Vers? Als Gedicht oder gar Lied würde ich das Programm aber nicht 
bezeichnen...;-)

von Stefan (Gast)


Lesenswert?

ich könnte dir das video doch über email schicken?

von Johannes M. (Gast)


Lesenswert?

Ich will es aber nicht haben!

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.