Bascom Software PWM

Gast #265183
Lesenswert?
• ▲
▼
Hallo,

kann mir mal bitte jemand erklären wie ich vorgehen muss um ein paar
LEDs mittels Software PWM (Bascom) anzusteuern?
Per Hard PWM ist das ja kein großes Problem, aber wie dasn un mit Soft
genau funktionieren soll ist mir unklar. Wäre nett wenn mir mal jemand
einen Code Schnipsel geben kann wo von mir aus 3 Leds nacheiander Ein-
und Ausfaden.

Danke schonmal!
Gast #265184
Lesenswert?
• ▲
▼
Ich bin inzwischen soweit das 3 Leds gleichzeitig an und ausgehen. Wie
kann ich aber nun die LEDs einmzeln ansteuern? Also z.B wenn led 1 aus
led2 an oder wenn led2 halb aus dann led3 an.

Hier mal mein Code:

'#################################
'# Software Pulsweitenmodulation #
'#################################


$regfile = "M8def.dat"
$crystal = 3686400

Ddrd = &B11100000                                           'PD7, PD6,
PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100                                          'PullUps
von PD2, PD3 Aktivieren



Enable Interrupts
'Interrupts Global einschalten

Enable Timer0
Config Timer0 = Timer , Prescale = 256
On Timer0 Ontimer0

Enable Timer1
Config Timer1 = Timer , Prescale = 8
On Timer1 Ontimer1

Dim Reverse As Bit
Dim Helligkeit As Byte

Helligkeit = 255





'###Deklarationen###

Led_gr Alias Portd.7                                        'LED Grün
Led_ge Alias Portd.6                                        'LED Gelb
Led_ro Alias Portd.5                                        'LED Rot
Prwata Alias Pind.3
'Programmwahltaster
Speed Alias Pind.2


Do

Loop

Ontimer0:

 Toggle Led_ro
 Toggle Led_gr
 Toggle Led_ge

 If Led_ro = 1 Then
  Timer0 = 256 - Helligkeit
 Else
  Timer0 = Helligkeit
 End If

Return



Ontimer1:

 If Helligkeit = 255 Then
  Set Reverse
 End If

 If Helligkeit = 1 Then
  Reset Reverse
 End If

 If Reverse = 0 Then
   Incr Helligkeit
 End If

 If Reverse = 1 Then
  Helligkeit = Helligkeit - 1
 End If

Return
Gast #265186
Lesenswert?
• ▲
▼
Ich würde es anders machen - in der Timer0-Routine die PWM realisieren
und dann im Hauptprogramm (oder auch mit Timer1, langsamer) die
Helligkeit einstellen:

OnTimer0:
   incr pwm_count 'ein Byte das immer von 1 bis 20 läuft
   if pwm_count > 20 then pwm_count = 1

   if pwm_count > led1helligkeit then led1 = 0 else led1 = 1
   if pwm_count > led2helligkeit then led2 = 0 else led2 = 1
   if pwm_count > led3helligkeit then led3 = 0 else led3 = 1
return

'main:
for i = 0 to 20
   waitms 200 'der ISR eine Chance
   led1helligkeit = i
   'hier andere LEDs einstellen
next i

usw.

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