Witam!
Dziś walczę z komunikacją rs232.
Posiadam dwie Atmegi jedna 32, druga 16 - odbiornik.
W nadajniku nadaję string
przez
Odbieram to:
a) przez komputer - transmisja idealna
b) przez uC mega16 - pierwsza transmisja ok, kolejne tak jakby przesunięte
Kod, w odbiorniku:
Otrzymuję tak jakby przesunięty wynik o 2 pola w prawo na wyświetlaczu..
Gdy zamiast nadajnika podłączę komputer i tam nadam string:
To odbiornik odbiera wszystko elegancko i zapala odpowiednie diody.
Wydaję mi się, że nie tak jest coś z tą ".", tzn. komuter nada w ASCI. Nie wiem dokładnie co jest przyczyną i jak to rozwiązać - proszę o pomoc.
Pozdrawiam
Dziś walczę z komunikacją rs232.
Posiadam dwie Atmegi jedna 32, druga 16 - odbiornik.
W nadajniku nadaję string
001100.110011.001100.110011.001100.110011.001100.110011......
przez
Do
Print "001100"
Waitms 500
Print "110011"
Waitms 500
loop
Odbieram to:
a) przez komputer - transmisja idealna
001100.110011.001100.110011.001100.110011.001100.110011......
b) przez uC mega16 - pierwsza transmisja ok, kolejne tak jakby przesunięte
coś w stylu
##001100
Kod, w odbiorniku:
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 19200
Config Porta.0 = Output
Set Porta.0
Config Porta.1 = Output
Set Porta.1
Config Porta.2 = Output
Set Porta.2
Config Porta.3 = Output
Set Porta.3
Config Porta.4 = Output
Set Porta.4
Config Porta.5 = Output
Set Porta.5
Config Porta.6 = Output
Set Porta.6
Config Porta.7 = Output
Set Porta.7
Cls
Cursor Off
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7
Dim Akey As Byte
Dim Liczba As String * 8 , Cyfra As String * 1
Dim Pierwsza As Byte , Druga As Byte , Trzecia As Byte , Czwarta As Byte , Piata As Byte , Szosta As Byte , Siodma As Byte , Osma As Byte
Dim Inputstring As String * 12
Dim Cyfra2 As String * 1
Dim Cyfra3 As String * 1
Dim Cyfra4 As String * 1
Dim Cyfra5 As String * 1
Dim Cyfra6 As String * 1
Dim Cyfra7 As String * 1
Dim Cyfra8 As String * 1
Cls
'Here we declare a byte variable
Do
Liczba = ""
Do
Akey = Waitkey()
If Chr(akey) = "." Then Goto Vv 'On enter key goto thanks
Liczba = Liczba + Chr(akey)
Loop
Vv:
Locate 1 , 1
Lcd Liczba
Cyfra = Mid(liczba , 1 , 1)
Pierwsza = Val(cyfra)
Cyfra2 = Mid(liczba , 2 , 1)
Druga = Val(cyfra2)
Cyfra3 = Mid(liczba , 3 , 1)
Trzecia = Val(cyfra3)
Cyfra4 = Mid(liczba , 4 , 1)
Czwarta = Val(cyfra4)
Cyfra5 = Mid(liczba , 5 , 1)
Piata = Val(cyfra5)
Cyfra6 = Mid(liczba , 6 , 1)
Szosta = Val(cyfra6)
Cyfra7 = Mid(liczba , 7 , 1)
Siodma = Val(cyfra7)
Cyfra8 = Mid(liczba , 8 , 1)
Osma = Val(cyfra8)
Locate 2 , 1
Lcd Pierwsza ; "." ; Druga ; "." ; Trzecia ; "." ; Czwarta
Locate 2 , 10
Lcd Cyfra ; "." ; Cyfra2 ; "." ; Cyfra3 ; "." ; Cyfra4
If Pierwsza = 1 Then
Reset Porta.0
Else
Set Porta.0
End If
If Druga = 1 Then
Reset Porta.1
Else
Set Porta.1
End If
If Trzecia = 1 Then
Reset Porta.2
Else
Set Porta.2
End If
If Czwarta = 1 Then
Reset Porta.3
Else
Set Porta.3
End If
If Piata = 1 Then
Reset Porta.4
Else
Set Porta.4
End If
If Szosta = 1 Then
Reset Porta.5
Else
Set Porta.5
End If
If Siodma = 1 Then
Reset Porta.6
Else
Set Porta.6
End If
If Osma = 1 Then
Reset Porta.7
Else
Set Porta.7
End If
Loop
End
Otrzymuję tak jakby przesunięty wynik o 2 pola w prawo na wyświetlaczu..
Gdy zamiast nadajnika podłączę komputer i tam nadam string:
001100.110011.
To odbiornik odbiera wszystko elegancko i zapala odpowiednie diody.
Wydaję mi się, że nie tak jest coś z tą ".", tzn. komuter nada w ASCI. Nie wiem dokładnie co jest przyczyną i jak to rozwiązać - proszę o pomoc.
Pozdrawiam