Hallo, bin so langsam am verzweifeln... Habe mir etwas über PWM angelesen und möchte damit nun auch ein wenig "spielen". Habe einen AT90S2313 + 4MHz Quarz genommen und an PB3 (dem PWM Pin) in Reihe ein R und LED Richtung GND geklemmt. Soweit so gut. Bis hierhin klappt noch alles... Was ich wollte, war das die LED wie folgt blinkt: 4sec an, 1sec aus, 4sec an, 1 sec aus usw. Also eine Frequenz von 1/5sec=0,2Hz mit einem duty cycle von 80%. Mit den Registern muss ich mich aber irgendwie stark vertan haben, bzw. mache das immer wieder falsch: TCNT1H = 0x4C 5sec als Obergrenze für Timer 1 einstellen TCNT1L = 0x4B OCR1H = 0x0F 1sec als Vergleichswert für PWM festlegen OCR1L = 0x42 TCCR1A = 0xC3 invertierenden PWM und 10-bit PWM Modus setzen TCCR1B = 0x05 Takt-Teiler von 1024 wählen Nun macht die LED erst eine Zeitlang gar nichts, dann fängt sie ca. im Sekundentakt ganz kurz an zu blinken. Was mache ich falsch, bzw. was für Werte müssen die Register haben? Leider habe ich kein Oszilloskop. Kann man so etwas irgendwie anders messen, oder simulieren? Gruß und Danke, Hans
nun ja, bei Hardware-PWM ist die Zählerweite(1023) vorgegeben, das Setzen con TCNT1 bewirkt nur beim ersten Mal was. Bei 10bit-PWM, Vorteiler 1024 und Quarz 4MHz ergibt sich eine PWM-Frequenz von 1,9Hz, und das ist auch schon die langsamste Frequenz, die mit Hardware-PWM erreichbar ist. Sinnvoller wäre es, beispielsweise alle 0,1s einen Timerinterrupt auszulösen, in der ISR dann Zählen und daraus die entsprechenden Portaktionen auszuführen. Simulieren kann man das ganze mit AVR-Studio, erhältlich bei Atmel.
Danke für den Wink mit dem Zaunpfahl. Habe das Datenblatt ausgedruckt und die Seite (35) gefunden. Warum habe ich das am Bildschirm bloß nicht gesehen. ARGH! Hans
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.