komputerek.txt

Komputer samochodowy do VW GOLF IV

Mój golf wykorzystuje protokół kpw1281 i zbudowanie komputerka czytający dane ze sterowników silnika było by czymś super ale niestety to za wysokie progi jak na moje nogi. Ukończyłem już mój komputerek, pozostało mi teraz czekać na nowy wyświetlacz bo spaliłem czerwone podświetlenie :) i zamontować go w aucie :) http://obrazki.elektroda.net/28_1269949021_thumb.jpg http://obrazki.elektroda.net/52_1269949021_thumb.jpg Funkcje: - sprawdzenie włączenia świateł - pomiar napięcia w instalacji elektrycznej samochodu - pomiar temperatury zewnętrznej i wewnętrznej - pomiar ilości spalonego paliwa z zapisem do pamięci ( na wypadek rozładowania akumulatora ) - sygnalizacja włączenia alarmu zamiast diody schemat: http://obrazki.elektroda.net/69_1279097122_thumb.jpg kod:


$regfile = " m32def.dat "
$crystal = 8000000


Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.4 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.6
Config Portc.0 = Output 'BUZER
Config Porta.7 = Output 'podswietlenie
Config Portb.1 = Input 't1
Config Portd.3 = Input 'int1
Config Portd.2 = Input 'int0
Config Portb.2 = Input 'int2
Config Porta.6 = Input ' swiatla
Config Porta.5 = Input ' stacyjka
Config Portd.7 = Input ' reset funkcji
Config 1wire = Portb.4 'termometr
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'woltomierz

Start Adc 'uruchamia wbudowany przetwornik


'****zmienne do pomiaru temperatury
Dim I1 As Integer
Dim I4 As Single
Dim Ss1 As String * 6
Dim I2 As Integer
Dim Ss2 As String * 6
Dim I5_old As Integer
Dim I5_test As Integer
Dim I6_old As Integer
Dim I6_test As Integer
Dim I6 As Integer
Dim I7 As Single
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid11(9) As Byte
Dim Dsid22(9) As Byte
Dim Crc1 As Byte
Dim Crc2 As Byte
Dim I5 As Integer

'****zmienne do wykrycia wl. alarmu
Dim Ilosc_co_500ms As Byte
Dim Czy_miga As Byte
Dim Spr_alarm As Bit
Dim Co_500ms As Byte

'****zmienne do pomiaru napiecia
Dim Wart_ac As Word
Dim Wart_nap As String * 4
Dim V As Single
Dim Vv As Byte

'****zmienne do pomiaru czasu wtrysku
Dim Wart_spal As String * 6
Dim Co_400us As Long
Dim Spalone_paliwo As Single
Dim Sekunda As Long
Dim Sekunda_eeprom As Long

'****inne zmienne
Dim Powitanie As Bit

Declare Sub Napiecie
Declare Sub Wylaczenie
Declare Sub Swiatla
Declare Sub Alarma
Declare Sub Silnik
Declare Sub Temperatura
Declare Sub Podswietlenie

Portc.0 = 1


'****timer1********
Config Timer1 = Timer , Prescale = 64
On Timer1 Pomiar_czasu 'skok do podprogeramu Pomiar_paliwa
Load Timer1 , 50
Enable Timer1
Stop Timer1



'****alarm*****
Config Int0 = Change
On Int0 Alarm
Disable Int0

'*****wtrysk*****
On Int1 Wtrysk
Config Int1 = Change
Disable Int1


Enable Interrupts



Cursor Off
Portd.7 = 0
Display On
Cls
Locate 1 , 1
Lcd " Komputerek "
Locate 2 , 1
Lcd " wersja 4.0 "
Wait 2
Portd.7 = 1
Porta.5 = 1
Porta.6 = 1
Porta.7 = 1
Display Off
Cls
Sekunda = 0
Spr_alarm = 0
Powitanie = 0
Co_400us = 0
Spalone_paliwo = 0
Czy_miga = 10
Ilosc_co_500ms = 10

Do

If Pina.5 = 0 Then
Display On
Disable Int0

'***POWITANIE

If Powitanie = 0 Then


'wl. lcd i podswietlenie
Porta.7 = 0
Deflcdchar 2 , 32 , 2 , 7 , 8 , 7 , 1 , 14 , 32 ' œ
Deflcdchar 5 , 32 , 4 , 14 , 17 , 16 , 17 , 14 , 32 ' ae
Cls
Locate 1 , 4
Lcd " VW GOLF IV " 'powitanie
Locate 2 , 3
Lcd " 1,4 16V AKQ "
Wait 3
Cls
Locate 1 , 2
Lcd " Cze " ; Chr(2) ; Chr(5) ; " Dominik " 'powitanie

Dsid1(1) = 1wsearchfirst() 'pierwszy pomiat temp. potrzebny do weryfikacji wystapienia bledow
Dsid2(1) = 1wsearchnext()


1wreset
1wwrite & H55
1wwrite Dsid1(1) , 8
1wwrite & HBE
Waitms 750
Dsid11(1) = 1wread(9)


1wreset
1wwrite & H55
1wwrite Dsid2(1) , 8
1wwrite & HBE
Waitms 750
Dsid22(1) = 1wread(9)


1wreset
1wwrite & HCC
1wwrite & H44


Crc1 = Crc8(dsid11(1) , 8)
Crc2 = Crc8(dsid22(1) , 8)

If Crc1 = Dsid11(9) Then
I1 = Makeint(dsid11(1) , Dsid11(2))
I4 = I1 / 16
I5_old = Round(i4)
End If


If Crc2 = Dsid22(9) Then
I2 = Makeint(dsid22(1) , Dsid22(2))
I7 = I2 / 16
I6_old = Round(i7)
End If



End If





Powitanie = 1
Podswietlenie
Silnik
Swiatla
Wylaczenie


Temperatura


Podswietlenie
Silnik
Wylaczenie



Deflcdchar 0 , 14 , 14 , 14 , 31 , 31 , 31 , 14 , 32 ' termometr
Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 10 , 14 , 14 ' termometr
Deflcdchar 2 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 ' znak stopnia
Deflcdchar 3 , 14 , 27 , 17 , 17 , 17 , 17 , 31 , 32 ' ikona ladowania
Deflcdchar 4 , 32 , 30 , 19 , 31 , 13 , 12 , 30 , 32 ' paliwo
Deflcdchar 5 , 31 , 17 , 17 , 4 , 14 , 21 , 4 , 4 ' w
Deflcdchar 6 , 31 , 17 , 17 , 4 , 4 , 21 , 14 , 4 ' z
Deflcdchar 7 , 24 , 8 , 8 , 8 , 8 , 9 , 29 , 32 ' l.

Readeeprom Sekunda_eeprom , 1

If Sekunda & gt; Sekunda_eeprom Then 'gdy zliczanie trwa, zapisz do pamieci
Writeeeprom Sekunda , 1
End If

If Sekunda & lt; Sekunda_eeprom Then 'gdy licznik zostal wyzerowany, przywroc poprzedni stan
Readeeprom Sekunda , 1
End If

Spalone_paliwo = Sekunda * 0.0088 'przeliczanie sekund na spalone paliwo
Wart_spal = Fusing(spalone_paliwo , " #. & " )



If I5 & gt; -1 Then 'gdy temp.zew dodatnia
Locate 1 , 1
Lcd Chr(1) ; Chr(6) ; " " ; Ss1 ; Chr(2) ; " C "
End If
If I5 & lt; 0 Then 'gdy temp.zew ujemna
Locate 1 , 1
Lcd Chr(1) ; Chr(6) ; Ss1 ; Chr(2) ; " C "
End If



If I6 & gt; -1 Then 'gdy temp.wew dodatnia
Locate 2 , 1
Lcd Chr(0) ; Chr(5) ; " " ; Ss2 ; Chr(2) ; " C "
End If 'gdy temp.wew ujemna
If I6 & lt; 0 Then
Lcd Chr(0) ; Chr(5) ; Ss2 ; Chr(2) ; " C "
End If





If Sekunda & lt; 11364 Then ' gdy spaline paliwo & lt; 100 l.
Locate 2 , 9
Lcd Chr(4) ; " " ; Wart_spal ; " " ; Chr(7) ; " "
End If

If Sekunda & gt; 11363 Then ' gdy spaline paliwo & gt; 99.9 l.
Locate 2 , 9
Lcd Chr(4) ; Wart_spal ; " " ; Chr(7) ; " "
End If

Napiecie

Locate 1 , 9
Lcd Chr(3) ; " " ; Wart_nap ; " V "


Podswietlenie
Silnik
Wylaczenie


Wait 4





If Pind.7 = 0 Then 'reset licznika
Wait 3
If Pind.7 = 0 Then
Cls
Locate 1 , 1
Lcd " Czy napewno ? "
Locate 2 , 1
Lcd " Masz 2 sekundy "
If Pind.7 = 0 Then
Wait 3
If Pind.7 = 0 Then
Spalone_paliwo = 0
Sekunda = 0
Sekunda_eeprom = 0
Writeeeprom Sekunda , 1
Cls
Locate 1 , 4
Lcd " Licznik "
Locate 2 , 3
Lcd " wyzerowana "
Portc.0 = 0
Waitms 100
Portc.0 = 1
Waitms 100
Portc.0 = 0
Waitms 100
Portc.0 = 1
Waitms 100
Portc.0 = 0
Waitms 100
Portc.0 = 1

End If
End If
End If
End If

Silnik
Podswietlenie
Wylaczenie

End If

If Pina.5 = 1 Then 'wy??czona stacyjka i czekani na alarm

Enable Int0 'wlaczenie przerwania

Deflcdchar 0 , 2 , 4 , 4 , 8 , 9 , 17 , 18 , 18 ' ikona alarmu
Deflcdchar 3 , 18 , 18 , 17 , 9 , 8 , 4 , 4 , 2 ' ikona alarmu
Deflcdchar 5 , 9 , 9 , 17 , 18 , 2 , 4 , 4 , 8 ' ikona alarmu
Deflcdchar 1 , 7 , 7 , 7 , 3 , 3 , 3 , 1 , 1 ' ikona alarmu
Deflcdchar 2 , 28 , 28 , 28 , 24 , 24 , 24 , 16 , 16 ' ikona alarmu
Deflcdchar 6 , 1 , 1 , 32 , 32 , 1 , 3 , 3 , 1 ' ikona alarmu
Deflcdchar 7 , 16 , 16 , 32 , 32 , 16 , 24 , 24 , 16 ' ikona alarmu
Deflcdchar 4 , 8 , 4 , 4 , 2 , 18 , 17 , 9 , 9 ' ikona alarmu
Locate 1 , 1
Lcd Chr(0) ; Chr(1) ; Chr(2) ; Chr(4) ; " Alarm "
Locate 2 , 1
Lcd Chr(3) ; Chr(6) ; Chr(7) ; Chr(5) ; " uzbrojony "

Waitms 250


End If





Loop

End
'***************************
'***KONIEC PROGRAMU GLOWNEGO
'***************************







'***************************
'********podswietlenie
'***************************
Podswietlenie:
If Pina.6 = 0 Then
Wait 1
If Pina.6 = 0 Then
Porta.7 = 0
End If
End If
If Pina.6 = 1 Then
Wait 1
If Pina.6 = 1 Then

Porta.7 = 1
End If
End If
Return






'***************************
'******swiatla
'***************************

Swiatla:

If Pina.6 = 1 Then 'sprawdzenie wlaczenia swiatel
Wait 1
If Pina.6 = 1 Then

Wart_ac = Getadc(0)
V = Wart_ac * 0.0147
Wart_nap = Fusing(v , " #.# " )
Vv = Round(v)

If Vv & gt; 13 Then 'jesli silnil zostal uruchomiony
Wait 1
If Vv & gt; 13 Then

Do



If Pina.5 = 1 Then

Exit Do

End If

Wart_ac = Getadc(0)
V = Wart_ac * 0.0147
Wart_nap = Fusing(v , " #.# " )
Vv = Round(v)

If Vv & lt; 13 Then

Exit Do

End If




If Pina.6 = 0 Then

Exit Do

End If





If Pina.6 = 1 Then
Wait 1
If Pina.6 = 1 Then
Cls
Deflcdchar 0 , 12 , 4 , 6 , 12 , 4 , 4 , 14 , 32 ' ?
Deflcdchar 1 , 32 , 32 , 14 , 1 , 15 , 17 , 15 , 2 '?
Deflcdchar 2 , 32 , 2 , 7 , 8 , 7 , 1 , 14 , 32 ' œ
Deflcdchar 3 , 32 , 32 , 14 , 17 , 31 , 16 , 12 , 2 ' ?

Locate 1 , 1
Lcd " W " ; Chr(0) ; Chr(1) ; " cz " ; Chr(2) ; " wiat " ; Chr(0) ; " a! " 'komunikat o swaiatlach
Locate 2 , 1
Lcd " bo b " ; Chr(3) ; " dzie mandat "

Display On

Portc.0 = 0
Porta.7 = 0

Waitms 500

Display Off
Portc.0 = 1
Porta.7 = 1

Waitms 500
End If
End If
Loop Until Pinc.2 = 1 Or Vv & lt; 13 Or Porta.6 = 0

End If
End If
End If
End If
Return


'***************************
'******napiecie
'***************************


Napiecie:

Wart_ac = Getadc(0)
V = Wart_ac * 0.0147
Wart_nap = Fusing(v , " #.# " )
Vv = Round(v)

Return

'***************************
'******silnik
'***************************

Silnik:
'sprawdzenie wlaczenia silnika
If Vv & gt; 13 Then 'sprawdzenie w??czenia stacyjki na wypadek ??doania aku. z prostownika
If Pina.5 = 0 Then
Enable Int1

End If
End If

If Vv & lt; 13 Then

Disable Int1
Stop Timer1

End If
Return




'***************************
'******wylaczenie
'***************************
Wylaczenie:

If Pina.5 = 1 Then ' sprawdzenie wylaczenia stacyjki


Disable Int1
Enable Int0

Cls
Porta.7 = 0
Locate 1 , 5
Lcd " Narazie "
Wait 3
Porta.7 = 1 'Wylacz Wyswietlacz
Display Off
Powitanie = 0 'zmiana zmiennej kontrolnej powitania
Czy_miga = 10
Ilosc_co_500ms = 10

End If


Return









'***************************
'******wtrysk
'***************************
Wtrysk:

If Pind.3 = 1 Then

Start Timer1 'wl timera

End If

If Pind.3 = 0 Then


Stop Timer1 'wylaczenie timera

End If


Return



'***************************
'******pomiar czasu
'***************************

Pomiar_czasu:
Incr Co_400us 'zwiekrzanie o jeden co 400us
Load Timer1 , 50
If Co_400us = 2500 Then 'gdy zliczysz sekunde
Incr Sekunda 'zwiekrz sekundy
Co_400us = 0
End If
Return



'***************************
'****termometr
'***************************

Temperatura:
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()


1wreset
1wwrite & H55
1wwrite Dsid1(1) , 8
1wwrite & HBE
Waitms 750
Dsid11(1) = 1wread(9)


1wreset
1wwrite & H55
1wwrite Dsid2(1) , 8
1wwrite & HBE
Waitms 750
Dsid22(1) = 1wread(9)


1wreset
1wwrite & HCC
1wwrite & H44


Crc1 = Crc8(dsid11(1) , 8)
Crc2 = Crc8(dsid22(1) , 8)

If Crc1 = Dsid11(9) Then
I1 = Makeint(dsid11(1) , Dsid11(2))
I4 = I1 / 16
I5 = Round(i4)
End If

I5_test = I5 - I5_old

If I5_test & gt; -5 And I5_test & lt; 5 Then
Ss1 = Str(i5)
I5_old = I5
End If


If Crc2 = Dsid22(9) Then
I2 = Makeint(dsid22(1) , Dsid22(2))
I7 = I2 / 16
I6 = Round(i7)
End If

I6_test = I6 - I6_old
If I6_test & gt; -5 And I6_test & lt; 5 Then
Ss2 = Str(i6)
I6_old = I6
End If


Return

'***************************
'****alarm
'***************************

Alarm:

If Pind.2 = 0 Then

Display On
Porta.7 = 0

End If
If Pind.2 = 1 Then

Display Off
Porta.7 = 1

End If
Return


Download file - link to post