Hallo Dominik,
auch das ist ein Beispiel dafür, dass das Programmieren von PWM-Anwendungen mit Bascom manchmal etwas limitiert ist. Ob die neuesten Versionen die Möglichkeit bieten, PWM auch mit einer Breite von mehr als 10 Bit zu konfigurieren, weiß ich nicht. Die einfachste Möglichkeit, die eigentlich auch immer funktionieren sollte, ist die, die beiden relevanten Register selber zu setzen (TCCR1A und TCCR1B).
Wenn Du Dir mal die Tabelle im Datenblatt auf Seite 109 anschaust, siehst Du, dass es insgesamt 16 PWM-Modi gibt, die mit den Bits WGM13, WGM12, WGM11 und WGM10 ausgewählt werden können.
Was Bascom Dir anbietet sind die Modi 1, 2 und 3: Der Zähler zählt bis zu einem Maximalwert (TOP genannt) von 0x00FF (=255 d.h. 8 Bit), 0x01FF (=511 d.h. 9 Bit) oder 0x02FF (=1023 d.h. 10 Bit). Das ist sozusagen eine "quick-and-dirty"-Lösung, bei der man den oberen Grenzwert nicht extra ein Register schreiben muss.
Der Modus 10 bietet genau das gleiche (PWM, Phase correct), der maximale Zählerwert ist aber über das Register ICR1 definiert. Wenn Du in dieses Register den maximal möglichen Wert 65535 schreibst, zählt der Counter bis zu diesem Wert hoch, d.h. Du hast ein echtes 16-Bit PWM.
Weil das Register ICR1 aus zwei Bytes besteht ist es wichtig zu wissen, dass man unbedingt erst das höhere Byte beschreiben muss! Also
ICR1H = 255
ICR1L = 255
Schau Dir die beiden Register TCCR1A und TCCR1B im Datenblatt doch mal an, mit denen kannst Du das Verhalten der beiden Ausgangspins OC1A und OC1B, den PWM-Modus und den Prescaler festlegen.
Lesezeichen