Forum: Mikrocontroller und Digitale Elektronik PWM mit AT90CAN128 und 16bit Timer1


von Tneis (Gast)


Lesenswert?

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

: Verschoben durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.