Okay - es geht Dir also gar nicht um ein variables Pulsweitenverhältnis, sondern Du bräuchtest eher ein Rechtecksignal mit 1:1-Tastverhältnis, aber variabler Frequenz - richtig?
Fast-PWM ist ja fast das gleiche wie "normales" PWM, nur dass der Zähler halt von 255 nicht wieder rückwärts runterzählt, sondern direkt auf auf 0 gesetzt wird. Die Frequenz des PWM-Signals ist daher doppelt so hoch wie bei "normalem" PWM (Taktfrequenz / (Prescaler * 256)). Mit dem Wert im Output-Compare-Register (OCR) kann dann das Impuls-Pausen-Verhältnis eingestellt werden.
Für Deine "Pumpe" wäre aber vielleicht der "CTC"-Modus das richtige: CTC heißt Clear Timer on Compare match - und das sagt eigentlich schon alles aus: Der Counter zählt so lange hoch, bis er den Wert im OCR-Register erreicht hat. Ist dies der Fall, wird der entsprechende Ausgang getoggelt und der Timer auf 0 resettet. Du bekommst also ein Rechtecksignal, das immer ein konstantes Tastverhältnis von 1:1 hat (weil´s ja durch Toggeln des Ausgangspins entsteht), aber eine sehr variable Frequenz. Je niedriger der Wert im OCR-Register ist, umso häufiger wird der Ausgang pro Zeiteinheit getoggelt. Eine Formel gibt es auch dazu: f = Taktfrequenz / (2*Prescaler*(OCR + 1)). Bei einem Prescaler von 1 könntest Du also Ausgangsfrequenzen zwischen 8 MHz (OCR=0) und 31,25 KHz (OCR=255) erzeugen. Auf Seite 111 des Datenblattes ist ein Diagramm, das mehr sagt als tausend Worte.
PWM-Geschichten mit Bascom zu programmieren fand ich immer etwas mühsam und undurchschaubar . Wenn Du das Register TCCR2 selber setzt weißt Du wenigstens, dass alles so ist wie es sein soll. Für Timer2 im CTC-Modus müssten die Bits WGM21 und WGM20 auf 1 und 0 gesetzt werden (CTC-Modus), die Bits COM21 und COM20 auf 0 und 1 ("Toggle OC2 on compare match"), und die Bits CS22, CS21 und CS20 auf 0, 0 und 1 (prescaler = 1). Das Register im Ganzen muss also &B00011001 enthalten - dann sollte es klappen, wenn Pin P.3 auch als Ausgang konfiguriert ist.
Ich hoffe, das war jetzt nicht zu viel verwirrende Informationen - andernfalls frag´ einfach nochmal nach!
Lesezeichen