Ich möchte eigentlich ne Motorsteuerung für zwei Gleichstrommotoren zum
laufen bekommen. Die Vorwahl der Drehrichtung und die anderen
Programmteile sind bereits fertig und funtionieren, wenn ich den Port,
auf dem ich das PWM Signal ausgeben möchte, manuell auf "High" setze.
Nun versuche ich bereits seit mehreren Tagen die PWM zum Laufen zu
bekommen. Da dies mein erstes Projekt mit PWM ist und ich erst wenig
Erfahrung mit Mikrocontrollern habe, habe ich noch leichte Probleme mit
dem Lesen und verstehen des Datenblatts. Soviel zu meiner
"Vorgeschichte".
Jetzt zum Programm. Ich habe zu Beginn erst mal die Definition für die
PWM an PB3 (OC2A) durchgeführt. Da ich im Datenblatt gelesen habe, dass
man die PWM mit ner anderen Schrittweite am Port PD3 (OC2B) auch noch
anlegen kann, dachte ich, man könnte das so deklarieren. Aber dem
scheint nicht so.
Also möchte ich erst mal das Problem mit mit der PWM am PB3 lösen.
Ich komm einfach nicht weiter und weiß nicht wo ich mit der Fehlersuche
ansetzen soll. Die folgende Dekleration müsste nach meinem Verständnis
eigentlich passen (jetzt erst mal um ein PWM Signal am PB3 zu bekommen.
Wenn ich allerdings mit dem Oszi am Port PB3 das Signal anschaue, kann
ich keine PWM erkennen.
1 | void pwm_generator(void)
|
2 | {
|
3 | DDRB |= (1<<PB3);
|
4 | OCR2A=100;
|
5 | TCCR2A |= (1<<WGM21) | (1<<WGM20); //Modevorwahl Fast-PWM
|
6 | TCCR2A |= (1<<COM2A1) | (0<<COM2A0); //clear on Compare-match
|
7 |
|
8 | TCCR2B |= (1<<WGM22); //Modevorwahl Fast-PWM
|
9 | TCCR2B |= (1<<CS22) | (1<<CS21) | (1<<CS20); //Vorteiler N=1024
|
10 |
|
11 | TIMSK2 |= (1<<TOIE2); //Interrupt bei Overflow enable
|
12 | }
|
13 |
|
14 |
|
15 | ISR (TIMER2_OVF_vect) //Interrupt Overflow Timer2
|
16 | {
|
17 | OCR2A; //Vergleichsregister neu beschreiben
|
18 | }
|