Hallo zusammen,
ich möchte mit dem Tiny44 drei PWMs erzeugen. Da ich den INT0 verwenden
muss kann ich den OC0A des Timers0 nicht nutzen. Somit liegen meine
PWM-Kanäle auf
PWM1 = OC0B
PWM2 = OC1A
PWM3 = OC1B
Ich habe anhand des Datenblattes auch versucht alles richtig zu
konfigurieren. Jedoch erhalte ich an OC0B keinen Output.
Mir ist schleierhaft was in meinem Code falsch ist. Vielleicht kann
jemand mal kurz drüberschauen.
1 | #include <avr/io.h>
|
2 |
|
3 | #ifndef F_CPU
|
4 | #define F_CPU 12000000UL
|
5 | #endif
|
6 |
|
7 | #define LED_DDR DDRA
|
8 | #define LED_PORT PORTA
|
9 | #define PIN_LED1 PA7
|
10 | #define PIN_LED2 PA6
|
11 | #define PIN_LED3 PA5
|
12 |
|
13 | int main(void) {
|
14 |
|
15 | // set LED-ports to output
|
16 | LED_DDR |= (1 << PIN_LED1);
|
17 | LED_DDR |= (1 << PIN_LED2);
|
18 | LED_DDR |= (1 << PIN_LED3);
|
19 |
|
20 | // init timers as fast PWM
|
21 | TCCR0A |= (1 << WGM00) | (1 << WGM01); // Fast PWM Mode 3
|
22 | TCCR1A |= (1 << WGM10) | (1 << WGM12); // Fast PWM Mode 5 (8bit)
|
23 |
|
24 | // set prescaler 256
|
25 | TCCR0B |= (1 << CS02); // prescaler 256 -> 90Hz
|
26 | TCCR1B |= (1 << CS12); // prescaler 256 -> 90Hz
|
27 |
|
28 | // set outputs to PWM
|
29 | TCCR0B |= (1 << COM0B1) | (1 << COM0B0);
|
30 | TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1A0) | (1 << COM1B0);
|
31 |
|
32 | // Power led
|
33 | OCR0A = 0;
|
34 | OCR0B = 127;
|
35 | OCR1A = 60;
|
36 | OCR1B = 127;
|
37 |
|
38 |
|
39 | while(1)
|
40 | {
|
41 |
|
42 | }
|
43 |
|
44 | return 0;
|
45 | }
|
Vielen Dank im Vorfeld
Peter