Hallo, ich versuche gerade eine LED durch die Timer zu steuern (PWM). ich verwende AVR Studio 5.1 und der uC Atmega2560. ich habe den folgenden Code geschrieben. Er funktionniert aber nicht. weiß Jemand warum? MfG Christian
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <util/delay.h> |
4 | |
5 | #define F_CPU 8000000UL // 8 MHz
|
6 | |
7 | #define LED_PORT PORTB
|
8 | #define LED_DDR DDRB
|
9 | #define LED_PIN PINB
|
10 | |
11 | #define PWM_LED PB2
|
12 | |
13 | ISR(TIMER1_COMPA_vect){ |
14 | |
15 | LED_PORT |= (1<<PWM_LED); |
16 | |
17 | }
|
18 | |
19 | ISR(TIMER1_COMPB_vect){ |
20 | |
21 | LED_PORT &= ~(1<<PWM_LED); |
22 | |
23 | }
|
24 | |
25 | int main(void) |
26 | {
|
27 | //Timer1 Config
|
28 | //Clear OCnA/OCnB on compare match
|
29 | //Fast PWM: Top = OCR1A (siehe Table 17-2, uC Atmega2560, Seite 148)
|
30 | TCCR1A |= (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)|(WGM10); |
31 | //No prescaling
|
32 | TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS12); |
33 | TCNT1 = 0; |
34 | OCR1A = 0xFFFF; |
35 | OCR1B = 0x7FFF; |
36 | TIMSK1 |= (1<<OCIE1B)|(1<<OCIE1A); |
37 | |
38 | LED_DDR |= (1<<PWM_LED); //Alle Ausgänge |
39 | LED_PORT = 0xff; |
40 | |
41 | sei(); |
42 | |
43 | while(1) |
44 | {
|
45 | }
|
46 | }
|