Dernière mise à jour :
04/12/2016
Présentation
Ce générateur à base de PIC 16F628A permet de délivrer des trames
NMEA-0183. Je l'ai développé pour faciliter les tests en
simulation d'un
système de réception de données GPS/NMEA, mais il peut aussi bien sûr
être utilé en phase de prototypage.
Moins encombrant qu'un récepteur GPS, plus rapide à démarrer et
utilisable dans un abri anti-atomique. Mais moins "temps réel" et moins
évolué que des outils de simulation logiciels complets tel que SatGen,
c'est sûr. Voir aussi page
Afficheur GPS/NMEA 001.
Avertissement
Le
schéma que je présente ici délivre des trames au format TTL (0V / +5
V). Pour une utilisation avec un circuit doté d'un port RS232 standard,
il convient d'ajouter une interface TTL/RS232, avec un MAX232 par
exemple. S'il s'agit de vérifier la bonne marche d'un microcontrôleur (ce pourquoi je l'ai fait)
point besoin d'interface additionnelle, on peut relier directement la
sortie du générateur de trames à l'entrée Rx du microcontrôleur décodeur - à
condition bien évidement de respecter les niveaux électriques imposés
par l'alimentation générale des deux parties (dans mon cas c'était du +5 V partout).
Schéma
Beaucoup de bla-bla sur le schéma, mais au final pas beaucoup de composants autour du PIC.
Types de trame
Le type de trame est défini par la position des
quatre microswitches DSW1 reliés aux lignes RB4 à RB7 du
PIC.
Quand ces lignes sont en l'air (switches DSW1 ouverts) leur état
logique est porté à l'état haut par les pullup internes du PIC.
- RB7=0 et RB6=0 et RB5=0 et RB4=0 => GGA
- RB7=0 et RB6=0 et RB5=0 et RB4=1 => RMC
- RB7=0 et RB6=0 et RB5=1 et RB4=0 => VTG
- RB7=0 et RB6=0 et RB5=1 et RB4=1 => GSA
- RB7=0 et RB6=1 et RB5=0 et RB4=0 => GSV
- RB7=0 et RB6=1 et RB5=0 et RB4=1 => non utilisé
- RB7=0 et RB6=1 et RB5=1 et RB4=0 => non utilisé
- RB7=0 et RB6=1 et RB5=1 et RB4=1 => non utilisé
- RB7=1 et RB6=0 et RB5=0 et RB4=0 => non utilisé
- RB7=1 et RB6=0 et RB5=0 et RB4=1 => non utilisé
- RB7=1 et RB6=0 et RB5=1 et RB4=0 => non utilisé
- RB7=1 et RB6=0 et RB5=1 et RB4=1 => non utilisé
- RB7=1 et RB6=1 et RB5=0 et RB4=0 => non utilisé
- RB7=1 et RB6=1 et RB5=0 et RB4=1 => non utilisé
- RB7=1 et RB6=1 et RB5=1 et RB4=0 => non utilisé
- RB7=1 et RB6=1 et RB5=1 et RB4=1 => Bloc de trames
Sur
le schéma ci-avant, les quatres interrupteurs DSW1 sont fermés, le
générateur délivre donc des trames GGA. Quand tous les interrupteurs
sont ouverts (lignes RB4 à RB7 à l'état haut) alors la pression de SW1
provoque l'envoi d'une série complète de trames qui correspondent à
l'état d'un récepteur GPS pas encore "fixé".
Série complète de trames obtenue en un coup L'envoi des données peut se faire de deux façons :
- au coup par coup, par une pression brève sur le bouton-poussoir SW1;
- en mode continu, toutes les secondes, si SW1 est maintenu pressé (ou court-circuité par un interrupteur).
Quel
que soit le mode adopté, les trames qui se suivent diffèrent entre
elles, le but étant de vérifier si le récepteur/décodeur fonctionne
bien. Comme on ne peut pas non plus stocker 5000 trames différentes
dans le 16F628A, on tourne forcément en boucle au bout d'un moment. Si
le besoin s'en fait sentir à l'avenir, je remplacerai le 16F628A par un
16F648A ou autre pavé de taille respectable. La valeur de checksum
placée à la fin de chaque trame (après le caractère "*") est valide,
sauf pour une (et une seule) trame de la série.
C'est bien sûr voulu, le but étant de vérifier si cette
trame invalide est bien rejetée par le récepteur/décodeur
(dans le cas bien sûr où le
checksum est utilisé, ce qui n'est pas obligatoire mais vivement
conseillé). Les trames émises en ASCII par ce générateur ont la
forme suivante (exemple pour une trame GGA) :
$GPGGA,064036.289,4836.5375,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*0E[13][10]Les valeurs entre crochets sont des caractères non imprimables qui correspondent ici au classique couple CR+LF ($0D+$0A).
Remarque : le checksum est obtenu en faisant un "ou exclusif" (XOR)
entre chaque caractère émis entre les symboles "$" et "*".
Il
n'y a pas un très grand nombre de trames différentes (limite du PIC,
que je pourrais remplacer par un 16F648A) mais cela suffisaitt pour mes
tests.
Vitesse de transmission des trames (baudrate)
La
vitesse de transmission est définie à la mise sous
tension du système, et dépend de l'état logique appliqué
aux lignes RA1 et RA2 du PIC.
- RA2=0 et RA1=0 => 4800 bps
- RA2=0 et RA1=1 => 9600 bps
- RA2=1 et RA1=0 => 19200 bauds
- RA2=1 et RA1=1 => 38400 bauds
Oui, je sais qu'on peut aller plus vite et qu'il reste des broches libres sur le PIC ;-)
Logiciel du PIC
Fichier binaire compilé *.hex à flasher dans le PIC disponible dans l'archive zip
ci-après
Générateur GPS-NMEA 001 - 16F628A - (04/12/2016)
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC
- Sources.
Circuit imprimé
Non réalisé.
Historique
04/12/2016
- Première mise à disposition.