Cachan1 Murphy

download Cachan1 Murphy

of 77

Transcript of Cachan1 Murphy

Universit Paris-Sud IUT de Cachan Dpartement Geii-1 Parcours ROBOS Anne 2010

Rapport de projet de semestre S4

Robot Vierzon

Tl-transmission ZigbeeComment rcuprer les informations du robot lorsqu'il suit la ligneAlexandre Martins

Date de rception au secrtariat pdagogique : .../.../.... ..h.. Impression : 05/04/10

Table des matiresRsum du projet.......................................................................................................................................................2 Abstract.....................................................................................................................................................................2 Mots-cls ..................................................................................................................................................................2 Introduction...............................................................................................................................................................2 1. tude de deux protocoles utiliss dans le projet...................................................................................................2 1.1. Le Zigbee, une liaison efficace et peu gourmande en nergie............................................................................3 1.2. Le bus CAN, un bus de donne rapide, pratique et robuste...............................................................................3 2. La gestion des protocoles utiliss est prise en charge par deux composants.........................................................5 2.1. Le module Xbee permet de transporter une donne reue en UART via Zigbee...............................................5 2.2. Le microcontrolleur 9S12C128, centre dcisionnel et relai de l'information.....................................................8 3. La carte de tl-transmission, petite et indicative..................................................................................................9 3.1. Le bus CAN comme source d'nergie..............................................................................................................10 3.2. Une carte deux niveaux de tension implique deux niveaux de signaux.........................................................11 3.3. Une multitude de L.E.D pour indiquer le statut de la carte..............................................................................12 4. Programmation du microcontrolleur...................................................................................................................12 4.1. Envoyer des donnes en UART vers le module Xbee.....................................................................................13 4.1.1. Initialisation du module srie........................................................................................................................13 4.1.2. Programme d'envoi des informations en UART avec utilisation des interruptions.......................................14 4.2. Surveiller et recevoir les donnes provenant du bus CAN...............................................................................15 5. Programme de rception et enregistrement des donnes reues sur le PC..........................................................15 6. Retour sur l'avance du projet.............................................................................................................................18 Conclusion...............................................................................................................................................................18 Annexe.....................................................................................................................................................................19

Rsum du projetLe but de ce projet est de pouvoir rcuprer en temps rel (c'est dire alors que le robot est en activit) le maximum d'informations du robot de Vierzon lorsque celui-ci suit la ligne en comptition. Pour cela nous avons raliser une carte sous protel qui sert relayer les informations rcupres sur le bus CAN du robot et les envoi via une carte Xbee (utilisant le protocole Zigbee) sur un PC quip d'un rcepteur o un programme rcuprera et stockera les informations reues du robot. Cela nous permettra ainsi de pouvoir reprer d'ventuels problmes ou simplement de retracer le trajet et comportement du robot durant son parcours.

AbstractThe goal of this project is to retrieve in realtime (bu realtime we mean while the robot is folowing the line) the maximum of informations about the ligne folower robot of the Vierzon competition. In order to achieve this we have to create hardware and software pieces. The hardware part is used to retrieve data from the CAN network and transmit it to the Xbee module (which uses the Zigbee protocol). The software part in the hardware with a MCU and another part is used in the computer to receive and store the data received. This project will allow us to debug potential anomalies or just reproduce the robot's ride.

Mots-cls

bus CAN Zigbee tl-transmission Dbuggage Liaison sans fil Indpendant

IntroductionLe robot Vierzon est constitu d'une multitude de cartes indpendantes relies pour la plupart par le bus CAN dont la fonction est de permettre au robot de suivre une ligne blanche et raliser diverses actions (tourner sur luimme, laisser une priorit...) de faon autonome et le plus efficace possible. Cependant des erreurs peuvent sur venir durant le parcours et le robot tant autonome (c'est dire que son centre dcisionnel est embarqu et qu'il ne communique pas avec l'extrieur durant son parcours) il est difficile de savoir d'o peut provenir cette erreur. Deux manires de rcolter des informations s'offrent alors nous, la transmission distance en temps rel (c'est dire lorsque le robot est encore en activit sur la piste) ou le stockage sur un support interne au robot (mmoire flash, carte SD...). Nous avons ici choisi la transmission distance. La vise du projet de tl-transmission est d'apporter au robot suiveur de ligne du concour Vierzon un moyen d'envoyer vers un terminal extrieur les informations qui transitent dans celui-ci et influent dans le comportement du robot sur la piste. Ceci est fait lorsqu'il est prsent sur la piste et nous permet en suivant en mme temps le ro bot et le terminal o on reoit les informations (un PC distant) de pouvoir trouver immdiatement d'o peut pro venir l'erreur de jugement du robot et pouvoir ainsi ensuite la corriger. Pour la ralisation de cette fonctionnalit nous allons dcouper le projet en trois parties: une partie hardware (la carte qui permettra la liaison) et deux parties software (une sur la carte cre et l'autre sur le terminal de rception). Cependant avant de se plonger dans le sujet nous allons tout d'abord introduire les protocoles utiliss dans ce projet.

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 2

1. tude de deux protocoles utiliss dans le projetNous utilisons deux protocoles principaux dans ce projet, un protocole sans fil, le Zigbee. Celui-ci a t choisi car il ncessite peu d'nergie afin de fonctionner (comme cela l'ajout de la carte de tl-transmission n'influera que peu sur la puissance disponible pour le robot) ainsi que le bus CAN, bus de terrain qui permet aux diffrentes cartes qui composent le robot suiveur de ligne de dialoguer entre elles (vitant ainsi une multitude de fils).

1.1. Le Zigbee, une liaison efficace et peu gourmande en nergieLe nom ZigBee signifie Zig Zag like a bee , c'est un protocole de haut niveau (au mme titre que le FTP, HTTP, etc). Il permet de petites radio de communiquer sur de faibles distances. Ce protocole est utilis dans des radio consommation rduite. Il est base sur la norme IEEE 802.15.4 pour les rseaux dimension personnelle ou Wireless Personal Area Networks (WPANs). Les spcifications de ZigBee 1.0 sont disponibles auprs des membres de la communaut industrielle ZigBee Alliance. Bien que le protocole Zigbee soit apparu en 1988, ses spcifications ont t ratifies le 14 dcembre 2004. Les publications officielles du protocole Zigbee ont t diffuses en juin 2005 et sont disponibles en libre tlchargement sur le site de la Zigbee Alliance. On retrouve ce protocole dans des environnements o la consommation est un critre de slection. Il est ainsi trs utilis en domotique mais aussi dans les contrles industriels, les applications mdicales, les dtecteurs de fume et dintrusion... A titre indicatif, certains nuds Zigbee sont conus pour fonctionner plusieurs mois en autonomie complte grce une simple pile alcaline de 1,5 V. Le but du dveloppement de ce protocole est de proposer une liaison sur de courtes distances de faon plus simple que les autres solutions actuelles (principalement le bluetooth et Wifi).1. Comparatif des caractristiques des trois systmes de transfert de donne sans fil: Protocole IEEE Besoins mmoire Autonomie avec pile Nombre de nuds Vitesse de transfert Porte Zigbee 802.15.4 4-32 Kb Annes 65000+ 250 Kb/s 100 m Bluetooth 802.15.1 250 Kb + Jours 7 1 Mb/s 10-100 m Wi-Fi 802.11a/b/g/n/n-draft 1 Mb + Heures 32 11-54-108-320 Mb/s 300 m

Lors de ce projet nous utilisons une carte Xbee, celle-ci permet d'mettre les donnes qu'elle reoit sous format UART en utilisant le protocole Xbee. Pour de plus amples informations merci de vous rfrer la partie 2.1 de ce document.

1.2. Le bus CAN, un bus de donne rapide, pratique et robusteLe bus CAN (Controller Area Network) est un bus dit de terrain (car son fonctionnement doit tre assur dans des conditions difficiles) dvelopp par Bosch (grand quipementier automobile) durant les annes 80. Il s'agit d'un bus srie (c'est dire que les informations y sont transmises bit par bit). Ce bus est celui utilis dans le robot Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 3

pour permettre la communication entre les diffrentes cartes composant le robot. La mise en place de ce bus est dsormais peu couteuse du fait de sa large diffusion de plus il s'agit d'un moyen de transporter les donnes robuste, rapide et efficace tout en utilisant un systme de priorit dans les informations y circulant. La dfinition du bus CAN ne comporte pas de support physique prcis, ici nous avons choisi d'utiliser une ligne diffrentielle. Cette ligne est constitue de deux fils termins par une rsistance de 120 ohms qui les relient. Chaque carte du robot reprsente un noeud (node en anglais) sur le bus, chaque noeud tant indpendant et pouvant tre dconnect du rseau sans influencer son fonctionnement.

Figure 1. Implmentation physique du bus CANsource: http://mk3000.free.fr/ L'information circulant sur chacun le second fil est l'oppos de celle circulant sur le premier fil, ainsi par sous traction des niveaux entre les deux fils on peut liminer la majorit des parasites sur la ligne (en supposant que les deux fils sont soumis aux mmes interfrences).

Figure 2. Principe de la ligne diffrentiellesource: http://www.oberle.org/ La vitesse de transfert d'information sur le bus CAN est de 1Mbits/sec. On assigne au pralable chaque information un ID, cet ID nous renseigne sur la nature de l'information (et donc Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 4

souvent sur sa provenance) ainsi que sur sa priorit. Le bus possdant un niveau dominant (0) et un niveau rces sif (1), le plus petit ID aura donc priorit sur un ID numriquement suprieur (du fait du nombre debits rcessifs dont son ID est compos). Voici a titre indicatif la forme d'une trame circulant sur le bus CAN:2. Constitution d'une trame circulant sur le bus CAN:

2. La gestion des protocoles utiliss est prise en charge par deux composantsBien que nous utilisons le protocole Zigbee et CAN, leur utilisation est plus ou moins transparente dans le projet tant donn qu'ils sont pris en charge par des composants ddis, nous allons ici vous faire un descriptif des composants utiliss dans ces deux liaisons (Zigbee et bus CAN).

2.1. Le module Xbee permet de transporter une donne reue en UART via ZigbeeAfin de permettre l'envoi via Zigbee des informations receuillies sur le bus CAN nous utilisons le module Xbee dvelopp par Digi.

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 5

Figure 3. Carte Xbee dveloppe par DigiBien que ce module ne possde de nombreux convertisseurs analogique-numrique ou des entres pour PWM, dans notre cas il ne nous sert qu'au relai de l'information reue via le bus CAN sur le robot jusqu' l'ordinateur en utilisant une liaison sans fil Zigbee. L'avantage de cette carte est sa petite taille (elle pourra donc facilement trouver une place sur le robot) mais elle est aussi totalement indpendante. Nous n'utiliseront ici que 5 de ses pin de sortie, nous y reviendrons plus tard dans cette partie. Le module Xbee envoi automatiquement par Zigbee les informations qu'elle reoit en UART sur son entre Xbee IN. La vitesse de transfert maximale est de 11500 Bauds (le module Xbee sur l'ordinateur dialoguant par liaison s rie, le baud est utilis comme unit de mesure). Nous utilisons une Xbee PRO dont la porte maximale (d'aprs le datasheet) est de 1500m en terrain dgag et 100m en milieu urbain, chose qui est plus que raisonnable pour notre utilisation.Lors des test de porte dans l'IUT le module pu mettre entre les salles HA2 et HC3 avec un niveau de signal maximal ce qui reprsente une distance bien suprieure celle de Vierzon.

Figure 4. Numrotation des pin du module Xbeesource: Datasheet du module Xbee

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 6

Figure 5. Utilisation des pin du module Xbeesource: Datasheet du module Xbee Pour notre application nous n'aurons besoin que de quatre (voir cinq) pin:

VCC (1) pour alimenter la carte GND (10) pour alimenter la carte DIN (3), cela nous permettra d'envoyer au module les informations transmettre RSSI (6), afin d'extrapoler le niveau du signal Xbee entre le rcepteur et notre carte (il s'agit d'une PWM) Associate (15), led d'association Xbee elle nous permettra de savoir si le module est associ un autre ou non. Optionnel DOUT (2), afin de recevoir des informations via Zigbee sur notre carte (en vue d'une utilisation dtourne du projet).

L'envoi des donnes vers la carte Xbee ici se fera via une liaison UART, les informations envoyer par liaison Zigbee sont relayes depuis le microcontrolleur jusqu' la pin DIN (3).

Figure 6. Les niveaux de la liaison UART avec le module Xbeesource: Datasheet du module Xbee Le niveau au repos de la ligne est le niveau haut, chaque trame doit contenir un bit start (niveau bas), 8 bits de Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 7

donne, pas de bit de parit et un bit stop (niveau haut) comme indiqu sur ce schma: J'ai choisi de ne pas utiliser CTS (Clear To Send) et RTS (Request To Send) afin de simplifier le routage au ni veau du microcontrolleur et de prendre en considration la taille des buffer d'envoi et de rception du module Xbee dans le programme implment sur le microcontrolleur.

Figure 7. Utilisation typique de la liaison UART avec le module Xbeesource: Datasheet du module Xbee

2.2. Le microcontrolleur 9S12C128, centre dcisionnel et relai de l'informationLa carte de tl-transmission ncessite un microcontrolleur afin d'assurer le relai entre le module Xbee (voir 2.1) et le bus CAN du robot. Il permettra la rception des donnes nous intressant sur le bus CAN, la mise en forme (suppression des informations inutiles dans la trame, ajout de l'ID de la trame aux donnes pour transmission) et le relai des informa tions vers la carte Xbee via une liaison UART (liaison srie). A cot de cela il nous permettra d'assurer la gestion des LED de statut sur la carte de tl-transmission (voir partie 3.3) en les allumant par programme (L.E.D d'envoi et de rception d'information du module Xbee) ou en transcrivant la PWM de niveau de signal issue du module Xbee. Pour cela le microcontrolleur doit disposer d'au moins un module CAN, un module srie et de 5 sorties logiques (pour les LED). Le microcontrolleur utilis est le freescale (anciennement motorolla) 9S12C128, il prsente toutes les caractris tiques ncessaires et prsente l'avantage de fonctionner comme le 9S12DP256 que j'ai l'habitude d'utiliser l'IUT.

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 8

Figure 8. Pin du microcontrolleur 9S12C128source: Datasheet du microcontrolleur 9S12 Le bus CAN sera ainsi connect aux pins 44 et 45 (pins du module CAN du microcontrolleur), le module Xbee (liaison UART) seront relis aux pins 38 et 39 (pins du module srie). Nous devrons faire attention de bien connecter toutes les alimentations aux tensions d'alimentation correspondantes: Les pins 16,35 et 47 devrons tre connectes VCC soit +5V La pin 6 doit tre connecte Vpll et la pin 18 V1. Ces deux tensions de rfrence sont obtenues grce au montage suivant:

Figure 9. Montage afin d'obtenir les tensions de rfrence du 9S12C128Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 9

Une erreur remarque que bien trop tard lors de la conception de la carte est l'emplacement des condensateurs de dcouplage du microcontrolleur. En effet un plan dtaill est fourni par le constructeur concernant la disposition et le nombre de condensateurs de dcouplage recommands pour le 9S12C128. Notons que nous devons utiliser un transceiver de ligne afin d'utiliser le bus CAN (celui-ci se charge de la mise niveau des signaux issus du microcontrolleur pour les adapter au niveau de la ligne). Le composant utilis pour cela est le MCP2551

3. La carte de tl-transmission, petite et indicativeMaintenant que nous avons abord les deux points principaux de la carte de tl-transmission savoir le module Xbee et le microcontrolleur, nous allons nous attarder sur des points importants sur cette carte.

Figure 10. la carte de tZigbee

Photographie de l-transmission

Carte Xbee LM2937-3.3 Connecteur CAN

LED Check LEDs 74LS07

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 10

de Niveau

LED data out LED data in MCP2551

Figure 11. PCB de la carte de tl-transmission ZigbeeLe schma de cblage complet de la carte est disponible en annexe

3.1. Le bus CAN comme source d'nergieLa carte de tl-transmission prsente l'avantage de ne pas ncessiter de connecteur d'alimentation extrieur. En effet, la masse et l'alimentation VCC=+5V proviennent directement du bus CAN cela t possible car la carte n'utilise que des faibles tensions pour son fonctionnement.

Figure 12. Cblage du connecteur micro-match (bus CAN)La tension d'alimentation du microcontrolleur ainsi que la liaison la masse du robot est donc assure par le biais du bus CAN. Cependant le module Xbee fonctionne avec une tension maximale de 3.3V. Afin de pouvoir alimenter le module Xbee partir de VCC j'avais choisi d'utiliser un LM337, ce composant permettant de choisir le niveau de tension en fixant les rsistances qui lui sont associes. Par soucis de place et de prcision de la tension d'alimentation du module Xbee j'ai finalement choisi un LM2937-3.3 car celui-ci est disponible en CMS et nous permet d'obtenir une tension de sortie stable de 3.3V avec seulement deux condensateurs pour des tensions maximales d'entre bien suprieures celle prsente sur le bus CAN (protection pour des tension d'entre maximale de +60V/-50V d'aprs le datasheet). Ce rgulateur permet d'obtenir un courant de sortie de 400mA maximum, sachant que la consommation maximale du module Xbee est de 215mA en mission, cela laisse une certaine marge.

Figure 13. Cblage du LM2937-3.3Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 11

3.2. Une carte deux niveaux de tension implique deux niveaux de signauxUne carte avec deux tensions d'alimentation pose aussi le problme de niveau des signaux qui transitent entre les composants aliments deux niveaux de tensions diffrents. C'est le cas ici entre le microcontrolleur et le module Xbee, le niveau haut en sortie du microcontrolleur (+5V) n'tant pas support par le module Xbee (dont la tension maximale supporte en entre est de 3.4V d'aprs le datasheet) et le niveau haut en sortie du module Xbee tant dans la zone indtermine du microcontrolleur nous allons devoir adapter les niveaux de tension entre les deux composants. Pour cela plusieurs pistes ont t suivies (montage avec AOP, transistor, pont diviseur de tension...), deux montages ont t retenu. Pour les donnes dans le sens microcontrolleur Xbee nous avons choisi d'utiliser un montage simple avec une diode zener 3.3V afin d'abaisser le niveau de tension du signal (voir figure 14 droite). Aprs mesure des niveaux, cette diode t remplace par une diode zener de 3.9V, la diode de 3.3V n'autorisant un niveau haut en sortie de 2.1V alors que la nouvelle nous permet d'obtenir les 3.3V dsirs.

Figure 14. Montage de changement de tension (avec diode zener et 74LS07)Dans le sens oppos (Xbee microcontrolleur) j'ai choisi d'utiliser une porte logique collecteur ouvert. J'ai donc pris un 74LS07 (porte OUI) qui ne modifie pas le signal en entre et me permet de fixer le niveau de tension en sortie grce des rsistances de pull-up relies VCC=+5V. J'ai au pralable vrifi la compatibilit des niveaux entre le module Xbee, le microcontrolleur et la porte logique. VOH (Xbee) = VCC 0.5 = 2.8V VIH (porte) = 2V VOL (Xbee) = 0.5V VIL (porte) = 0.8V Ces deux systmes simples permettent de rgler le problme d'incompatibilit des niveaux d'entre/sortie des composants.

3.3. Une multitude de L.E.D pour indiquer le statut de la carteUn point aborder rapidement est l'utilit et le cblage des LED prsentes sur la carte car ce sont elles qui per mettrons de voir en jeter un coup d'il la carte le statut de celle-ci. La carte de tl-transmission prsente au total 7 LED: Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 12

3 LED de niveau de signal 1 LED indiquant l'envoi de donnes du bus CAN vers le module Xbee 1 LED indiquant la rception de donne depuis le module Xbee 1 LED indiquant le fonctionnement du microcontrolleur 1 LED indiquant le statut d'association du module Xbee

Toutes les LED de la carte sont cbles de la mme faon et au microcontrolleur, sauf la LED d'association qui est alimente en 3.3V et directement rattache au module Xbee. Les rsistances sont associes une rsistance de pull-up et branches l'entre d'un port du microcontrolleur programm en sortie (voir figure 15), ainsi lorsque le port est au niveau bas, la LED associe s'allume, dans le cas contraire (niveau haut), la diffrence de tension est nulle entre VCC et le port, aucun courant ne circule la LED reste donc en tat bloqu et ne s'allume pas.

Figure 15. Cblage des L.E.D de la carte de tl-transmissionLes LED sont allumes ou teintes dans le programme, l'exception de la LED d'association comme nonc prcdement. Les LED de niveau de signal sont aussi une exception car leur allumage est conditionn par le rapport cyclique du signal issu du module Xbee (RSSI) indiquant le niveau de signal (voir partie 2.1)

4. Programmation du microcontrolleurAvoir une carte fonctionnelle ne reprsente que la moiti du projet. En effet sans programmation du microcontrolleur la carte de tl-transmission ne serait qu'une carte alimentant le module Xbee avec la LED d'association qui clignoterai mais aucune donne ne serait transmise via Zigbee. On peut dcouper ce programme en deux paties principales, une partie servant envoyer via une liaison srie les donnes vers le module Xbee et une autre qui se chargera de surveiller et rcuprer les trames d'intrt sur le bus CAN.

4.1. Envoyer des donnes en UART vers le module XbeeLe microcontrolleur 9S12C128 comporte dj un module de liaison srie. Dans le programme il ne nous reste plus donc qu' initialiser ce module et l'utiliser. 4.1.1. Initialisation du module srie Afin d'utiliser la liaison srie du microcontrolleur il njous suffit d'initialiser quelques registres du module srie (afin de fixer le baudrate, les informations sur la trame tel que le nombre de bit de donne...) ainsi que le module timer (puisque nous utilisons les interruptions afin de ne pas utiliser de fonctions bloquantes sur le microcontrol leur). Le Baudrate est fix la valeur maximale (par test rel durant les scances d'E&R) supporte par le module Xbee savoir 115200 Bauds. Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 13

La valeur de SCIBDL est fix grce la formule prsente dans le datasheet du microcontrolleur:

Dbit =

Fclk (1) Equation de calcul de SCIBDL 16SCIBDx

Nous avons un quartz de 10Mhz adapt sur la carte, le rsultat du calcul est donc SCIBDL=2.71, J'ai donc arrondis 3./* FUNCTION NAME: RS232_init * DESCRIPTION * * RETURN * PARAMETER */ void RS232_init (void) { SCIBDH = 0x00; SCIBDL = 0x03; SCICR1 = 0x04; SCICR2 = 0x08; SCISR2 = 0x02; } // Baudrate de 115200: 0x03 (valeur exacte:2.71) // // Module d'emission seulement activ // Broche TXD en mode sortie : Initialise la liaison serie a 115200b/s, 8 bits, parite paire, interruptions activees en emission : void 1 : void

void initialisation_port(void) { asm{__cli;} DDRT = 0xFF; // Port T en sortie TIOS &= ~0x07; //Input capture pour T0 T1 T2 TSCR1 |= 0x80; //Active le bloc de timer TCTL4 |= 0x3F; //Activation chaque fronts montants et fronts descendants TIE |= 0x07; //Activation des interruptions sur les channels 0,1 et 2

TSCR2 |= 0x06; // Rglagle du prescaler 2^6=64 }

4.1.2. Programme d'envoi des informations en UART avec utilisation des interruptions Les fonctions d'envoi de donnes sont au nombre de deux. La fonction RS232_snd_msg est appele dans le programme main ou une sous-fonction. Le message a envoyer est indiqu en paramtre. Dans cette fonction copie le message envoyer dans un tableau (buffer) et active les interruptions sur le microcontrolleur.

/* FUNCTION NAME: RS232_snd_msg * DESCRIPTION * RETURN * PARAMETER */ : Ralise l'mission d'un message termin par le caractre '\0'. : void 1 : INT8U* chaine de caractre a envoyer

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 14

void RS232_snd_msg (INT8U* chaine) {

char cpt=0; while (chaine[cpt]!='\0') { buffer[cpt]=chaine[cpt]; cpt++; } buffer [cpt+1] = '\0'; SCICR2 |= 0xC0; //TCIE et TIE =1 (activation des interruptions)

}

Une fois les interruptions actives, la fonction RS232_sc est appele chaque fin d'envoi d'un caractre de la chaine jusqu' ce qu'on atteigne la fin de la chaine (reprsente par le caractre '\0') o les interruptions sont de nouveau dsactives.interrupt SCI0_ISR void envoi_de_caractere(void) { RS232_sc (); }

/* FUNCTION NAME: RS232_sc * DESCRIPTION * RETURN * PARAMETER */ void RS232_sc (void) { static char i=0, tmp=0; if ((SCISR1 & MASK_TDRE) == MASK_TDRE) { if (buffer[i]!='\0') { if (i==0) PTT &= ~MASK_LED_OUT; : Ralise l'envoie d'un caractre ASCII sur la liason srie : void : void

SCIDRL=buffer[i]; i++; } else { i=0; PTT |= MASK_LED_OUT; SCICR2 &= ~0xC0; } // Dsactivation des interruptions

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 15

} }

4.2. Surveiller et recevoir les donnes provenant du bus CANLes fonctions utilises pour surveiller le bus CAN n'ont pas encore t crites l'heure de l'criture de ce rapport. Le module de bus CAN du microcontrolleur sera utilis afin de raliser cette tche.

5. Programme de rception et enregistrement des donnes reues sur le PCUne fois les donnes envoyes du robot, un rcepteur USB peut-tre branch sur le PC, il s'agit simplement d'une carte Xbee connecte une carte fournie dans le starter kit Zigbee de Digi. La rception des donnes se fait par le biais d'un port COM virtuel (port srie virtuel), il suffit donc de rcuprer les trames circulant sur ce port virtuel et les stocker dans un fichier. J'ai choisi de stocker les informations reues sous deux formes: .txt pour une lecture visuelle et .csv pour l'affichage sous forme de tableau. Lors de la rception d'informations, la date est ajoute avant le message puis cris dans le fichier. Voici un bref descriptif des fonctions du programme, l'intgralit de celui-ci est prsente en annexe./*--------------------------------------------------------------------------*/ /* Variables globales */

/*--------------------------------------------------------------------------*/

int comport = 7, baudRate = 115200, parity = NON, dataBits = 8, stopBits = 1, xonXoff = NON, timeout = 10,

// No du port COM // Baudrate // Bits de parits (0 = aucun) // Bits de donne // Nombre de bits stop // Spcifie si le mode Xon Xoff est utilis // Temp de latence (en secondes)

readCount = 499, // Nombre de bits a prendre en compte dans le message (avant de quitter la fonction de lecture) readTerm = 13, riage return CR = 13; ou linefeed LF = 10) portOpen = 0, bytesRead = 0, comStatus = 0, rs232Error, inputQueue = 500, outputQueue = 500; // Dtermine le caractre de fin de trame (car// Port COM ouvert (1) ou non (0) // Nombre de bits lus // Status du port COM // Variable en cas d'erreur // Taille du buffer de reception // Taille du buffer d'mission

char readData[500], com_msg[500], deviceName[10]= "COM7", date[10];

// Tableau avec le message recu

// Nom du port COM

FILE *fichier_txt; FILE *fichier_csv; gules) time_t heure;

// Pointeur vers le fichier txt // Pointeur vers le fichier csv (spars par vir// Variable de type time_t qui contiendra l'heure

Alexandre Martins - (GEII1 - S4 ROBOS) Robot Vierzon : Tl-transmission Zigbee Page 16

et la date

Dans la fonction main la liaison avec le port srie est initialise et le programme boucle pour surveiller les changements sur le port COM. Pour viter de probables conflits les anciens fichiers de log prsents dans le dossier sont supprims (par scurit)void main (void) { printf ("Demarrage du programme RS232... \n"); printf ("Ouverture du port COM %i avec un Baudrate de %i, parite: %i, bits de donnee : %i, bits stop: %i. \n", comport, baudRate, parity, dataBits, stopBits); PortConfig (); RemoveFileIfExists ("E:\\Etudes\\GEII semestre 4\\Projet Zigbee\\Prog_PC\\RS232_perso\\rs232_data.txt"); RemoveFileIfExists ("E:\\Etudes\\GEII semestre 4\\Projet Zigbee\\Prog_PC\\RS232_perso\\rs232_data.csv"); if (portOpen) { printf ("Port COM %i ouvert avec succes \n", comport); printf ("En attente de message... \n"); while (1) ReceiveData (); } else MessagePopup ("Erreur", "Erreur dans l'initialisation du port COM, fermeture du programme"); }

Dans ReceiveData la fonction ComRdTerm est utilise, celle-ci surveille le port et copie les donnes reues dans readData jusqu' ce que le nombre maximum de caractres soit atteind ou qu'un caractre en particulier soit observ.void ReceiveData (void) { int i; readData[0] = '\0'; bytesRead = ComRdTerm (comport, readData, readCount, readTerm); // ComRdTerm lis les bits sur le port jusqu'au byte de terminaison dfini (retourne le nombre de bits la trame)

de

if (bytesRead != 0) { if (bytesRead == readCount) printf ("\n\n !!!! Attention le message ci-dessous est probable ment incomplet !!!!"); printf ("\n Message recu de %i caracteres: \n \t %s", bytesRead, readDa ta); // MessagePopup ("Message recu", readData); FillFile (); for (i=0; i