Van nekem egy nagy problémám. RS232 kummunikácioban egy karakter, amit a fene sem kért és ezen hasal el a vezérlés.
A gond az hogy bele tesz egy 3 pálcikás karaktert...
Ha serialin buffered akkor nem is fogadja az adatot akár 18 akár 1 az értéke.
Kiirattam a kijelzöre a beérkezö adatot, eredménye, és a .bas fileok itt:
http://tetye.hu/bascom
Remélem tud valaki segiteni.
Az ado oldali prg:
Kód: Egész kijelölése
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600
Config 1wire = Portd.2
Config Pind.6 = Input
Open "Comd.7: 1200 , 8 , n , 1" For Output As #2
Echo Off
Declare Sub Dsidbetolt
Declare Sub Init
Declare Sub Init1
Declare Sub Init2
Declare Sub Init3
Declare Sub Init4
Declare Sub Init5
Declare Sub Convallt
Declare Sub Printing
Declare Sub Resettiny
Declare Function Decigrades(byval Sc(9) As Byte) As Integer
Dim Min1 As Integer
Dim Max1 As Integer
Dim Min2 As Integer
Dim Max2 As Integer
Dim Min3 As Integer
Dim Max3 As Integer
Dim Min4 As Integer
Dim Max4 As Integer
Dim Min5 As Integer
Dim Max5 As Integer
Dim B As Byte
Dim W As Word
Dim F As Byte
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Integer
Dim Temp4 As Integer
Dim Temp5 As Integer
Dim Sc(9) As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Id3(8) As Byte
Dim Id4(8) As Byte
Dim Id5(8) As Byte
Dim Hiba(5) As Byte
Dim I As Byte
Reset Portc.7
W = 1wirecount()
Min1 = 999
Min2 = 999
Min3 = 999
Min4 = 999
Min4 = 999
Resettiny
Do
Call Dsidbetolt
Call Convallt
Call Init
Call Printing
Loop
End
Sub Printing()
If Hiba(1) = 0 Then
Else
Waitms 500
Print #2, "lerrta"
Print "Hiba az 1es szenzoron!"
End If
If Hiba(2) = 0 Then
Else
Waitms 500
Print #2, "lerrtb"
Print "Hiba az 2es szenzoron!"
End If
If Hiba(3) = 0 Then
Else
Waitms 500
Print #2, "lerrtc"
Print "Hiba az 3as szenzoron!"
End If
If Hiba(4) = 0 Then
Else
Waitms 500
Print #2, "lerrtd"
Print "Hiba az 3as szenzoron!"
End If
If Hiba(5) = 0 Then
Else
Waitms 500
Print #2, "lerrte"
Print "Hiba az 5os szenzoron!"
End If
For I = 1 To 5
If Hiba(I) = 11 Then
Print I
End If
Next I
Select Case Pind.6
Case 1
If Temp1 > 35 Then
Print #2, "pkix"
Waitms 500
Print #2, "pbey"
Else
Print #2, "pkiy"
Waitms 500
Print #2, "pbex"
Waitms 500
End If
Case 0
Print #2, "pkix"
Waitms 500
Print #2, "pkiy"
Waitms 500
End Select
If Temp1 > 35 Then
Print #2, "pbey"
Else
Print #2, "pkiy"
End If
End Sub
'1es szenzor lekérdezése
Sub Init1()
1 wreset
1 wverify Id1(1)
1 wwrite , &HBE
Sc(1) = 1wread(9)
Temp1 = 0
If Err = 0 Then
If Sc(9) = Crc8(Sc(1), 8) Then
Temp1 = Decigrades(Sc(9))
If Min1 > Temp1 Then Min1 = Temp1
If Max1 < Temp1 Then Max1 = Temp1
Hiba(1) = 0
End If
Else
Hiba(1) = 11
End If
End Sub
'2es szenzor lekérdezése
Sub Init2()
1 wreset
1 wverify Id2(1)
1 wwrite , &HBE
Sc(1) = 1wread(9)
Temp2 = 0
If Err = 0 Then
If Sc(9) = Crc8(Sc(1), 8) Then
Temp2 = Decigrades(Sc(9))
If Min2 > Temp2 Then Min2 = Temp2
If Max2 < Temp2 Then Max2 = Temp2
Hiba(2) = 0
End If
Else
Hiba(2) = 11
End If
End Sub
'3as szenzor lekérdezése
Sub Init3()
1 wreset
1 wverify Id3(1)
1 wwrite , &HBE
Sc(1) = 1wread(9)
Temp3 = 0
If Err = 0 Then
If Sc(9) = Crc8(Sc(1), 8) Then
Temp3 = Decigrades(Sc(9))
If Min3 > Temp3 Then Min3 = Temp3
If Max3 < Temp3 Then Max3 = Temp3
Hiba(3) = 0
End If
Else
Hiba(3) = 11
End If
End Sub
'4es szenzor lekérdezése
Sub Init4()
1 wreset
1 wverify Id4(1)
1 wwrite , &HBE
Sc(1) = 1wread(9)
Temp4 = 0
If Err = 0 Then
If Sc(9) = Crc8(Sc(1), 8) Then
Temp4 = Decigrades(Sc(9))
If Min4 > Temp4 Then Min4 = Temp4
If Max4 < Temp4 Then Max4 = Temp4
Hiba(4) = 0
End If
Else
Hiba(4) = 11
End If
End Sub
'5os szenzor lekérdezése
Sub Init5()
1 wreset
1 wverify Id5(1)
1 wwrite , &HBE
Sc(1) = 1wread(9)
Temp5 = 0
If Err = 0 Then
If Sc(9) = Crc8(Sc(1), 8) Then
Temp5 = Decigrades(Sc(9))
If Min5 > Temp5 Then Min5 = Temp5
If Max5 < Temp5 Then Max5 = Temp5
Hiba(5) = 0
End If
Else
Hiba(5) = 11
End If
End Sub
Sub Dsidbetolt()
'x 1
Id1(1) = &H10
Id1(2) = &HF3 '3
Id1(3) = &H72
Id1(4) = &H9E
Id1(5) = &H1
Id1(6) = &H8
Id1(7) = &H0
Id1(8) = &H17
'v 2
Id2(1) = &H10
Id2(2) = &H47
Id2(3) = &HA0
Id2(4) = &H7A
Id2(5) = &H1
Id2(6) = &H8
Id2(7) = &H0
Id2(8) = &H56
'y 3
Id3(1) = &H10
Id3(2) = &H8E 'e
Id3(3) = &HA9
Id3(4) = &H9E
Id3(5) = &H1
Id3(6) = &H8
Id3(7) = &H0
Id3(8) = &HEB
'z 4
Id4(1) = &H10
Id4(2) = &H2C
Id4(3) = &HCC
Id4(4) = &H7A
Id4(5) = &H1
Id4(6) = &H8
Id4(7) = &H0
Id4(8) = &H5D
'b 5
Id5(1) = &H10
Id5(2) = &H98
Id5(3) = &HC5
Id5(4) = &H7A
Id5(5) = &H1
Id5(6) = &H8
Id5(7) = &H0
Id5(8) = &H75
End Sub
Sub Convallt()
1 wreset
1 wwrite &HCC
1 wwrite &H44
Waitms 200
End Sub
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte, T As Integer, T1 As Integer
Tmp = Sc(1) And 1
If Tmp = 1 Then Decr Sc(1)
T = Makeint(Sc(1), Sc(2))
T = T * 50
T = T - 25
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 10
Decigrades = Decigrades / 10
End Function
Sub Resettiny() ' reseteli a tini2313at
Set Portc.7
Waitms 500
Reset Portc.7
End Sub
Sub Init()
Init1
Waitms 200
Init2
Waitms 200
Init3
Waitms 200
Init4
Waitms 200
Init5
Waitms 200
End Sub
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 11059200
$baud = 1200
'Config Serialin = Buffered , Size = 1
Echo Off
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.4 , Db4 = Portb.7 , Db5 = Portb.6 , Db6 = Portb.5 , Db7 = Portb.4
Config Lcd = 20 * 4
Initlcd
Cls
Lcd "Inicializalas:"
Waitms 100
Lcd "."
Waitms 100
Lcd "."
Waitms 100
Lcd "."
Waitms 0
Lowerline
Lcd "Kesz!"
Waitms 400
Cls
Config Portd.3 = Output
Config Portb.1 = Output '1 '
Config Portb.2 = Output '2 '
Config Portb.3 = Output '3
Config Portd.6 = Output '4
Config Portb.0 = Output '5
Set Portd.3
Dim Elsobajt As String * 3
Declare Sub Adatcsomag
Declare Sub Scr
Declare Sub Hiba
Dim Command As String * 4
Dim Script As String * 8
Dim S As String * 14
Dim Z As Integer
Dim X As Integer
Dim A As Integer
Dim B As Byte
Dim Hibahelye As String * 2
Do
S = ""
Input S
Lcd S
Wait 1
Cls
Z = Len(S)
Z = Z - 1
S = Right(S, Z)
GoSub Adatcsomag
GoSub Scr
If Command = "port" Then
Select Case Script
'1
Case "bey"
Set Portb.1
Case "kiy"
Reset Portb.1
'2
Case "bex"
Set Portb.2
Case "kix"
Reset Portb.2
'3
Case "bec"
Set Portb.3
Case "kic"
Reset Portb.3
'4
Case "bev"
Set Portd.6
Case "kiv"
Reset Portd.6
'5
Case "beb"
Set Portb.0
Case "kib"
Reset Portb.0
End Select
End If
If Command = "lcd" Then
Select Case Script
Case "m"
Lcd "A rendszer hiba"
Lowerline
Lcd "nelkul uzemel."
Case "err"
GoSub Hiba
End Select
End If
Loop
End
Sub Adatcsomag():
Elsobajt = Left(S, 1)
Select Case Elsobajt
Case "l"
Command = "lcd"
Case "p"
Command = "port"
End Select
End Sub
Sub Scr():
X = Len(S)
X = X - 1
Script = Right(S, X)
Lcd Script
Wait 1
End Sub
Sub Hiba():
Hibahelye = Right(Script, 2)
Lcd Script
Lowerline
Lcd Hibahelye
Wait 2
Cls
Select Case Hibahelye
Case "ta"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "1 es hofok jelado"
Case "tb"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "2 es hofok jelado"
Case "tc"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "3 as hofok jelado"
Case "td"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "4 es hofok jelado"
Case "te"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "5 os hofok jelado"
Case "pa"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "1 es nyomás jelado"
Case "pb"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "2 es nyomás jelado"
Case "pc"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "3 as nyomás jelado"
Case "pd"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "4 es nyomás jelado"
Case "pe"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "5 os nyomás jelado"
End Select
End Sub