-
PWM auf dem ATMEGA2560
Hallo liebes Forum!
Ich habe letztens dieses Programm geschrieben:
Code:
#include <avr/io.h>
#include <avr/delay.h>
#include <stdint.h>
#include <avr/signal.h>
uint8_t i = 1;
static void PWM(void) {
DDRB=0xFF; // Port B as output
ICR1 = 100; // Set top for timer 1
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
TCCR1B = (1<<WGM13)|(1<<WGM12) | (1<<CS10);
OCR1A = 100; // PWM on PB5
OCR1B = 60; // PWM on PB6
OCR1C = 40; // PWM on PB7
}
int main(void) {
PWM();
return(0);
} // main
Ich hab gelesen dass ich OCR1A auf 100 lassen soll, als Compare-Wert.
Auf dem OCR1B kommt auch ein PWM-Signal an, aber komischerweise nichts am OCR1C.
Meine Frage: Wie muss ich das Programm verändern, dass ich auf allen 3 Pins ein frei einstellbares PWM bekomme?
Freue mich auf Eure Antworten!
MfG Mithrandir
-
Hi,
eigentlich ist soweit alles richtig. Um an OC1C ein Signal zu bekommen, musst Du lediglich noch COM1C1 im TCCR1A-Register setzen.
OCR1A musst Du nicht auf 100 stehen lassen. Damit willst Du ja schließlich die Pulsbreite für OC1A einstellen. Den Referenzwert für Deine PWM hast Du ja mit ICR1 eingestellt.
Gruß,
askazo
-
Ok, danke für die Antwort!