Area SX srl - Informatica e Microelettronica
0
Torna a: Home Page Soluzioni Microcontrollori BasicX Interfacciare un ricevitore GPS con un Basicx 24

Interfacciare un ricevitore GPS con un Basicx 24

Data di pubblicazione: 14-06-2005 | Versione Italiana  | (No English Version)The English version of this article does not exists
Parole chiave: - BX24 - GPS - How-To -

L'articolo che segue mostra come collegare un ricevitore GPS RGM2000-RS232 ad un modulo BascicX 24 e fornisce il sorgente d'esempio, in basic, per effettuare il parser  delle informazioni ricevute dal GPS. 

Il modulo GPS della RoyalTek (http://www.royaltek.com/) RGM2000-RS232  è un completo ricevitore dotato di: antenna interna, interfaccia seriale RS232, connettore PS2; ed è compatibile con lo standard NMEA.
NMEA  lo standard che specifica: segnali elettrici, protocollo,  temporizzazione della trasmissione e gli specifici formati di dati detti "sentences" ovvero "frasi" per la comunicazione tra un sensore GPS ed un apparato elettronico come un PC o microprocessore. 

Maggiori informazioni sullo standard NMEA sono reperibili all'URL: http://www.nmea.org/pub/0183/

Il connettore PS2 del RGM2000-RS232, serve esclusivamente per fornire l'alimentare al ricevitore e l'interfaccia seriale. Infatti dai Pin 3 e 4 della porta PS2, tastiera o mouse, di un PC è possibile prelevare una tensione continua di 5V con una corrente massima di 500mA.
Di seguito è riportata la piedinatura di un connettore PS2 femmina:

1

-

Not Connected

2

RD

Receive Data

3

GND

Ground for voltage

4

VCC

+5 voltage  (max. 500mAmp)

5

-

Not Connected

6

TD

Transmit Data

Il circuito da realizzare, per collegare al BX24 e alimentare il ricevitore GPS, riportato di seguito è particolarmente semplice e non presenta alcuna difficoltà.

Nell'immagine che segue è possibile vedere come collegare le linee d'alimentazione a 5V alla presa PS2.

Il sorgente che segue effettua, dopo aver stabilito la connessione seriale sulla COM 3, il parser delle sentence con intestazione $GPGGA, estraendo: latitudine, longitudine e altitudine dal livello del mare.

Option Explicit
Const LEDon As Byte = 0
Const LEDoff As Byte = 1
Const LED_VERDE As Byte = 26
Const LED_ROSSO As Byte = 25
Const Pulsante As Byte = 5
Const PortNumber As Byte = 3  
Const TxPin As Byte = 17
Const RxPin As Byte = 16
Const BaudRate As Long = 4800

Public Const OutputBufferSize  As integer = 10
Public Const InputBufferSize  As integer = 80  '134

Public InputBuffer(1 To InputBufferSize) As Byte
Public OuputBuffer(1 To OutputBufferSize) As Byte

'APERTURA DELLA PORTA COM
Public Sub OpenSeriale()
  Call OpenQueue(InputBuffer, InputBufferSize)
  Call OpenQueue(OuputBuffer, OutputBufferSize)
  Call DefineCom3(RxPin, TxPin, bx0000_1000) 'Setta la seriale come inverted, no parity, 8 bits.   
  Call OpenCom(PortNumber, BaudRate, InputBuffer, OuputBuffer)
End Sub
'FUNZIONE PER RICEVERE UN BYTE
Public Sub GetByte( _
    ByRef Value As Byte, _
    ByRef Success As Boolean)

  Success = StatusQueue(InputBuffer)
  If (Success) Then
    Call GetQueue(InputBuffer, Value, 1)
  Else
    Value = 0
  End If
End Sub

'FUNZIONE DI LETTURA GPS
Public Function read_GPS( _
  ByRef latitude as string, _
  ByRef longitude as string, _
  ByRef altitude as string, _
  ByRef dir_lat as byte, _
  ByRef dir_lon as byte) as byte

  Dim Key As Byte
  Dim Success As Boolean 
  Dim sentence(5) as byte
  Dim start as boolean
  Dim i as byte
  Dim s as byte

 
'Legge solo la sentence $GPGGA
  sentence(0) = Asc("$")
  sentence(1) = Asc("G")
  sentence(2) = Asc("P")
  sentence(3) = Asc("G")
  sentence(4) = Asc("G")
  sentence(5) = Asc("A")
  s=0
 
i=0
  start = false
  latitude = ""
  longitude = ""
  altitude = ""
  Do  
    Call GetByte(Key, Success) 'Legge un carattere per volta dalla seriale
      if(Success) then
      'Se trova un $
      If (Key = 36) and (Not(start)) Then
        start = true 
      End if
      'Se trova uno o
      If ((Key = 13) or (Key = 10)) and (start)   Then
        start = false 
        read_GPS = 0
        exit function
      End if
      'Se trova un ,
      if(Key = 44) and (start) then
        If (i>15) then
          read_GPS = 0
          exit function
        End if
        i=i+1
      End if 
      if (start) and (Key <> 44)  Then
        if(i=0) then 'check sentence type
          if not(sentence(s)=Key) then
            read_GPS = 0 
            exit function
          End if
          s=s+1

        ElseIf (i=2) then
          latitude = latitude & chr(Key)
        ElseIf (i=3) then
          dir_lat = Key
        ElseIf (i=4) then
          longitude = longitude & chr(Key)
        ElseIf (i=5) then
          dir_lon = Key
        ElseIf (i=6) then
          if (Key = 48) then
            read_GPS = 1
            exit function 
          end if
        ElseIf (i=10) then
          if not(Key=77) then 'M
            read_GPS = 0
            exit function  
          End if
        ElseIf (i=11) then
          altitude = altitude & chr(Key) 
        ElseIf (i=12) then
          If (Key=77) then 'M
            read_GPS = 2
          Else
            read_GPS = 0
          End if
          exit function
        End if 
      End if   
    End if
  loop
End function

'----------------------
'MAIN
'----------------------
Public Sub Main()
  Dim res as byte
  Dim latitude as string
  Dim longitude as string
  Dim altitude as string
  Dim dir_latitude as byte
  Dim dir_longitude as byte

  Call OpenSeriale()
  Do
    Call Delay(0.1)
    Call PutPin(LED_ROSSO, LEDon)
    If (GetPin(Pulsante) = 1) Then
      Call PutPin(LED_VERDE, LEDon)
      res =  read_GPS(latitude,longitude,altitude,dir_latitude,dir_longitude)
      if (res > 1) then
        debug.print "Latitudine:"
        debug.print latitude
        debug.print chr(dir_latitude)
        debug.print "Longitudine:"
        debug.print longitude
        debug.print chr(dir_longitude)
        debug.print "Metri dal livello del mare:"
        debug.print altitude
      ElseIf (res = 1) then
        debug.print "Segnale non buono"
        Call PutPin(LED_ROSSO, LEDoff)
      ElseIf (res = 0) then
        debug.print "Sentence non valida"
        Call PutPin(LED_ROSSO, LEDoff)
      End if 
      Call PutPin(LED_VERDE, LEDoff)
    End if
  loop
End Sub

La funzione che si occupa di scaricare byte a byte la sentence inviata dal GPS è read_GPS

Public Function read_GPS( _
  ByRef latitude as string, _
  ByRef longitude as string, _
  ByRef altitude as string, _
  ByRef dir_lat as byte, _
  ByRef dir_lon as byte) as byte

questa ritorna un intero con i seguenti valori:

  • 0 di sentece non valida o non è del tipo $GPGGA.
  • 1 se il GPS trasmette sentence con livello di qualità 0 perchè non riesce a riceve il segnale dai satelliti.
  • 2 la sentence è valida e corretta.

Nella tabella che segue è descritta voce per voce la sentences $GPGGA

Campo     Formato     Esempio     Descrizione

1

hhmmss.ss

125642.57

Ora UTC  - GPS

2

llll.ll

4512.72

Latitudine della posizione attuale (numero di decimali variabile) es: 4531.47 = 45°31.47'

3

A

N

Emisfero della posizione attuale: N=Nord; S=Sud

4

yyyyy.yy

00934.88

Longitudine della posizione attuale (numero di decimali variabile) es:00917.21 = 009°17.21'

5

A

E

Verso della posizione attuale: E=Est; W=Ovest

6

n

1

Qualità del rilevamento GPS: 0=non valido; 1=GPS; 2=DGPS

7

x

8

Numero di satelliti in vista (teorica, non necessariamente in uso o ricevuti)

8

x.x

1.9

HDOP - Horizontal Dilution Of Precision

9

x.x

540.4

Altitudine dell'antenna GPS relativa al livello medio del mare (geoide)

10

A

M

Indicatore dell'unità di misura dell'altitudine M=metri

11

x.x

45.8

Altezza (separazione) del geoide (livello medio del mare) rispetto all'elissiode WGS84

12

A

M

Indicatore dell'unità di misura della separazione del geoide M=metri

13

x.x

8.0

Tempo in secondi dall'ultimo aggiornamento DGPS

14

nnnn

1023

Identificatore della stazione DGPS (0000-1023)

Sorgente in basic:

BX24_GPS_NMEA.zip

Link utili:

Sito RoyalTek http://www.royaltek.com/
Documentazione GPS RGM2000-RS232
Sito standard NMEA: http://www.nmea.org/pub/0183/

Segnala questo articolo: 



Parole chiave: - BX24 - GPS - How-To -

Data di pubblicazione: 14-06-2005Hits: 49797
I marchi citati sono propriet� dei titolari dei relativi diritti. Le caratteristiche tecniche e i prezzi riportati sono indicativi e soggetti a variazioni senza preavviso. Le foto non hanno valore contrattuale. Nonostante accurate verifiche, il presente documento pu� contenere prezzi o specifiche errati. Area SX si scusa in anticipo e si impegna ad evitare tali imprecisioni.

 Area SX store
In questa sezione puoi ordinare direttamente i prodotti descritti in questo articolo
RGM2000-RS232-M;BX24;BX24-BUNDLE5;SX18-BX24;BX24P;LCD+20X4;LCD+4x20;LCD16X2S;LCDX;SX18-BX24;SX18-BX24-Bundle
Tutti i prezzi indicati sono espressi in Euro con IVA e spese di trasporto escluse. I prezzi si riferiscono al singolo pezzo
DescrizioneCodicePrezzo
Per maggiori informazioniMicrocontrollore BasicX BX 24
Il BX24P è un potente microcontrollore programmabile in Basic, un linguaggio molto simile al Visual Basic. Dotato di 16 linee di I/O di cui 8 configurabili come ingressi AD a 10bit, multitasking, gestione matematica in virgola mobile, orologio di sistema, ecc.In ridottissime dimensioni il BX24P racchiude un completo sistema ideale per sviluppare velocemente le proprie applicazioni.
Il nuovo microprocessore BasicX 24P oltre a supportare un range di temerature industriale(da -40°C a +85°C), è nettamente più performate, infatti rispetto al modello precedente è ben il 29% più veloce e arriva ad eseguire fino a 83.000 istruzioni al secondo.


Prodotto compliant RoHs
BX24
Chiamare lo 06.99.33.02.57 per informazioni e prezzo del prodotto

Questo prodotto richiede un contatto diretto

Chiamare lo (+39)06.99.33.02.57 oppure inviare una email ad [email protected] per ulteriori informazioni
Per maggiori informazioniPer maggiori informazioni
 

Rivenditori Social Contatti Condizioni
Area SX s.r.l
Via Stefano Longanesi 25
00146 Roma

Tel: +39.06.99.33.02.57
Fax: +39.06.62.20.27.85
P.IVA 06491151004
Condizioni di vendita
Procedura di rientro in garanzia
Condizioni per i rivenditori