Olle_Filzlaus
22.05.2006, 22:59
Hallo,
ich habe mal ein kleines Programm geschrieben um eine LED zu Dimmern. Funzt auch ganz gut, nur habe ich das Problem das ich sie nur bis zu hälfte dimmen kann. mehr geht nicht. habe es ausgemessen.
Das Programm soll per tastendruck einen wert entgegen nehmen und damit die led dimmen.
leider ist irgendwo in dem programm ein fehler. habe auch mal das testprogramm von der seite hier genommen und damit leuchten die led gleich stark. was ja eigentlich nicht sein kann.
habe leider kein oszi um mir das anzuschaun. kann mich also nur an der Heligkeit der leds orientieren.
Hier mal mein Programm:
'#################################
'# Pulsweitenmodulation #
'#################################
$regfile = "M16def.dat"
$crystal = 8000000
'********************************* Lc Display **********************************
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.0
Config Lcdbus = 4
Config Lcd = 16 * 2
Portb = &B11111111
Portc = &B11111111
Config Portb = Input
Config Portc = Output
Const True = 1
Const False = 0
Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0_isr
Config Pinc.0 = Output
Led Alias Portc.0
Enable Timer0
Enable Interrupts
Lo = 0
Phase = True
Hi = 255
Do
Cls
Locate 1 , 1
Lcd "Hi: " ; Hi ;
If Pinb.0 = 0 Then 'Tastenabfrage der Powertaste
Waitms 50 'entprellen
If Pinb.0 = 0 Then
Hi = Hi + 1
End If
End If
If Pinb.1 = 0 Then 'Tastenabfrage der Powertaste
Waitms 50 'entprellen
If Pinb.1 = 0 Then
Hi = Hi - 1
End If
End If
If Portc.7 = 1 Then 'blink led für schleifendurchlaufkontrolle
Portc.7 = 0
Else
Portc.7 = 1
End If
Loop
End
Timer0_isr:
If Phase = True Then
Led = 1 'led aus
Timer0 = Lo
Phase = False
Else
Led = 0 'led ein
Timer0 = Hi
Phase = True
End If
Return
thx for help
arno
ich habe mal ein kleines Programm geschrieben um eine LED zu Dimmern. Funzt auch ganz gut, nur habe ich das Problem das ich sie nur bis zu hälfte dimmen kann. mehr geht nicht. habe es ausgemessen.
Das Programm soll per tastendruck einen wert entgegen nehmen und damit die led dimmen.
leider ist irgendwo in dem programm ein fehler. habe auch mal das testprogramm von der seite hier genommen und damit leuchten die led gleich stark. was ja eigentlich nicht sein kann.
habe leider kein oszi um mir das anzuschaun. kann mich also nur an der Heligkeit der leds orientieren.
Hier mal mein Programm:
'#################################
'# Pulsweitenmodulation #
'#################################
$regfile = "M16def.dat"
$crystal = 8000000
'********************************* Lc Display **********************************
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.0
Config Lcdbus = 4
Config Lcd = 16 * 2
Portb = &B11111111
Portc = &B11111111
Config Portb = Input
Config Portc = Output
Const True = 1
Const False = 0
Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0_isr
Config Pinc.0 = Output
Led Alias Portc.0
Enable Timer0
Enable Interrupts
Lo = 0
Phase = True
Hi = 255
Do
Cls
Locate 1 , 1
Lcd "Hi: " ; Hi ;
If Pinb.0 = 0 Then 'Tastenabfrage der Powertaste
Waitms 50 'entprellen
If Pinb.0 = 0 Then
Hi = Hi + 1
End If
End If
If Pinb.1 = 0 Then 'Tastenabfrage der Powertaste
Waitms 50 'entprellen
If Pinb.1 = 0 Then
Hi = Hi - 1
End If
End If
If Portc.7 = 1 Then 'blink led für schleifendurchlaufkontrolle
Portc.7 = 0
Else
Portc.7 = 1
End If
Loop
End
Timer0_isr:
If Phase = True Then
Led = 1 'led aus
Timer0 = Lo
Phase = False
Else
Led = 0 'led ein
Timer0 = Hi
Phase = True
End If
Return
thx for help
arno