PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mal wieder PWM



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

Schokohoernl
22.05.2006, 23:57
mal so btw: warum alles von hand machen?? versuchs mal mit config PWM (in der hilfe beschrieben wies geht)