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.