Gast
#583015
Hallo, ich würde gerne exakt alle 5 Millisekunden auf einem Pin ein Signal ausgeben, welches etwa 100 Mikrosekunden breit ist. Zu diesem Zweck eignet sich theoretisch sehr gut der Timer1 im Fast-PWM mode. Laut Datasheet kann ich dafür z.B. für den Timer1 den mode 15 nehmen. Habe alles so gemacht wie im Datasheet beschrieben, doch es funktioniert einfach nicht. Benutze ich die Simulation im AVR-Studio, so geschieht so einiges was keinen Sinn macht, nur nicht die Funktionalität von mode 15. In der Simulation sehe ich deutlich dass der Mode 15 eingestellt ist, aber der TCNT1 zählt auch gerne mal wieder runter wie es im dual-slope üblich ist was aber nicht möglich sein sollte im mode 15. Compare-Matches werden generell ignoriert. Im folgenden der komplette Quelltext in C. Wo liegt der Fehler? Bin für Hilfe aus dem Forum sehr dankbar, da ich an diesem Punkt keine Lösung weiss. Beste Grüße, Olivier #include <avr/io.h> int main() { //COM1A1: Clear OC1A (PB1) on Compare-Match, set OC1A (PB1) at BOTTOM //WGM11, WGM10: Mode 15, FAST-PWM, OCR1A defines TOP TCCR1A |= (1<<COM1A1) | (1<<WGM11) | (1<<WGM10); //WGM13, WGM12: Mode 15 //CS11: Prescaler to 8 TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS11); OCR1A = 200; //Defines TOP ICR1 = 50; //Compare-Match TCNT1 = 0; //Counter-Reset DDRB |= (1<<PB1); //Enable OC1A for PWM-Output for(;;); return 0; }
