Forum: Mikrocontroller und Digitale Elektronik Bascom Software PWM


von gabbaroxx (Gast)


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!

von gabbaroxx (Gast)


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

von Fazerfighter (Gast)


Lesenswert?

Eine frage

hab es jetzt mal ausprobiert
mit meinem Atmega16 mit 8 mhz
und die leds werden zwar dunkler
aber sie flacker

wie kann man dass umstellen das die nicht mehr flackern???

von papa_of_t (Gast)


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.

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
Noch kein Account? Hier anmelden.