Hallo,
ich versuche auf dem Mega32 mit 16Mhz eine Software PWM zu bauen.
Wenn ich eine Taktfrequenz von ca. 122Hz erzeugen will, dann sollte das
doch mit einem prescaler von 256 zu machen sein ?!
Das erzeugt aber nur ein wirres hektisches blinken, <Erst mit einem
prescaler von 1 ist soetwas wie dimmen zu erkennen.
Was mach ich da falsch ??
$regfile = "m32def.dat"
$crystal = 16000000
$lib "mcsbyte.lbx"
Dim Pwm_stufen As Byte
Dim Pwm_wert As Byte
Dim Pwm_zaehler As Byte
Config Portd.4 = Output
Config Portd.5 = Output
Led1 Alias Portd.5
Led2 Alias Portd.4
Const An = 1
Const Aus = 0
Pwm_stufen = 254
Pwm_wert = 0
Pwm_zaehler = 0
'-------- Timer initialisieren ---
Config Timer0 = Timer , Prescale = 1
Enable Timer0
Enable Interrupts
On Timer0 timer0_ueberlauf
Do
' no loop
Loop
End
timer0_ueberlauf:
If Pwm_zaehler >= Pwm_stufen Then
Pwm_zaehler = 0
Incr Pwm_wert
Else
Incr Pwm_zaehler
End If
If Pwm_wert >= Pwm_stufen Then
Pwm_wert = 20
End If
If Pwm_zaehler < Pwm_wert Then
Led2 = An
Else
Led2 = Aus
End If
Return
Bascom-Verfechter schwören auf den Simulator. Klappere es doch einfach mal damit durch. ...
Deine ISR wird schon mit dieser Frequenz aufgerufen (je nach prescaler) - aber Du schaltest ja bei weitem nicht bei jedem Aufruf die LEDs um.. deshalb geht es langsamer als Du denkst.
@Rainer aber ich dachte, mein Zähler wird im 122Hz Takt hochgezählt und damit auch der Vergleich Pwm_zaehler < Pwm_wert durchgeführt ??
ja, die ISR wird schon so angesprungen. Der zähler wird ja nur im Else-Zweig hochgezählt.. evtl. hast Du einen Denkfehler drin. versuch es doch mal einfacher so in der ISR: OnTimer0: if Zaehler < Helligkeit then LED=An else LED=aus incr Zaehler return (Zähler und Helligkeit sind Bytes, Helligkeit setzt Du im Hauptprogramm, zähler läßt Du immer überlaufen, somit von 0 bis 255)
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.