Also ich habe im Datenblatt mal gelesen, dass der erste Impuls möglicherweise verfälscht sein kann, wenn man das OCR-Register im "laufenden Betrieb" ändert. Für die meisten PWM-Anwendungen mag der erste Impuls nicht besonders wichtig sein - aber hier wäre das natürlich fatal.
Was hältst Du von folgendem Ansatz:
Im Rest der Hauptschleife kannst Du Dich dann darum kümmern, dass die Werte Impuls(1) bis Impuls(4) per RS232 aktualisiert werden. Sie bestimmen, wie lange Timer1 bis zu seinem nächsten Überlauf braucht, und somit die Dauer der High-Impulse. Logischerweise berechnen sie sich so: Impuls = 65535 - (3686400 * Impulslänge in Sekunden).Code:Dim Impuls(4) as Word 'Ist ein Array aus 4 Word-Variablen Dim Index as Byte 'Zum Durchzählen von Impuls(1) bis Impuls(4) Dim Flag as Bit 'Zeigt Timer1-Interrupt an Config PORTX.Y = Output 'Ausgangs-Pin On Timer1 Timer1_ISR Enable Timer1 Enable Interrupts Do ... ... If Flag = 1 then Flag = 0 If PORTX.Y = 1 then PORTX.Y = 0 Timer1 = Timer1 + 64429 'Nächster Überlauf in 0,3 ms Else PORTX.Y = 1 If Index = 4 then Index = 1 Else Index = Index + 1 Timer1 = Timer1 + Impuls(Index) End if End if ... ... Loop On Timer1_ISR: Flag=1 Return
Diese Idee ist allerdings nicht getestet, noch nicht mal compiliert, weil ich hier gerade kein Bascom habe. Aber vielleicht reicht ja die Idee schon...







Zitieren

Lesezeichen