Ok die Pins 40 Pin Dil Variante:
OC0 = PIN 4 Timer0
OC1A = PIN 19 Timer1
OC1B = PIN 18 Timer 1
OC2 = PIN 21 Timer 2
Der Code ist für nen ATMEGA 16 mit 8MHz Quarz und sollte auch auf nem 32 laufen.
Code in "C" für CodeVision:
Code:
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
OCR1AL=uc_redtable[uc_red]; /* Werte für die PWM's übernehmen */
OCR1BL=uc_greentable[uc_green];
}
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
OCR2=uc_bluetable[uc_blue]; /* Werte für die PWM's übernehmen */
}
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Phase Correct PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Phase Correct PWM top=FFh
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x62;
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x45;
Du musst jetzt nur noch die OCR Register mit Werten füllen und das Ding macht PWM.
Timer 1 ist, da die Bereiche mit Timer 2 zusammen passen mussten und DMX ohnehin nicht mehr als 256 Werte kennt, auf 8 Bit Modus eingestellt.
Timer 0 hab ich in diesem Beispiel nicht für PWM Erzeugung verwendet.
In den Overflow Interrupts bei Timer 1 und Timer 2 werden die aktuellen Helligkeitswerte in die OCR Register übernommen. Das vermeidet Glitches, Du kannst das aber auch ignorieren wenn Dich die Interrupts stören. Der Code ist Teil meiner DMX RGB Lampe mit High Power LED's.
Timer 0 ist hier nicht für die PWM Generierung verwendet - Ich brauchte nur 3 PWM Quellen.
Das Ganze ist nur ein Beispiel, man kann die PWM Quellen sehr vielseitig konfigurieren. Datenblatt lesen ist aber da Pflicht!
Lesezeichen