PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED Dimmen per Software | Problem



xeno
01.04.2008, 13:21
Ich möchte gerne 1 LED per Software dimmen. Per Hardware ist nicht möglich weil die Ports schon belegt sind.

Ich wollte das ganze mit einen Timer machen.

So weit bin ich schon gekommen:



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600

Config Portc.7 = Output
led Alias Portc.7

'#####Timer############

Config Timer1 = Timer , Prescale = 8
On Timer1 Int_timer1

Const Timervorgabe = 47104 ' 100 Hz

Enable Timer1
Enable Interrupts

Timer1 = Timervorgabe

Do

Loop


Int_timer1:

Timer1 = Timervorgabe
Toggle led

Return

End

Wie muss ich den Code so erweitern das die LED dynamisch von hell zu dunkel und umgekehrt leuchtet?

Ich würde mich freuen wenn mir einer weiter helfen kann.

for_ro
01.04.2008, 15:25
Hallo,
probier es mal so:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600

Config Portc.7 = Output
led Alias Portc.7

'#####Timer############

Config Timer1 = Timer , Prescale = 8
On Timer1 Int_timer1

Const Timervorgabe = 65352 ' ~10 KHz
Dim Schwellwert As Byte, Level As Byte, Offset As Byte
Schwellwert=0
Offset=1

Enable Timer1
Enable Interrupts

Timer1 = Timervorgabe

Do

Loop


Int_timer1:

Timer1 = Timervorgabe
Incr Level
If Level=0 Then 'Level läuft etwa 40 mal je Sekunde über, dann wird Schwellwert angepasst
Schwellwert=Schwellwert+Offset
If Schwellwert=255 Then Offset=-1
If Schwellwert=0 Then Offset=1
Endif
If Level>Schwellwert Then
Set Led
Else
Reset Led
Endif

Return

End

Weder compiliert noch getestet.
Sollte in etwa 6 Sekunden von ganz hell nach aus wechseln und umgekehrt.

Gruß

Rolf

xeno
01.04.2008, 16:56
Danke für die schnelle Antwort.

Ich habe es gleich getestet, es funktioniert auch so weit nur leider flackert die Lampe stark. Kann man das noch irgendwie unterbinden?

//EDIT

Hab jetzt einfach mal die Timervorgabe auf 65522 gestellt jetzt flackert die LED nicht mehr.

Kann man jetzt noch einstellen das die LED nicht so schnell gedimmt wird? Also das ein Durchlauf ungefähr 30sek dauert?

xeno
01.04.2008, 23:02
Kann man das Programm so erweitern das man eine Variable definiert kann zwischen 0% und 100% und dadurch die LED so gedimmt wird?


//EDIT

Ich habe es jetzt so gemacht, ich hoffe das dies nicht so sehr das Hauptprogramm beeinflusst.



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600

Config Portc.7 = Output

Config Timer1 = Timer , Prescale = 1
Enable Timer1
On Timer1 Timer1_int
Enable Interrupts

Timer1 = 65530

Dim Zaehler As Byte '<- wichtig, dass es byte ist
Dim Trigger As Byte
Dim Taste As Byte

Trigger = 0

Do
Taste = Inkey()

If Taste > 0 Then
Select Case Taste
Case 43 'Das ist der ASCII Code für Taste +
Trigger = Trigger + 1
Print Trigger

Case 45 'Das ist der ASCII Code für Taste -
Trigger = Trigger - 1
Print Trigger

End Select
End If

Loop

Timer1_int:
Timer1 = 65530

If Zaehler > Trigger Then
Set Portc.7
Else
Reset Portc.7
End If

Zaehler = Zaehler + 1

Return