Jetzt ncohmal Kurz zu dem PWM. ICh hab hier ein Code gefunden, der mir sehr kompliziert wirkt. Ich würde einfach gerne einen Wert z.B. aus einer Variablen namens Wert an einem beliebigen Pin ausgeben. Was kann ich dann alles weglassen?
Code:
Const True = 1
Const False = 0
Dim Hi As Byte
Dim Lo As Byte
Dim A As Byte
Dim Phase As Bit
Dim Pattern As Byte ' Bit pattern for display
Pwm Alias Portb.0 ' Modulated Pin
Config Timer0 = Timer , Prescale = 64 ' Rate 244 Hz at 4 MHz Clock
On Timer0 Timer0_isr ' Jump to Timer1 ISR
Config Portb = Output
Enable Timer0 ' Enable the timer interrupt
Enable Interrupts ' Enable Global Interrupt
Lo = 128 ' Initial value for PWM
Phase = True
Do
A = Pind ' Ask for Key
Select Case A
Case &B11111110 : Lo = 0 ' Lo Time short, Hi Time long
Case &B11111101 : Lo = 32
Case &B11111011 : Lo = 64
Case &B11110111 : Lo = 96
Case &B11101111 : Lo = 128
Case &B11011111 : Lo = 160
Case &B10111111 : Lo = 192
Case &B01111111 : Lo = 255 ' Lo Time long. Hi Time short
End Select
Hi = 255 - Lo
Incr Pattern ' Change Bit Pattern
Waitms 100 ' Wait 100 ms
Loop
End
Timer0_isr:
If Phase = True Then
Portb = &HFF ' LED off
Timer0 = Lo ' Reload Timer0
Phase = False
Else
Portb = Not Pattern ' LED on
Timer0 = Hi ' Reload Timer0
Phase = True
End If
Return
Allerdings verstehe ich das alles nciht so ganz.
Was gibt Prescale an?
Warum 244 Hz?
Warum gebe ich dann einen WErt von 0 bis 255 an?
Ich vermute, dass der Timer0 nach der gesetzten Zeit Timer0 = ... einen Interrupt auslöst und dann den Wert wechselt.
Richtig?/ Falsch?
MFg Moritz
Lesezeichen