Newsgroup: it.hobby.elettronica.digitale
Titolo: pic Mikrobasic e GPS

Salve a tutti sto cercando di fare un visualizzatore su lcd di dati da
seriale
e sto provando a decodificare stringhe da gps.
Il mio problema e' che non riesco a capire come mai non funzioni il filtro
sull'array GP[rxIndex]
 (cicli successivi if ...then... gli and li ho combinat a coppia perche'
sembra che con piu' di 2 non vada)
per attivare il convertitore quando appare la stringa "$GPGGA" e non con le
altre.
Allego il listato:
if USART_Data_Ready=1 then          'pulizia buffer seriale
  rxDataGarbage = USART_Read
end if
rxDone = 0
rxIndex = 0
while rxDone=0
 if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   GP[rxIndex] = rxGPSData             ' Nmea 183 sentence $GPGGA
   if (rxGPSData=44) then                     ',
     if (GP[0]=36) and (GP[1]=71) then        '$ and  G
        if (GP[2]=80) and (GP[3]=71) then     'P and G
            if (GP[4]=71) and (GP[5]=65) then 'G and A
                rxDone = 1
                  else
                    goto inizio
            end if
        end if
     end if
   end if
  inc(rxIndex)
 end if
wend
' di qua in poi inizia la decodifica ora UTC latitudine e longitudine.
grazie

 Allego il listato:
cut
Mha io ho realizzato il tuo stesso progetto 2 anni fa.......con successo ma 
sinceramente ho utilizzato un diverso approccio.
Ho utilizzato un PIC16F876 con un display 20x2.
Se vuoi ti passo il mio codice sorgente, l'ho realizzai con PICBASIC 
........
Mi puoi contattare in icq 172412350 


Max,
potresti inviarmi il sorgente e magari una piccola spiegazione di come 
hai collegato il GPS.
Ti ringrazio anticiapatamente
Roberto
bob1006...@hotmail.com

 ha scritto:

Caro Max mi associo alla richiesta di Lotondo, potresti essere così 
gentile ma mandarmi il tutto.
Grazie.
Buone feste a tutti.
Ciao.
Franco

eccovi accontentati è una versione beta......quella finale l'ho venduta ;-P
ci mancano alcune cose ma funziona.......
Il display usato è un 20 x 2
'************************************************************************************
'* *
'* GPS01.pbp *
'* Programma gestione GPS *
'* *
'************************************************************************************
DEFINE OSC 20 'tipo di cristallo a 20Mhz
@ DEVICE PIC16F876 'definisco il tipo di pic'
HS_OSC 'setto l'oscillatore x alta frequenza 20Mhz'
'setto per la porta seriale
DEFINE HSER_CLROERR 1
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 20H
DEFINE HSER_BAUD 4800 'ok ora dialoga a 4800baud
'setto per lcd
DEFINE LCD_DREG PORTB 'bus dati
DEFINE LCD_DBIT 8 'definisco se lcd è a 8 bit
DEFINE LCD_RSREG PORTA 'definisco su quale porta è il RS
DEFINE LCD_RSBIT 4 'definisco il pin per il RS
DEFINE LCD_EREG PORTA 'definisco su quale porta è il E
DEFINE LCD_EBIT 2 'definisco il pin per il E
DEFINE LCD_RWREG PORTA 'definisco su quale porta è il R/W
DEFINE LCD_RWBIT 3 'definisco il pin per il R/W
'dichiarazione variabili
'H VAR BYTE[5] 'ora
H0 VAR WORD
H1 VAR BYTE
H2 VAR BYTE
HH1 VAR BYTE
'LAT VAR BYTE[7] 'latitudine
LAT0 VAR BYTE
LAT1 VAR BYTE
LAT2 VAR BYTE
LAT3 VAR BYTE
LAT4 VAR BYTE
LAT5 VAR BYTE
LAT6 VAR BYTE
LAT7 VAR BYTE
'LOG VAR BYTE[8] 'longitudine
LOG0 VAR BYTE
LOG1 VAR BYTE
LOG2 VAR BYTE
LOG3 VAR BYTE
LOG4 VAR BYTE
LOG5 VAR BYTE
LOG6 VAR BYTE
LOG7 VAR BYTE
LOG8 VAR BYTE
'DT VAR BYTE[5] 'data
DT0 VAR BYTE
DT1 VAR BYTE
DT2 VAR BYTE
DTT0 VAR WORD
'GGA VAR BYTE[5]
GGA0 VAR BYTE
GGA1 VAR BYTE
GGA2 VAR WORD
GGA3 VAR BYTE
GGA4 VAR BYTE
GGA5 VAR BYTE
'GSA VAR BYTE[11]
GSA0 VAR BYTE
GSA1 VAR BYTE
GSA2 VAR BYTE
GSA3 VAR BYTE
GSA4 VAR BYTE
GSA5 VAR BYTE
GSA6 VAR BYTE
GSA7 VAR BYTE
GSA8 VAR BYTE
GSA9 VAR BYTE
GSA10 VAR BYTE
GSA11 VAR BYTE
GSA12 VAR BYTE
CC2 VAR WORD
CC1 VAR WORD
CC VAR WORD
PC VAR WORD
P0 VAR WORD
Z VAR BYTE
Z0 VAR BYTE
Z1 VAR BYTE
X VAR BYTE
VL VAR BYTE
VLL VAR WORD
BU0 VAR BYTE
BU1 VAR BYTE
Clear
TRISA = 00000011 'setta i pin A come uscite tranne la 0 e 1 come input ci 
sono collegati 2 pulsanti
ADCON1 = %00000110
Poke %10011111, 6 '%10011111
'bit0= reader tx
'bit1= reader rx
'bit2= E
'bit3= R/W
'bit4= RS
'bit5=
TRISB = 0 'all output for data
TRISC = %10100000
'bit0=uscita
'bit1=uscita
'bit2=uscita
'bit3=uscita
'bit4=uscita
'bit5=ingresso
'bit6=uscita
'bit7=ingresso
PORTC.4 = 1
Z = 47
GPSin VAR PORTC.7
GoSub ISTRUZIONI
'ISTRUZIONI SET DISPLAY
LCD_CLS: 'cancella il dispaly
LCDOut $fe,1
Return
LCD_HOME: 'porta il qursore in alto a capo
LCDOut $fe,2
Return
LCD_LINE1: 'sposta il qursore nella prima linea
LCDOut $fe, $80
Return
LCD_LINE2: 'sposta il qursore nella seconda linea
LCDOut $fe, $C0
Return
DATE:
GoSub LCD_CLS
X=1
Z1 = 1
Z= Z-8
GoSub GPS
'********************************************-=SVOLGIMENTO=-********************************************
'--------------------------------------------------
'**************************************************
'*SEZIONE ADIBITA ALLE ISTRUZIONI SUL FIRMWARE *
'* *
'*OGNI ISTRUZIONE VERRA' SCRITTA DI SEGUITO *
'* *
'* *
'* *
'* *
'* *
'**************************************************
ISTRUZIONI:
'========= PAGINA DI PRESENTAZIONE
GoSub LCD_CLS
GoSub PAG00
'_______________________________________
CDATE:
GoSub LCD_CLS
LCDOut "ACQUISIZIONE DATI"
GoSub LCD_LINE2
LCDOut " ATTENDERE PREGO"
IF Z1=1 Then GoSub GPS
Z= Z + 1
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPRMC,"),skip Z, Z0]
IF Z0 = "*" Then GoSub DATE
GoSub CDATE
GPS:
Button PORTA.0,0,0,0,BU0,1,PULS1
Button PORTA.1,0,0,0,BU1,1,PULS2
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPRMC,"),skip Z, DEC2 DT0,DEC2 DT1,DEC2 
DT2]
'Pot PORTA.5,255,P0
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPRMC,"),DEC2 H0,DEC2 H1,DEC2 H2, skip 
7, LAT0,LAT1,LAT2,LAT3, skip 1, LAT4,LAT5,LAT6, skip 2, LAT7, skip 1, 
LOG0,LOG1,LOG2,LOG3,LOG4, skip 1, LOG5,LOG6,LOG7, skip 2, LOG8, SKIP 1, 
#VL,skip 3, #PC]
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPGGA,"),skip 38, #GGA0,skip 4,#GGA2, 
GGA3 ]
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPGSA,"),skip 2,GSA0,skip 
1,GSA1,GSA2,skip 1,GSA3,GSA4,skip 1,GSA5,GSA6,skip 1,GSA7,GSA8,skip 
1,GSA9,GSA10,skip 1,GSA11,GSA12 ]
GoSub SEQ
'________________________________________
SEQ:
IF X = 1 Then GoSub PAG01
IF X = 2 Then GoSub PAG02
IF X = 3 Then GoSub PAG03
IF X = 4 Then GoSub PAG04
IF X = 5 Then GoSub PAG05
IF X > 5 Then X=1
IF X < 1 Then X=1
GoSub GPS
AUTO:
X = X + 1
IF x<10 Then GoSub PAG01
IF x<20 Then GoSub PAG02
IF x<30 Then GoSub PAG03
IF x<40 Then GoSub PAG04
IF x=45 Then x=0
GoSub GPS
NOGPS: 'visualizza la mancanza di segnale
GoSub LCD_CLS
LCDOut " NO GPS"
Pause 1000
SerIn2 GPSin,188,3000,NOGPS,[wait("$GPRMC,")]
Clear
Z = 47
GoSub CDATE
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
'**************************************************
'*SEZIONE ADIBITA ALLE PAGINE DA VISUALIZZARE SUL *
'* *
'*DISPLAY. *
'* *
'*OGNI FUNZIONE CORRISPONDERA' AD UNA PAGINA *
'* *
'* *
'* *
'**************************************************
PAGINE:
PAG00:'PAGINA DI PRESENTAZIONE
GoSub lcd_line1
LCDOut " ELECTRA"
GoSub lcd_line2
LCDOut " GPS 1.00"
Pause 2000
GoSub CDATE
'--------------------------------
PAG01: 'PAGINA ORA E DATA
HH1=H0+2
DTT0=DT0
IF H0 = 22 Then HH1 = 00
IF H0 = 23 Then HH1 = 01
IF H0 = 22 Then DTT0 = (DT0+1)
IF H0 = 23 Then DTT0 = (DT0+1)
GoSub LCD_CLS
LCDOut " TIME ",#HH1 DIG 1, #HH1 DIG 0, ":",#H1 DIG 1,#H1 DIG 0,":",#H2 DIG 
1,#H2 DIG 0
GoSub LCD_LINE2
LCDOut " DATE ", #DTT0 DIG 1, #DTT0 DIG 0, "/",#DT1 DIG 1,#DT1 DIG 0, 
"/",#DT2 DIG 1,#DT2 DIG 0
GoTo GPS
'--------------------------------
PAG02: 'PAGINA COORDINATE
GoSub LCD_CLS
GoSub LCD_LINE1
LCDOut "LAT ", LAT7,LAT0,LAT1, ".", LAT2,LAT3, ",", LAT4,LAT5,LAT6, "'"
GoSub LCD_LINE2
LCDOut "LOG ", LOG8,LOG0,LOG1,LOG2,".", LOG3,LOG4, ",", LOG5,LOG6,LOG7, "'"
GoSub GPS
'--------------------------------
PAG03: 'PAGINA ALTITUDINE E VELOCITA'
GGA2 = GGA2-48 'CORREZIONE ALTITUDINE
VLL = ((VL * 185)/100) 'CALCOLO CONVERSIONE DA KNOTS A KM/H
IF PC => 0 AND PC < 22 Then GoTo N 'ISTRUZIONI PER LA VISUALIZZAZIONE DELLA 
BUSSOLA
IF PC => 22 AND PC < 45 Then GoTo NNE
IF PC => 45 AND PC < 67 Then GoTo NE
IF PC => 67 AND PC < 90 Then GoTo ENE
IF PC => 90 AND PC < 112 Then GoTo E
IF PC => 122 AND PC < 135 Then GoTo ESE
IF PC => 135 AND PC < 157 Then GoTo SE
IF PC => 157 AND PC < 180 Then GoTo SSE
IF PC => 180 AND PC < 202 Then GoTo S
IF PC => 202 AND PC < 225 Then GoTo SSW
IF PC => 225 AND PC < 247 Then GoTo SW
IF PC => 247 AND PC < 270 Then GoTo WSW
IF PC => 270 AND PC < 292 Then GoTo W
IF PC => 292 AND PC < 315 Then GoTo WNW
IF PC => 315 AND PC < 337 Then GoTo NW
IF PC => 337 AND PC < 360 Then GoTo NNW
IF PC > 360 Then PC = "-"
PAV:
GoSub LCD_CLS
GoSub LCD_LINE1
'LCDOut "ALT ",#GGA2 DIG 2,#GGA2 DIG 1,#GGA2 DIG 0, ",", GGA3,"Mt", " 
",CC,CC1,CC2
LCDOut "ALT ", #GGA2 DIG 2,#GGA2 DIG 1,#GGA2 DIG 0, ",", GGA3,"Mt", " 
",CC,CC1,CC2
GoSub LCD_LINE2
LCDOut "VEL ", #VLL DIG 2,#VLL DIG 1,#VLL DIG 0," KM/h", " ", #PC DIG 2, #PC 
DIG 1, #PC DIG 0
GoSub GPS
N:
CC = " "
CC1 = "N"
CC2 = " "
GoTo PAV
NNE:
CC = "N"
CC1 = "N"
CC2 = "E"
GoTo PAV
NE:
CC = " "
CC1 = "N"
CC2 = "E"
GoTo PAV
ENE:
CC = "E"
CC1 = "N"
CC2 = "E"
GoTo PAV
E:
CC = " "
CC1 = "E"
CC2 = " "
GoTo PAV
ESE:
CC = "E"
CC1 = "S"
CC2 = "E"
GoTo PAV
SE
CC = " "
CC1 = "S"
CC2 = "E"
GoTo PAV
SSE:
CC = "S"
CC1 = "S"
CC2 = "E"
GoTo PAV
S:
CC = " "
CC1 = "S"
CC2 = " "
GoTo PAV
SSW:
CC = "S"
CC1 = "S"
CC2 = "W"
GoTo PAV
SW:
CC = " "
CC1 = "S"
CC2 = "W"
GoTo PAV
WSW:
CC = "W"
CC1 = "S"
CC2 = "W"
GoTo PAV
W:
CC = " "
CC1 = "W"
CC2 = " "
GoTo PAV
WNW:
CC = "W"
CC1 = "N"
CC2 = "W"
GoTo PAV
NW:
CC = " "
CC1 = "N"
CC2 = "W"
GoTo PAV
NNW:
CC = "N"
CC1 = "N"
CC2 = "W"
GoTo PAV
'--------------------------------
PAG04: 'PAGINA N°SATTELLITI AGGANCIATI
GoSub LCD_CLS
GoSub LCD_LINE1
LCDOut "SAT N. ", #GGA0 DIG 1,#GGA0 DIG 0
GoSub LCD_LINE2
LCDOut "(^^)"
GoSub GPS
PAG05: 'PAGINA OPERATORE
GoSub LCD_CLS
LCDOut "V.Beta 06-03-2005 "
GoSub LCD_LINE2
LCDOut "-*-*-*-*-*-*-*-*-*-"
Pause 5000
GoSub LCD_CLS
X=3
GoSub PAG03
'________________________________
PULS1:
X=X+1
GoTo SEQ
PULS2:
X=X-1
GoTo SEQ
End

Max,
ti ringrazio per aver pubblicato il listato.
Premetto che non l'ho ancora provato come non ho mai provato a
fare esperimenti con un GPS.
Queste domande/considerazioni vengono solo dopo aver guardato
il listato quindi non prenderla come una critica ma come domande di qualcuno
che non ha visto materialmente il tuo progetto.
Lcd e' in modalita' 8bit quindi Lcd Db0 collegata a Rb0 del pic fino ad 
arrivare
a Lcd Db7 collegata a Rb7 del pic. Giusto ?
Lcd E, RW, RS a Pic Ra2, 3, 4 Giusto ?
Il Gps penso sia collegato via seriale quindi presumo ci sia un max232 
collegato
ed usi Rc7 del pic per l'ingresso del segnale.
La porta Rc6 (tx) penso non la usi.
La porta Rc4 settata in uscita la setti High, perche' ?
La porta Rc5 e' settata in ingresso, perche' ?
Usi due pulsanti su Ra0 e Ra1, (reader tx e reader rx) quale e' lo scopo 
di questi due pulsanti ?
Ho letto che ci sono diversi sistemi di ricezione nel mondo dei GPS pensi
che questo rx posso funzionare con il tuo progetto ?
http://www.futuraelettronica.net/pdf_ita/8160-GPS910.pdf
Nel caso negativo mi puoi linkare a qualche sito GPS ?
Ti ringrazio
Roberto

Ci sono questi:
http://www.elettroshop.it/dettagli.asp?pid=669
http://www.areasx.com/index.php?D=1&page=articoli.php&id=8045
se cerchi con google: GPS EMBEDDED o GPS OEM, ne trovi un bel pò...
Ciao
Alex