www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [BASCOM ] Soft PWM


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir niemand etwas zu meinen Timingproblemen sagen ?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bascom-Verfechter schwören auf den Simulator. Klappere es doch einfach 
mal damit durch.

...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja danke, das wäre schon mal ein Idee.

Autor: Rainer Unsinn (r-u)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rainer

aber ich dachte, mein Zähler wird im 122Hz Takt hochgezählt und damit 
auch der Vergleich

Pwm_zaehler < Pwm_wert

durchgeführt ??

Autor: Rainer Unsinn (r-u)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.