Bye
I'm sorry, I'm Italian and I try to speek in english.
This is my first post.
I'm testing my sw to decode GPS Nmea183 string.
This sw works but the visualization in my LCD 2x32 char is not good (conflict with serial???) and
I don't undestand why, if I set only lcd_out(2,6,NSLatitudine), i read the Longitude too in the lcd.
program gps_other
'PIC16F628A
'lcd 2x32
'serial gps on rb1
dim rxIndex as byte
dim rxDone as byte
dim rxGPSData as byte
dim rxDataGarbage as byte
dim conta as byte
dim GP as char[10]
dim sincro as char[7]
dim UTC as char[10]
dim Latitudine as char[10]
dim Longitudine as char[10]
'dim Altitudine as char[4]
dim NS as char[1]
dim EW as char[1]
'dim SatNum as char[4]
dim Ora as char[10]
dim NSLatitudine as char[11]
dim EWLongitudine as char[12]
'Questa e' la successione di stringhe del mio GPS 4800bps 8 n
'$GPGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0*00
'$GPGSV,3,1,09,01,30,312,00,02,24,112,00,04,28,063 ,00,05,77,128,00*73
'$GPGSV,3,2,09,06,15,209,00,14,38,269,00,20,10,000 ,00,25,13,309,00*77
'$GPGSV,3,3,09,30,58,254,00,,,,,,,,,,,,*4D
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
'$GPRMC,204620.999,V,4530.6671,N,00916.9484,E,0.0, 0.0,250805,0.0,W*63
'Io analizzo solo la stringa
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32
' ora UTC lat N/S long E/W
main:
lcd_init(portb)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
' lcd_cmd( LCD_CURSOR_OFF) ' send command cursor off
lcd_out(1,1,"GPS data") ' print txt to LCD, 1nd row, 1st column
USART_init(4800)
'Lcd_Config(PORTA,2,3,0,7,6,1,4)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
lcd_out (1,9,"Attesa...") 'modif.
inizio:
Ora = " "
GP = " "
sincro = " "
rem NSLatitudine = " "
rem EWLongitudine = " "
rem Altitudine = " "
rem SatNum = " "
if USART_Data_Ready=1 then
rxDataGarbage = USART_Read
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
end if
'filtro frase "$GPGGA,"
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="$") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="P") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="G") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData="A") then
rxDone = 1
else goto inizio
end if
end if
wend
rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
if (rxGPSData=",") then
rxDone = 1
else goto inizio
end if
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
UTC[rxIndex] = rxGPSData ' UTC (ora)
if (rxGPSData=44) then
rxdone=1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
Latitudine[rxIndex] = rxGPSData ' Latitudine
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
NS[rxIndex] = rxGPSData ' Nord o Sud
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
Longitudine[rxIndex] = rxGPSData ' Longitudine
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
rxGPSData = USART_Read
EW[rxIndex] = rxGPSData ' Est o Ovest
if (rxGPSData=44) then
rxdone = 1
end if
inc(rxIndex)
end if
wend
' Crea l'array ora
ora[0] = UTC[0] 'ore "20"
ora[1] = UTC[1]
ora[2] = ":"
ora[3] = UTC[2] 'minuti "46"
ora[4] = UTC[3]
ora[5] = ":"
ora[6] = UTC[4] 'secondi "20"
ora[7] = UTC[5]
' Crea l'array NSLatitudine
NSLatitudine[0] = Latitudine[0] ' gradi
NSLatitudine[1] = Latitudine[1] ' gradi
NSLatitudine[2] = "'" ' apice
NSLatitudine[3] = Latitudine[2] ' primi
NSLatitudine[4] = Latitudine[3] ' primi
NSLatitudine[5] = Latitudine[4] ' punto per decimali
NSLatitudine[6] = Latitudine[5] 'decimali
NSLatitudine[7] = Latitudine[6] 'decimali
NSLatitudine[8] = Latitudine[7] 'decimali
NSLatitudine[9] = Latitudine[8] 'decimali
NSLatitudine[10] = " "
NSLatitudine[11] = NS[0] 'nord/sud
' Crea l'array EWLongitudine
EWLongitudine[0] = Longitudine[0] ' gradi
EWLongitudine[1] = Longitudine[1]
EWLongitudine[2] = Longitudine[2]
EWLongitudine[3] = "'"
EWLongitudine[4] = Longitudine[3] ' primi
EWLongitudine[5] = Longitudine[4]
EWLongitudine[6] = Longitudine[5]
EWLongitudine[7] = Longitudine[6]
EWLongitudine[8] = Longitudine[7]
EWLongitudine[9] = Longitudine[8]
EWLongitudine[10] = Longitudine[9]
EWLongitudine[11] = " "
EWLongitudine[12] = EW[0]
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(2,1," ") '11 spazi vuoti x pulire
lcd_out(1,1,"UTC: ")
lcd_out(1,6,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
'delay_ms(3000)
lcd_out(3,1,"Lat: ")
lcd_out(2,6,NSLatitudine)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(3,1,"Lon: ")
'delay_ms(3000)
'lcd_out(3,6,EWLongitudine)
'delay_ms(3000)
'lcd_out(2,19," ") ' spazi vuoti x pulire
goto inizio
end.
I understood how to work with a LCD 2x32:
program lcd_2_x_32
'gestione std 4x20
'infatti prima riga 1 e 3
'seconda riga 2 e 4
dim Ora as char[10]
dim NSLatitudine as char[12]
Ora="22:44:30 "
NSLatitudine="+44'24.3817N"
lcd_init(portb)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
lcd_out(1,1,"UTC:")
lcd_out(1,5,ora)
delay_ms(3000)
'lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
NSLatitudine="+44'24.3817N"
'delay_ms(3000)
lcd_out(2,1,"Lat:")
lcd_out(2,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(3000)
lcd_out(1,1,"Lat:")
lcd_out(1,5,NSLatitudine)
delay_ms(3000)
lcd_cmd( LCD_CLEAR) ' send command to LCD "clear display"
delay_ms(2000)
lcd_out(2,1,"UTC:")
lcd_out(2,5,ora)
delay_ms(3000)
end.
But while reading the serial port, the LCD management doesn't work as it should.
Thank for your help
Antonio