PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM auf dem ATMEGA2560



Mithrandir
08.03.2014, 21:03
Hallo liebes Forum!

Ich habe letztens dieses Programm geschrieben:



#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

askazo
08.03.2014, 22:43
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

Mithrandir
08.03.2014, 23:12
Ok, danke für die Antwort!