Hallo,
ich bin leider nicht sehr bewandert in der C-Programierung von
Mikrocontrollern und habe das Problem, dass ich auf dem AVR AT90CAN128
eine einfache PWM erzeugen möchte, die erstmal nur eine LED aufleuchten
lassen soll um zu sehen wie es funktioniert. Ich hab die Dokumentation
zu dem Controller rauf und runter gelesen, bin aber nicht auf die
Antwort gekommen. Mein Problem ist konkret, dass ich den Wert im
Register OCR1A in einer ISR erhöhen möchte um die 1 Phase zu verlängern
und die LED heller werden zu lassen, doch es geht einfach nicht. Bis
jetzt sieht mein Programm so aus:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | void init(){
|
5 |
|
6 | TCCR1B = (0<<WGM12) | (1<<WGM13) | //Waveform Generation Mode
|
7 | (0<<CS12) | (1<<CS11) | (0<<CS10); //Prescaler
|
8 | TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | //Compare Output Mode Phase Correct PWM
|
9 | (0<<WGM11) | (0<<WGM10); //Waveform Generation Mode Bits
|
10 |
|
11 | OCR1A = 0;
|
12 | ICR1 = 8192;
|
13 | TIMSK1 = (1<<OCIE1A);
|
14 | sei();
|
15 |
|
16 | //für PWM
|
17 | DDRB |= (1<<PB5);
|
18 | }
|
19 |
|
20 | ISR(TIMER1_COMPA_vect){
|
21 | OCR1A++;
|
22 | }
|
23 |
|
24 | int main(void){
|
25 | init();
|
26 | while(1){}
|
27 | }
|
Würde mich freuen, wen mir jemand erklären kann warum das nicht
funktioniert und wie es funktioniert :)
LG