Witam!
Napisałem a właściwie złożyłem sobie taki programik termometru na Wyświetlaczach 7 segmentowych i działa ok (na Timer1).
Jednak dodatkowo chciałbym użyć 3 kanałów pwm więc za Multiplexowanie musi odpowiadać Timer0. Próbowałem różne wartości prescale i load i nie chce mi to działać na Timer0.
Działający kod na Timer1:
Napisałem a właściwie złożyłem sobie taki programik termometru na Wyświetlaczach 7 segmentowych i działa ok (na Timer1).
Jednak dodatkowo chciałbym użyć 3 kanałów pwm więc za Multiplexowanie musi odpowiadać Timer0. Próbowałem różne wartości prescale i load i nie chce mi to działać na Timer0.
Działający kod na Timer1:
$regfile = "m32def.dat"
$crystal = 16000000
Config Timer1 = Timer , Prescale = 256
Config Porta = Output
Config Portb = Output
Config 1wire = Portc.0
Portb = &B11111111
Porta = &B11111110
Dim A As Byte , B As Byte , C As Byte , A1 As Integer , B1 As Byte , B2 As Single , B3 As Single , C1 As Single
Dim Opozniacz As Integer
Dim I As Byte
Dim T(2) As Byte
Dim Temp As Single
On Timer1 Wyswietlanie
Enable Interrupts
Enable Timer1
Load Timer1 , 700
Do
Disable Interrupts
1wreset
1wwrite &HCC
1wwrite &H44
Enable Interrupts
Waitms 750
Disable Interrupts
1wreset
1wwrite &HCC
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
If T(2) = 0 Then
Temp = T(1) / 2
Reset Portb.7
Else
I = 256 - T(1)
Temp = I / 2
Set Portb.7
End If
C1 = Frac(temp)
C = C1 * 10
B1 = Temp - C1
B2 = B1 / 10
B2 = B2 + 0.000001
B3 = Frac(b2)
B = B3 * 10
A1 = B1 - B
A = A1 \ 10
Enable Interrupts
Waitms 1000
Loop
End
Wyswietlanie:
Load Timer1 , 700
Porta = Lookup(a , Kody7seg)
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Waitms 3
Porta = Lookup(b , Kody7seg)
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Waitms 3
Porta = Lookup(c , Kody7seg)
Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Waitms 3
Return
Kody7seg:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 127 , 28 , 255