Hallo Leute,
ich versuche gerade Fast PWM mit Timer 1 zum laufen zu bringen. Der
Controller ist ein ATMega16 mit externem 16MHZ Quarz.
Ziel ist einen Servotester (Modellbau) zu bauen.
Ausgabe PWM auf OC1A (PD5) mit 50Hz.
High - Zeit des Signals für Mittelstellung 1,5ms
Zur Theorie:
50Hz => 20ms bei 16MHz-> t = 62,5ns ergibt 320.000 für prescaler 1
also prescaler auf 8 --> Overflow bei 40.000 (ICR1)
OCR1A (Compare match): 1,5ms * 40000 / 20ms = 3000
Folgendes hab ich dann programmiert:
DDRD = (1 << PD5);
// Enable fast PWM mode 14 (table 47 page 113 ATMega16 Doc):
TCCR1A = (1 << COM1A1) | (1 << WGM13) |(1 << WGM12) |(1 << WGM11);
// Set prescaler 8
TCCR1B = (1 << CS11);
// Set PWM
ICR1 = (uint16_t)40000;
OCR1A = (uint16_t)3000;
aber an PD5 kommt leider nix raus .......
ich habs dann auch mal mit
for (;;)
{
PORTD ^= (1 << PD5);
for (i = 0; i < 3000; i++)
asm ("NOP");
}
probiert, was wunderbar funktioniert. Muss ich für den Timer1 auch noch
die Ints freigeben, denn ISR's brauch ich eigentlich nicht ....
Bin für jeden Tipp dankbar !
Grüße,
Michael