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:
thx for helpCode:'################################# '# 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
arno







Zitieren
Lesezeichen