Archiv verlassen und diese Seite im Standarddesign anzeigen : Software PWM
hardstyleroxx
30.11.2005, 21:13
Ich habe nun fast jeden Beitrag gelesen den die Suche gefunden hat, blos gings da immer um Hardware PWM.
Ich suche einen einfachen Code für Software PWM. Sagen wir einfach mal 2 oder 3 Leds die nacheinander an- und ausgehen.
Danke schonmal ;)
bertl100
01.12.2005, 21:01
Um Led´s nacheinander ein und auszuschalten brauchst du keine PWM!
Mit PWM kannst dimmen. Zum ein und ausschalten reicht eine schleife in der die Pins entsprechend aus und eingeschalten werden.
MFG
Vader
hardstyleroxx
02.12.2005, 14:03
Das ist mir auch klar... Ich will das sie nacheinander Ein-und Ausfaden! Habe mich vielleicht etwas dumm ausgedrückt.
hardstyleroxx
03.12.2005, 13:04
Keiner so nett mir das mal zu erklären? Ich habe zwar das AVR Buch von Roland Walter aber da wird nicht so genau auf mein Anliegen eingegangen..
Die Vorgehensweise ist ganz simpel, du musst ja für diesen Fall nicht auf eine genaue Einhaltung einer Zykluszeit achten.
Der Algorithmus sieht so aus:
Schritt 1: Schalte LED ein
Schritt 2: Warte Zeit X
Schritt 3: Schalte LED aus
Schritt 4: Warte Zeit Y
Wenn Du X immer kleiner und Y immer größer werden lässt, wird die LED dunkler.
Rage_Empire
03.12.2005, 19:54
Guck mal im Downloadverzeichnis, dort habe ich einen Source für Bascom geschrieben, welcher für so etwas modifiziert werden kann.
hardstyleroxx
03.12.2005, 21:35
Ich habs nun schon selber hinbekommen, dass 3 LEDs aufeinmal an- und ausfaden. Nun würde ich die aber gene nach belieben einzeln ansteuern. Also z.B wenn led 1 aus
led2 an oder wenn led2 halb aus dann led3 an.
'#################################
'# 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
Rage_Empire
04.12.2005, 11:54
Also dafür gibts 2 Möglichkeiten:
1. Du verwendest die Timer0 und Timer1, wovon Timer1 zwei PWM-Ausgänge hat, welche durch compare1a und compare1b gesteuert werden kann. Mit dem Timer0 wären dies dann 3 PWM-Signale.
2. Du lässt einen Timer Zählen. Die LEDs ordnest du dann Werten zu, ab welche diese leuchten sollen. Beispiel:
If timer1 >100 then led1=1 else led1=0
if timer1 >150 then led2=1 else led2=0
if timer1 >200 then led3=1 else led3=0
So könnte man es ungefär machen. Mit der 2. Variante Kannst du noch mehr LEDs steuern.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.