PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM einer LED mit Tasterfunktion



wodka
01.01.2006, 18:32
'#################################
'# Software Pulsweitenmodulation #
'#################################


$regfile = "M16def.dat"
$crystal = 1000000

Ddrd = &B00000001 'PD7, PD6,PD5 als Ausgänge festlegen, rest Eingang

Do


Enable Interrupts 'Interrupts Global einschalten

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

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

Dim Reverse As Bit
Dim Helligkeit As Byte

Helligkeit = 255


'###Deklarationen###


Led_ro Alias Portd.0 'LED Rot


Do

Loop

Ontimer0:

Toggle Led_ro

If Led_ro = 1 Then
Timer0 = 255 - 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


Loop

Moin Moin,

so ich habe diesen Code hier im Forum gefunden und habe ihn so geändert, das auf Portd.0 eine LED immer ein und ausfaded. Sieht sehr schön aus, nur ich möchte eine PWM , circa 50 % sprich Helligkeit = 255-120 oder so ein und auschalten können mit einem Taster. Wenn ich den befehl


If porta.1 = 0 then
..
..
End if

dann dreht die PWM völlig durch.. Wie schalte ich eine PWM ein und aus..

Schöne Grüße

Ratber
01.01.2006, 18:40
Du denkst zu kompliziert.

Setz den Wert auf 0 dann isse aus.

wodka
01.01.2006, 18:57
Das Problem habe ich öfter mal, da hast du recht *gg* Ja das ist wohl war, aber es soll ein Ausgang werden, der wenn Eingang A.0 = 0 ist 2x blinken soll bzw wenn Eingang A.1 = 0 dann soll er auf halbe leuchtstärke leuchten. Dann muss ich ja irgendwie die Software PWM abschalten.. Geht das überhaupt ??

Ratber
01.01.2006, 19:41
Warum soll das denn nicht gehen ?

Das Software-PWM nutzt den Timer und den dazugehöhrigen Interupt.

Schalt den Timer ab (Stop Timerx) dann gibts auch keinen Int und folglich keinen Sprung in die Routinen.
Jetzt kannste mit dem Port machen was dir beliebt.

Danach schalteste den Timer wieder ein (Start Timerx) und weiter gehts mit soft-PWM.

wie gesagt finde ich da jetzt keinen Denkfehler.
Kann ich aber morgen mal schnell probieren.

Wie gesagt würde es auch reichen wenn du die Variable für die LED (Helligkeit) einfach auf 0 für aus und 255 für an nimmst dann brauchste an der Soft-PWM nix zu drehen.


Oder hab ich dein Problem immernoch nicht verstanden ?

Lenox
09.12.2006, 12:11
HeyWodka,
hab grad nach einer Schltung gesucht um die Helligkeit von LEDs zu steuern.
Danke ;).
Hab aber 2 Fragen:
1. Wie kann ich die intervall länge verändern? (ein/ausfädern)
2. Ich möchte ca 30 LEDs steuern, wie verstärke ich am besten das signal?
bzw wieviel LED kann ich an einen Ausgang hängen.

Mfg
lenox ;)

wodka
10.12.2006, 11:54
Hallo Lenox,

das ist schon länger her, dass ich mich damit beschäftigt habe, aber zu deinen Fragen:

1.
Der Intervall kann mit dem Prescaler (Teiler) verstellt werden. Oder du änderst deinen internen bzw exteren Takt des MC.

2.
Bei 30 Leds würde der MC den Ausgangsstrom garnicht erbringen. Nimm einen kleinen Transistor zur Stromverstärkung..

mfg

Lenox
10.12.2006, 19:23
problem ist ich möchte jede LED einzeln steuern ;) wahrscheinlich doch "nur" 15
siehe
https://www.roboternetz.de/phpBB2/viewtopic.php?p=234994#234994