Witam. Założenie jest proste czyli zwykły licznik w zakresie 0 - 99 km/h. Czujnikiem ma być powiedzmy kontaktron. Niestety mam problem z napisaniem programu.
Wg mojej koncepcji przerwanie od timera ma zwiekszać stan zmiennej co 1ms. Po wykryciu sygnału od czujnika wartość czasu ma być przepisana do kolejnej zmiennej i dalej liczona dopiero predkość znając stała drogę s, tj 2,05m.
Oto kod:
Niestety przy zwieraniu pinu do masy na wyswietlaczach ciągle widnieje 00.
Widzi ktoś błąd? Próbowałem prędzej zaokrąglać za pomocą polecenia Round i bez rezultatu.
Wg mojej koncepcji przerwanie od timera ma zwiekszać stan zmiennej co 1ms. Po wykryciu sygnału od czujnika wartość czasu ma być przepisana do kolejnej zmiennej i dalej liczona dopiero predkość znając stała drogę s, tj 2,05m.
Oto kod:
$crystal = 4000000
Config Portb = &B11111111
Portb = &B11111111
Config Portd = &B1111100
Portd = &B1111111
Config Timer0 = Timer , Prescale = 64
Enable Timer0
Enable Interrupts
On Timer0 Co1ms
Dim Liczba As Single
Dim Ktorywysw As Bit
Dim Lol As Byte
Dim Jednostki As Byte
Dim Dziesiatki As Byte
Dim Pomoc As Bit
Dim Aaa As Word
Dim Bbb As Word
Dim Ddd As Byte
Dim Ccc As Byte
Pomoc = 1
Ktorywysw = 1
Co1ms:
Timer0 = 193 'co 1ms przerwanie od timera0
Incr Aaa
If Aaa = 60000 Then Aaa = 0 'co 1ms zwiekszenie stanu licznika
Portd = 0000011
If Ktorywysw = 1 Then 'obsluga wyswietlaczy led
Ktorywysw = 0
Portd.5 = 1
Portb = Lookup(ddd , Tabela)
Else:
Portd.3 = 1
Portb = Lookup(ccc , Tabela)
End If
Return
Do
If Pind.0 = 0 Then 'jesli pin zwarty do masy zmienna BBB przyjmuje wartosc zmiennej AAA
If Pomoc = 1 Then
Bbb = Aaa
Pomoc = 0
Else
Pomoc = 1
End If
End If
Liczba = 2050 \ Bbb 'obliczanie predkosci tj V=s/t poniewaz czas w ms wiec droga 1000 razy większa
Liczba = Liczba * 3.6 'zamiana jednostek tj z m/s na km/h
Liczba = Liczba \ 1 'dzielenie przez 1 z uzyciem"\" zamiast / w celu przyblizenia do jednosci
Lol = Liczba 'przepisanie do zmiennej byte
Dziesiatki = Makebcd(lol) 'przygotowanie do wyswietlenia na led
Jednostki = Dziesiatki And 15
Shift Dziesiatki , Right , 4
Ccc = Dziesiatki
Ddd = Jednostki
Aaa = 0
Loop
End
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Niestety przy zwieraniu pinu do masy na wyswietlaczach ciągle widnieje 00.
Widzi ktoś błąd? Próbowałem prędzej zaokrąglać za pomocą polecenia Round i bez rezultatu.