Gast
#3030020
Hallo zusammen, bei einem Testaufbau möchte ich unter anderem eine LED per PWM dimmen. Dazu verwende ich den Timer0 eines ATmega32 als "aufundab-Zähler" mit folgenden Einstellungen: // TCCR0 |= (1<<WGM00); // TCCR0 |= (1<<COM01) | (1<<COM00); // TCCR0 |= (1<<CS01) ; // TIMSK |= (1<<OCIE0); // OCR0 = 150; Da die LED nach programmierung des AVR auch wirklich schwächer leuchtet, gehe ich davon aus, dass das PWM-Signal auch richtig erzeugt wird. Nun möchte ich über einen Taster die LED "faden". Dazu schreibe ich: if(taster()){ OCR0 = OCR0-10; } Doch ab hier passiert nichts mehr! Es scheint, dass der AVR durch die Erzeugung des PWM Signals so überfordert ist, dass er nicht mehr die Funktion taster() abarbeiten kann. Der Testaufbau beinhaltet noch weitere Elemente, wie unter anderem ein LCD display, welches immer wieder eine Variable anzeigt. Vor der Aktivierung des Timer0 funktionierte dieses, wie auch der Taster, einwandfrei. Nun zeigt auch das Display nur ein leichtes flackern. Abhilfe schafft ein höherer Prescaler. Dieser führt jedoch dazu, dass die LED nicht mehr gedimmt ist, sondern flackert bis blinkt! Da ich mir nicht vorstellen kann, das ein Timer (noch dazu ohne Interrupt-Routine) den Atmega so beschäftigt, hoffe ich, dass jemand erkennen kann, welchen Fehler ich mache! Vielen Dank Kim