Hallo allerseits, ich stehe augenblicklich vor einem Problem: Ich bin dabei mir eine 4-Kanal (4x RGB, also 12 geschaltete Ausgänge) RGB-LED Steuerung zu bauen. Dazu verwende ich auf einem ATmega88PA (4,096 MHz externer Quarz) den Timer0 Compare Match A Interrrupt, der einen Zähler hochzählt und jedesmal den aktuellen Zählerstand mit den jeweils eingestellten Schwellwerten vergleicht und den entsprechenden Ausgang an oder abschaltet. Compare Match deswegen, weil ich so die Frequenz der PWM etwas regeln kann. Soweit funktioniert das auch ganz gut - Verschiedene statische Farben funktionieren und einen Fading-Effekt habe ich auch hinbekommen. Jedoch zeigt sich bei diesem ein Problem: Ich arbeite natürlich mit einem Register für den Zähler, womit meine Schaltwerte also immer zwischen 0 und 255 liegen. Dadurch lassen sich "relativ" wenige Dimmwerte realisieren (da ja auch noch nicht linear) und man sieht vor allem bei niedrigen Helligkeitsstufen die Sprünge zwischen den Stufen, anstatt einen sanften Übergang zu erzielen! Es bleibt also wahrscheinlich nichts anderes als statt mit 8 Bit mit 16 Bit zu arbeiten, jedoch sind meine Kenntnisse hier am Ende (ich würde mich durchaus noch als Anfänger bezeichnen) Ist es überhaupt möglich auf einem ATmega88 16 Bit Vergleiche durchzuführen? Oder hat jemand eine bessere Idee wie ich das Problem umgehen könnte? Ich wäre für jede Hilfe dankbar. Achja ich programmiere in Assembler im dem AVR Studio.
@ Freddy (Gast) >Ist es überhaupt möglich auf einem ATmega88 16 Bit Vergleiche >durchzuführen? Sicher. AVR-Tutorial: Arithmetik > Oder hat jemand eine bessere Idee wie ich das Problem >umgehen könnte? Siehe Soft-PWM und LED-Fading, ist aber in C. MfG Falk
Hm nun die genannten Artikel habe ich mir auch schon zumindest angesehen. Aber wie gesagt ich bin nun erst Anfänger und wirklich sehr viel schlauer war ich danach auch nicht. :) Kann ich denn nach einem im Arithmetik-Artikel beschriebenen 16-Bit vergleich einfach mit den alten Befehlen (z.B. brsh, brlo, breq....) arbeiten? (sorry, warscheinlich ne doofe Frage) Und noch etwas recht triviales: Der ATmega88 kennt ja nun adiw und sbiw wenn ich z.B. "adiw r16, 1" angebe, steht das Ergebnis dass in r16 und r17? Und welches wird dann als höherwertiges Bit genommen? (ein einfaches inc gibt es für zwei Register ja nicht!?)
@ Freddy (Gast) >Kann ich denn nach einem im Arithmetik-Artikel beschriebenen 16-Bit >vergleich einfach mit den alten Befehlen (z.B. brsh, brlo, breq....) >arbeiten? Ja. >Und noch etwas recht triviales: Der ATmega88 kennt ja nun adiw und sbiw >wenn ich z.B. "adiw r16, 1" angebe, steht das Ergebnis dass in r16 und >r17? Und welches wird dann als höherwertiges Bit genommen? R17, steht in der Doku der Assemblerbefehle. Aber der Befehl geht nur mit R24-R31.
Hi >Kann ich denn nach einem im Arithmetik-Artikel beschriebenen 16-Bit >vergleich einfach mit den alten Befehlen (z.B. brsh, brlo, breq....) >arbeiten? (sorry, warscheinlich ne doofe Frage) Ja. Aber wozu braucht man brsh oder brlo? Die erzeugen den gleichen Code wie brcc bzw. brcs. Sind also nur Synonyme. >Und noch etwas recht triviales: Der ATmega88 kennt ja nun adiw und sbiw >wenn ich z.B. "adiw r16, 1" angebe, steht das Ergebnis dass in r16 und >r17? Und welches wird dann als höherwertiges Bit genommen? (ein >einfaches inc gibt es für zwei Register ja nicht!?) Wenn du den vollständigen Syntax 'adiw r17:16,1' benutzt, ist das klarer. MfG Spess
Ja da hast du recht - brcc und brsh tun das gleiche jetzt wo ich es mir anschaue. War mir nicht klar - wohl einfach weil ich mir den anderen Befehl nie angeschaut habe - brsh ist doch auch schneller verständlich wenn man den Code liest finde ich. Aber danke - wieder was dazugelernt. Und das höherwertige Bit bei 16-Bit Operationen ist immer auch das vom "Index" höhere, okay. Dann danke ich euch - das hat mir schonmal sehr geholfen und ich werd mich wieder an die Arbeit machen können.
Hi >...Befehl nie angeschaut habe - brsh ist doch auch schneller verständlich >wenn man den Code liest finde ich. Wenn man das Carry-Flag verstanden hat, ist das genau so verständlich. MfG Spess
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.