PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR 12Bit-PWM Lookuptable



teslanikola
16.06.2008, 22:38
Hallo Leute,
ich hab nen kleines Problem: Ich habe ein Programm zum dimmen von LEDs. Dort verwende ich den T1 zum erzeugen des 12-Bit PWM-Signal ( ICR und CompareMatch ) und eine Lookup im Flash um das dimmen zu linearisieren ( für das Auge versteht sich ). Jetzt dimmt der Mega88 fein sauber bis zum Maximum durch und dann fängt die LED an wie wild zu flackern, nach 1-2 sec dimmt sie dann wieder ab. Unten angekommen wird ohne Probleme wieder aufgedimmt, das Problem ist nur beim Maximum. Ich kann den Fehler einfach nicht finden.

Grüße teslanikola

askazo
17.06.2008, 11:22
Hi,

Du hast den Timer falsch eingestellt.
mit
TCCR1A = (1<<COM1A1)|(1<<WGM11);
TCCR1B = (1<<WGM12)|(1<<CS10);
stellst Du 9-bit Fast-PWM ein (TOP bei 0x1FF)
Für Fast-PWM mit TOP bei ICR musst Du auch WGM13 noch einschalten, dann funktionierts.

Noch 2 Sachen:
- Du hast F_CPU nicht definiert, das ist für die korrekte Ausführung von _delay_ms notwendig.
- die Abfrage
if(pwm > 255) pwm = 255; in PWM_set() ist völlig unnötig, da der Parameter pwm als unsigned char sowieso keinen größeren Wert als 255 annehmen kann.

Gruß,
askazo

teslanikola
17.06.2008, 14:05
F_CPU ist definiert ( bei den Compiler-Options)

Danke, das mit dem Timer hätte ich mir echt denken können, vielen Dank!


EDIT: Wie Stromberg sagen würde: "Läuft!"