Er hat sogar 8 PWM-Kanäle!
Wenn du mit Ports die Pins des Chips meinst sind das alle die, an denen OCxx dran steht. Steht für Output-Compare.
Zur Programmierung der PWM-Kanäle würde ich dir empfehlen die entsprechenden Seiten im Datenblatt zu sehen. Es kommt schließlich drauf an, welchen Kanal du mit welcher Frequenz und und welcher Auflösung ansteuern willst.
Hier ist ein relativ komplexes Beispiel einer Anwendung des PWM für einen Mega8. entscheidend ist das richtige Setzen der Register TCCR...
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
void pwminit(){
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
// WGM* = Fast PWM Mode 14
// CS10 = Prescaler = 1
TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0) | (1<<WGM11);
// COM* = OC1A/B sind aktiv, bei Comparematsch wird der Ausgang gesetzt bei TOP gelˆscht
// WGM* = ICR1 = Obergrenze
TIMSK = (1<<TOIE1) | (1<<OCIE1B);
// OCIE1B = Output Compare Interrupt Enable 1B
// TOIE1 = Timer Overflow Interrupt Enable
ICR1 = 200;
OCR1B = 100;
OCR1A = 0;
};
int main(void) {
pwminit();
SREG |= (1<<7);
DDRB = 0b00111111;
DDRC = 0b00111000;
DDRD = 0b11111110;
PORTB |= ((1<<1) | (1<<0));
for(;;){};
}
Lesezeichen