Newsgroup: it.hobby.elettronica.digitale
Titolo: GPS e PIC

Ciao a tutti,
ho trovato questo progetto
http://www.qsl.net/iw2bc/disp_gps.html
che visualizza i dati ricevuti da un GPS (NMEA a 4800  baud) con un pic 
16f84, clock 4MHz, un lcd 16X2 ed un max232
Nel link c'č anche il software .hex e .asm, ho provato a costruire il 
circuito ma non funziona.
Ora con software piů semplici, inviare delle stringhe, pic e lcd funzionano, 
ma mi sono accorto che il pic non fa in tempo a ricevere tutti i caratteri 
inviati. Se metto un ritardo tra un carattere e l'altro (20 ms) il pic li 
riceve correttamente.
Quindi ho dedotto che il problema sta nel pic, cioč non fa in tempo a 
elaborare l'NMEA (caratteri ascii).
Tenendo presente che il ciruito č costruito correttamente, l'errore secondo 
voi dove sta?
Grazie, Giň.

Ciao, io sono Alessandro Saitta di 36 anni a Follonica(GR) in via
Cassarello, 131. Vieni di corsa a visitare il mio sito a
http://alexsaitta.tripod.com/index.htm
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 elaborare l'NMEA (caratteri ascii).
mi appendo a questo messaggio per chiedere se qualcuno dispone della
documentazione per i comandi NMEA, ho interesse ad inserire un GPS ad un mio
progetto hobbistico ma ho trovato solo documentazione parziale e mi serviva
quindi il trattato originale che l'organizzazione invia solo a pagamento.

Per la serie "Mai più senza"
mo va cagher !
"mirco" <m@r.c> ha scritto nel messaggio 
news:151Z35Z118Z160Y...@usenet.libero.it...


Comandi ?
Se cerchi le specifiche dei messaggi NMEA puoi trovare
qui 
http://www.mobit.com/ntNMEA.html
 cosa significano i vari messaggi che il 
GPS genera come $GPGGA...,$GPRMC...
ecc ecc. Comunque con google ne trovi a tonnellate.
Se per "comandi" intendi dei messaggi da inviare al GPS per impostarlo, 
questi sono praticamente sempre proprietari e li
trovi nei siti dei produttori del chip GPS.
Tenendo presente che la maggior parte dei GPS consumer sono equipaggiati con 
chip SIRF sempre so google si dovrebbe trovare documentazione.
Spero di esserti stato utile, Giò. 

Questo link è un po' più completo con alcune impostazione proprietarie
http://www.gpsinformation.org/dale/nmea.htm#proprietary

> A suo tempo avevo provato a realizzare il circuito in questione ed anche > a
me non aveva funzionato al primo colpo.
...
mesą ci conosciamo vero?!
:)
coals
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
http://alexsaitta.tripod.com/index.htm
Non ho parole!

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

Ciao Max
innanzitutto grazie per la disponibilità.
Prenderò e studierò il pic 16f876. Però mi manca il circuito.
Hai qualche link?
Che compilatore suggerisci?
Grazie ancora, Giò.

Riposto il mio messaggio del thread 'Pic Mikrobasic e Gps'.
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
http://www.futurashop.it/allegato/8160-BR305.shtml
Nel caso negativo mi puoi linkare a qualche sito GPS ?
Ti ringrazio
Roberto