[BASCOM ] Soft PWM

Gast #1627307
Lesenswert?

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
#1627696
Lesenswert?

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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren