Zaczynam pisać program do Komputera motocyklowego opisywanego w wątku:
Link
Chciałbym prosić o sprawdzenie, jak na razie udało mi się uruchomić temperatury, oraz napięcia.
Z tym, że mam tylko jeden przycisk do sterowania wszystkim, użyłem funkcji skoków do podprogramów i nie wiem czy to nie będzie się później komplikować, ponieważ w podprogramie SHITF chcę zrobić ustawianie wartości przy której zapali się dioda LED, a miało by ono działać na zasadzie:
-przytrzymanie przycisku przez 3sec. po czym wartość zaczęła by migać. Następnie pojedyncze przyciśnięcia zmieniają wartość co 500 w przedziale 1500-15000. Przytrzymanie przycisku przez 3sec. na wybranej wartości powiedzmy 4000 zapisuje wartość.
Nie wiem również, gdzie umieścić warunek Alarmu tak, aby działał niezależnie jaki podprogram jest w danym czasie uruchomiony (obecnie w podprogramie TEMP OIL i tylko w nim działa)
Link
Chciałbym prosić o sprawdzenie, jak na razie udało mi się uruchomić temperatury, oraz napięcia.
Z tym, że mam tylko jeden przycisk do sterowania wszystkim, użyłem funkcji skoków do podprogramów i nie wiem czy to nie będzie się później komplikować, ponieważ w podprogramie SHITF chcę zrobić ustawianie wartości przy której zapali się dioda LED, a miało by ono działać na zasadzie:
-przytrzymanie przycisku przez 3sec. po czym wartość zaczęła by migać. Następnie pojedyncze przyciśnięcia zmieniają wartość co 500 w przedziale 1500-15000. Przytrzymanie przycisku przez 3sec. na wybranej wartości powiedzmy 4000 zapisuje wartość.
Nie wiem również, gdzie umieścić warunek Alarmu tak, aby działał niezależnie jaki podprogram jest w danym czasie uruchomiony (obecnie w podprogramie TEMP OIL i tylko w nim działa)
'--------------------KONFIGURACJA-----------------------------------------------
$regfile = "m16def.dat" 'informuje kompilator o pliku
$crystal = 8000000 'informuje kompilator o częstotliwości oscylatora
Config 1wire = Porta.3 'konfiguracja portu 1wire
Config Porta.4 = Input 'port wejściowy POMIAR_AKU
Config Porta.5 = Output 'port wyjściowy SHIFT LED
Config Porta.6 = Input 'port wejściowy PALIWO
Config Porta.7 = Input 'port wejściowy PRZYCISK
Config Portb.1 = Output 'port wyjściowy podświetlenie LCD
Config Portc.0 = Output 'port wyjściowy wyświetlacz LED segment A
Config Portc.1 = Output 'port wyjściowy wyświetlacz LED segment B
Config Portc.2 = Output 'port wyjściowy wyświetlacz LED segment C
Config Portc.3 = Output 'port wyjściowy wyświetlacz LED segment D
Config Portc.4 = Output 'port wyjściowy wyświetlacz LED segment E
Config Portc.5 = Output 'port wyjściowy wyświetlacz LED segment F
Config Portc.6 = Output 'port wyjściowy wyświetlacz LED segment G
Config Portc.7 = Output 'port wyjściowy wyświetlacz LED zasilanie RED
Config Portd.0 = Input 'port wejściowy BIEG_1
Config Portd.1 = Input 'port wejściowy BIEG_2
Config Portd.2 = Input 'port wejściowy TACHO_PULSE
Config Portd.3 = Input 'port wejściowy SPEED_PULSE
Config Portd.4 = Input 'port wejściowy BIEG_3
Config Portd.5 = Input 'port wejściowy BIEG_4
Config Portd.6 = Input 'port wejściowy BIEG_5
Config Portd.7 = Input 'port wejściowy BIEG_6
Config Lcd = 16 * 2 'konfiguracja typu wyťwietlacza LCD
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.5 , Db6 = Portb.2 , Db7 = Portb.4 , E = Portb.7 , Rs = Portb.6
'konfiguracja linii
'do których pinów dołączono wyťwietlacz LCD
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'konfiguracja wewnętrznego przetwornika A/C
Reset Portb.1 'Sterowanie podświetleniem: Reset - włączone Set - wyłączone
Cursor Off
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 ' znak stopnia
Deflcdchar 2 , 32 , 16 , 9 , 5 , 3 , 15 , 32 , 32 ' znak strzałki dół
Deflcdchar 1 , 32 , 30 , 24 , 20 , 18 , 1 , 32 , 32 ' znak strzalki góra
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' czyste pole
'--------------------POWITANIE--------------------------------------------------
Cls
Locate 1 , 1
Lcd " test " ;
Locate 2 , 1
Lcd " test "
Wait 2
Cls
'--------------------TEMPERATURA------------------------------------------------
Dim Adresy(16) As Byte
Dim S As Byte
Dim Ss As String * 6
Dim W As Byte
Dim T As Integer
Dim T2 As Integer
Dim I As Integer
Dim I2 As Integer
Dim Oil(9) As Byte
Dim Zew(9) As Byte
Adresy(9) = 1wsearchfirst()
Adresy(1) = 1wsearchnext()
W = 1wirecount()
'--------------------NAPIĘCIA---------------------------------------------------
Dim Wart_ac As Word
Dim V As Single
Dim R As Single
Dim Wart_nap As String * 4
Dim Wart_ac1 As Word
Dim V1 As Single
Dim R1 As Single
Dim Wart_nap1 As String * 4
'-------------------------------KONFIGURACJE MANU-------------------------------
Porta.7 = 1 'podciagam port - przycisk
Dim A As Byte , B As Byte
Declare Sub Temp1
Declare Sub Temp2
Declare Sub Pal
Declare Sub Lad
Declare Sub Obr
Declare Sub Shif
Declare Sub Przyc
Const Maxa = 5 'maksymalna ilosc podprogramow
'-------------------------------PETLA GLOWNA------------------------------------
Cls
Do
Debounce Pina.7 , 0 , Przyc , Sub
On A Gosub Temp1 , Temp2 , Pal , Lad , Obr , Shif
Loop
'-------------------------------TEMP OIL----------------------------------------
Sub Temp1
1wreset
1wwrite &H55 ' Będę wysyłał adres
1wwrite Adresy(1) , 8 ' Wysyłam adres
1wwrite &HBE ' Komenda dla czujnika o wysłanym adresie
Oil(1) = 1wread(9)
1wreset
1wwrite &H55
1wwrite Adresy(9) , 8
1wwrite &HBE
Zew(1) = 1wread(9)
1wreset
1wwrite &HCC ' Komenda skip ROM, czyli słuchajcie wszyscy
1wwrite &H44 ' Komenda convert T
Waitms 800
Cls
T = Makeint(oil(1) , Oil(2))
T = T * 10
T = T / 16
If T > I Then
I = T
If T > 0 Then
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(1)
Locate 1 , 1
Lcd "Temp.Oil"
Else
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(1)
Locate 1 , 1
Lcd "Temp.Oil"
End If
Elseif T < I Then
I = T
If T > 0 Then
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(2)
Locate 1 , 1
Lcd "Temp.Oil"
Else
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(2)
Locate 1 , 1
Lcd "Temp.Oil"
End If
Else
I = T
If T > 0 Then
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(3)
Locate 1 , 1
Lcd "Temp.Oil"
Else
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(3)
Locate 1 , 1
Lcd "Temp.Oil"
End If
End If
If T >= 250 Then ' jezeli temp T> 25'C to...
Lowerline
Ss = Str(t)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd " ALARM "
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(1)
Set Porta.5 'zapal diode LED
Waitms 100
Toggle Porta.5 'zgas diode
End If
End Sub
'-------------------------------TEMP AIR----------------------------------------
Sub Temp2
1wreset
1wwrite &H55 ' Będę wysyłał adres
1wwrite Adresy(1) , 8 ' Wysyłam adres
1wwrite &HBE ' Komenda dla czujnika o wysłanym adresie
Oil(1) = 1wread(9)
1wreset
1wwrite &H55
1wwrite Adresy(9) , 8
1wwrite &HBE
Zew(1) = 1wread(9)
1wreset
1wwrite &HCC ' Komenda skip ROM, czyli słuchajcie wszyscy
1wwrite &H44 ' Komenda convert T
Waitms 800
Cls
T2 = Makeint(zew(1) , Zew(2))
T2 = T2 * 10
T2 = T2 / 16
If T2 > I2 Then
I2 = T2
If T2 > 0 Then
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(1)
Locate 1 , 1
Lcd "Temp.Air"
Else
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(1)
Locate 1 , 1
Lcd "Temp.Air"
End If
Elseif T2 < I2 Then
I2 = T2
If T2 > 0 Then
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(2)
Locate 1 , 1
Lcd "Temp.Air"
Else
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(2)
Locate 1 , 1
Lcd "Temp.Air"
End If
Else
I2 = T2
If T2 > 0 Then
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(3)
Locate 1 , 1
Lcd "Temp.Air"
Else
Ss = Str(t2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Ss ; Chr(0) ; " " ; Chr(3)
Locate 1 , 1
Lcd "Temp.Air"
End If
End If
End Sub
'-------------------------------FUEL--------------------------------------------
Sub Pal
Cls
Start Adc
Cursor Off
Wart_ac = Getadc(6)
V = Wart_ac * 0.004887585533
R = V
Wart_nap = Fusing(r , "#.##" )
Wart_nap = Format(wart_nap , " ")
Cls
Locate 1 , 1
Lcd " FUEL "
Locate 2 , 1
Lcd Wart_nap ; "V "
Waitms 800
End Sub
'-------------------------------CHARGER-----------------------------------------
Sub Lad
Cls
Start Adc
Cursor Off
Wart_ac = Getadc(4)
V = Wart_ac * 0.004887585533
R = V * 4.83
Wart_nap = Fusing(r , "#.#" )
Wart_nap = Format(wart_nap , " ")
Cls
Locate 1 , 1
Lcd "CHARGER"
Locate 2 , 1
Lcd Wart_nap ; "V "
Waitms 800
End Sub
'-------------------------------OBR--------------------------------------------- 'podprogram obroty silnika
Sub Obr
Cls
Locate 1 , 1
Lcd "OBR"
Locate 2 , 1
Lcd ""
Waitms 800
End Sub
'-------------------------------SHIFT------------------------------------------- 'podprogram ustawień wartości OBR przy których zapali się dioda LED
Sub Shif
Cls
Locate 1 , 1
Lcd "SHIFT"
Locate 2 , 1
Lcd ""
Waitms 800
End Sub
'-------------------------------------------------------------------------------
Sub Przyc
Incr A
If A > Maxa Then A = 0
End Sub