Witam
Nie za bardzo wychodzi mi wykorzystanie z dwóch portów UART.
UART sprzętowy odbiera ramki z modułu GPS ( Tx modułu do Rx AtMega32 ) i to działa.
Działa do momentu gdy włączę UART sprzętowy ( tylko Rx na jednym z portów Atmega do Tx portu Com w komputerze - korzystam z przejściówki, ale to chyba nie problem ), wtedy informacje na LCD nie są aktualizowane do momentu naciśnięcia Enter'a ( każdorazowe naciśnięcie Enter, nawet bez żadnych znaków odświeża LCD ). Natomiast nie wykonuje tego co było w założeniu.
Umieszczam tylko istotną część kodu, pominąłem biblioteki do zapisu SD, to działa poprawnie.
Może jakieś sugestie ?
Nie za bardzo wychodzi mi wykorzystanie z dwóch portów UART.
UART sprzętowy odbiera ramki z modułu GPS ( Tx modułu do Rx AtMega32 ) i to działa.
Działa do momentu gdy włączę UART sprzętowy ( tylko Rx na jednym z portów Atmega do Tx portu Com w komputerze - korzystam z przejściówki, ale to chyba nie problem ), wtedy informacje na LCD nie są aktualizowane do momentu naciśnięcia Enter'a ( każdorazowe naciśnięcie Enter, nawet bez żadnych znaków odświeża LCD ). Natomiast nie wykonuje tego co było w założeniu.
Umieszczam tylko istotną część kodu, pominąłem biblioteki do zapisu SD, to działa poprawnie.
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600 ' predkość transmisji
$hwstack = 128 ' rozmiar stosu sprzętowego
$swstack = 128 ' rozmiar stosu programowego
$framesize = 128 ' rozmiar ramki
Open "comd.7:9600,8,n,1" For Input As #2
Dim Rs1 As String * 54
Dim Gps1 As Byte
Dim Usart2 As String * 12
Dim Usart2_dane As Byte
A1 = "$GPGGA"
A2 = "$GPGSA"
A3 = "$GPRMC"
A4 = "$GPGSV"
A5 = "data"
Do
Gps1 = Inkey()
If Gps1 = 13 Then Exit Do ' jeśli koniec linii
Rs1 = Rs1 + Chr(gps1) ' utwórz ciąg
Loop
Do
Usart2_dane = Inkey(#2)
If Usart2_dane = 13 Then Exit Do ' jeśli koniec linii
Usart2 = Usart2 + Chr(usart2_dane) ' utwórz ciąg
Loop
Ramka = Instr(rs1 , A1) ' szukaj w zmiennej Rs ciągu A1
Ramka1 = Mid(rs1 , Ramka , 6) ' zwraca fragment tekstu ze zmiennej Rs
Ramka8 = Instr(usart2 , A5) ' szukaj w zmiennej Rs ciągu A5
Ramka9 = Mid(usart2 , Ramka8 , 6) ' zwraca fragment tekstu ze zmiennej Rs
If Ramka5 = "$GPRMC" Then ' jesli zmienna Ramka1 = "$GPRMC" wtedy
'***************************** obliczanie długości geograficznej
La1 = Mid(rs3 , 18 , 2) ' zwróć wartość 2 kolejnych pól licząc od znaku 18-go z ciągu Rs
La2 = Mid(rs3 , 20 , 2)
La3 = Mid(rs3 , 23 , 3)
Lak = Mid(rs3 , 29 , 1)
'***************************** obliczanie szerokości geograficznej
Lo1 = Mid(rs3 , 32 , 2)
Lo2 = Mid(rs3 , 34 , 2)
Lo3 = Mid(rs3 , 37 , 3)
Lok = Mid(rs3 , 43 , 1)
'***************************** obliczanie prędkości
Speed1 = Mid(rs3 , 45 , 3 ) 'wartość 3 kolejnych pól licząc od znaku 45
Speed2 = Instr(speed1 , Znaczek ) 'określa numer miejsca położenia ","
Speed3 = Mid(speed1 , 1 , Speed2)
Speed4 = Val(speed3)
Speed5 = Speed4 * 1.852 ' prędkość jako string do wyświetlania
Speed55 = Str(speed5) ' prędkość jako string dla zapisu na Sd
N_sig1 = Mid(rs3 , 10 , 1) 'wykrywa literę V, co oznacza brak ramki
End If
'***************************** ustawianie daty
If Ramka8 = "data" Then ' jesli zmienna Ramka1 = "$GPGGA" wtedy
Day1 = Mid(usart2 , 5 , 2 )
Day = Val(day1)
Month1 = Mid(usart2 , 7 , 2 )
Month = Val(month1)
Call Settime
End If
Waitms 199
Rs1 = ""
Usart2 = ""
'*********************** Obsługa zapisu na SD
Sub Write_to_sd()
Local Errorcode As Byte ''()
Gbdriveerror = Driveinit()
If Gbdriveerror = 0 Then
Errorcode = Initfilesystem(1)
If Errorcode <> 0 Then
Blad_sd = 1
Else
Open "gps.txt" For Append As #3 'otwórz plik pomiar.txt aby dopisać dane
Write #3 , Data_czas , Gps_data , Speed55 , Sd 'zapisz dane: data, czas , odczyt temperatury
Flush #3 'zapisz bufor pliku na karcie SD
Close #3 'zamknij kanał transmisji sprzętowego urządzenia
Blad_sd = 0 'ustaw zmienna na 0
End If
Else
Blad_sd = 1
End If
End Sub
Może jakieś sugestie ?