Liaison RS232 BUS CAN



Documents pareils
STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Bus de communication

ANALYSE TRAMEs LIAISON SERIE

ALERT NOTICE D UTILISATION DU DRIVER VOCALYS. (Cesa 200 bauds / Contact-ID)

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Configuration de TCPIPconfig.h

ALERT NOTICE D UTILISATION DU DRIVER SIA

PIC EVAL Dev Board PIC18F97J60

Systèmes de transmission

Le multiplexage. Sommaire

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

ENREGISTREUR DE TEMPERATURE

La programmation des PIC en C. Les fonctions, les interruptions.

Conférence sur les microcontroleurs.

SYSTEME DE PALPAGE A TRANSMISSION RADIO ETUDE DU RECEPTEUR (MI16) DOSSIER DE PRESENTATION. Contenu du dossier :

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

13/11/2009 DUT-MUX-0185 /V2.0

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

LABO 5 ET 6 TRAITEMENT DE SIGNAL SOUS SIMULINK

AP1.1 : Montages électroniques élémentaires. Électricité et électronique

Bureau d étude Electronique Automobile

COMMUTEL PRO VM3 INTERFACE GSM VOIX POUR EMULATION DE LIGNE RTC ET TRANSMETTEUR DE SMS D ALERTES ET TECHNIQUES.

PocketNet SNMP/Modbus

1. PRESENTATION DU PROJET

Prise en main. Prise en main - 0

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

Introduction à Eclipse

VIII- Circuits séquentiels. Mémoires

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Ordinateurs, Structure et Applications

ProCod. Manuel d utilisation. Software de programmation pour codeurs absolus TWK modèles CRF et DAF CRF DF 08 / 10

Extrait des Exploitations Pédagogiques

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Comme chaque ligne de cache a 1024 bits. Le nombre de lignes de cache contenu dans chaque ensemble est:

Transmissions série et parallèle

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Sélection du contrôleur

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

EL70x1 en mode position. Mise en œuvre rapide. VERSION : Beta / DATE : 31 Juillet 2011

ALERT NOTICE D UTILISATION DU DRIVER PC-TEXTE

Le langage C. Séance n 4

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Kit pédagogique RFID-EDUC

NanoSense. Protocole Modbus de la sonde Particules P4000. (Version 01F)

2 Raccordement d une imprimante, d un terminal ou d un ordinateur au DULCOMARIN

Notice d installation des cartes 3360 et 3365

Votre premier projet Android

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

Bravo! Vous venez d acquérir un routeur large bande à 4 ports Conceptronic C100BRS4H.

INSTALLATION DE WINDOWS 2000 SERVER POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

LOGICIEL DC4D MONITOR

wxwidgets dans un environnement Microsoft Windows

Ordinateurs, Structure et Applications

Spécialité Professionnelle. Patrick Boulandet

Conception et développement d'un périphérique USB pour le simulateur de vol Microsoft Flight Simulator

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Université de La Rochelle. Réseaux TD n 6

Cours de Systèmes d Exploitation

Documentation Utilisateur/Développeur. Client de Monitoring CamTrace

Document de formation pour une solution complète d automatisation Totally Integrated Automation (T I A)

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Guide du test de Conformité USB 2.0

IV- Comment fonctionne un ordinateur?

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

A.P.I. Kuka Manuel de l utilisateur Version 0.0.5

Configurer et sécuriser son réseau sans fil domestique

Master d'informatique 1ère année Réseaux et protocoles. Couche physique

Animation pédagogique sur l oscilloscope à mémoire Hameg HM 507

Projet audio. Analyse des Signaux ELE2700

Une carte pour vos projets

Acquisition et conditionnement de l information Les capteurs

1) Où est le problème? Chère lectrice, cher lecteur, On est entre nous, alors on va se tutoyer.

TP Réseau 1A DHCP Réseau routé simple

Cours 7 : Programmation d une chaîne d acquisition

Ce document décrit la démarche à suivre pour installer les outils de développement et compiler le projet TANAGRA.

Cours 1 : Qu est-ce que la programmation?

Oscilloscope actif de précision CONCEPT 4000M

Corrigé des exercices sur les références

Conventions d écriture et outils de mise au point

Flowcode - Mode d'emploi

Les techniques de multiplexage

TAGREROUT Seyf Allah TMRIM

ENVOI EN NOMBRE DE MESSAGES AUDIO

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

IPMailSMS Module d envoi d & SMS pour CITECT

COMMANDER la puissance par MODULATION COMMUNIQUER

Carte Relais GSM (Manuel Utilisateur)

TD/TP 1 Introduction au SDK d Android

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

1 Démarrer L écran Isis La boite à outils Mode principal Mode gadget Mode graphique...

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

NOTRE OFFRE GLOBALE STAGES INTER-ENTREPRISES

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Transcription:

François SCHNEIDER Lycée Victor-Hugo BESANÇON. STS SE Développement de microcontrôleurs Microchip avec PICC Liaison RS232 BUS CAN Prérequis : langage C. I. Mise en situation. Le schéma du montage est donné ci-dessous. Le bus CAN doit fonctionner en mode HSpeed avec un débit nominal de 250k. Le quartz du microcontrôleur est un 8MHz. On active la PLL cela donne une fréquence de 32MHz. Le fonctionnement à obtenir dans un premier temps est simple : - Lorsque liaison série reçoit une donnée sur l entrée RS232 RX, il l a transmet immédiatement sur la sortie CAN - Lorsque l entrée CAN reçoit une donnée (une suite de données), il l a transmet immédiatement sur la sortie RS232 TX. Remarque : le logiciel PROTEUS ne permet pas de simuler le bus CAN 1

II. PICC : le wizard, production du squelette du programme. Nous allons utiliser le logiciel PICC pour produire le programme. La programmation se fait en langage C. PICC nous permet pour les microcontrôleurs 8 et 16 bits de marque microchip : - De produire le squelette et la configuration de base du programme. - D éditer le programme en langage C. - De compiler le programme source pour obtenir le programme en langage machine. Deux versions sont produites : -.HEX : programme binaire simple. -.COF : programme binaire contenant les éléments pour la simulation ou l émulation en pas à pas. - De programmer les microcontrôleurs. - De tester à l aide d une sonde les programmes dans la cible. 1. Création du squelette du programme en langage C avec PICC. Vous lancez PICC. Nous allons utiliser le wizard pour produire le squelette et la configuration. On sélectionne le dossier projet : Tp5 On donne un nom au projet : Tp5.pjt Ici on donne le même nom au dossier et au projet, mais ce n est pas obligatoire. Tp5.pjt On enregistre le projet Nous obtenons la première page du Wizard, il faut alors définir les valeurs des différentes ressources utilisées. Ici seul l ICD et l oscillateur sont utilisés. Définir le microcontrôleur. Définir la fréquence du quartz. Activation de l ICD. Quartz rapide et activer la PLL. Activation ICD. 2

Nous allons maintenant configurer la liaison RS232 : nous définissons les paramètres 57600 bauds, 1 bit de stop, pas de parité. Nous utilisons le champ communication : On met 57600 Nous configurons le BUS CAN : champs CAN Bus débit nominal 250k. On active le CAN Bus Nous activons la case pour configurer la vitesse de transmission. Nous réglons les paramètres pour obtenir un débit de 250K. La fenêtre ci-dessus vous permet d activer le bus CAN et de configurer différents paramètres. Vous trouvez deux onglets : - Options : permet d activer le bus CAN et de configurer le débit nominal. - Interrupts : permet d activer et de configurer les interruptions sur le bus CAN. Il permet aussi de configurer le filtrage. Nous allons voir comment définir les valeurs des paramètres qui permettent de configurer le débit nominal. Par défaut avec un quartz de 8MHz et la PLL activée, nous obtenons un débit nominal de 200kBd. Nous désirons obtenir un débit nominal (Baud rate) de 250kBd. 3

Le chronogramme ci-dessous donne la façon dont est produite la durée d un bit que nous appellerons Tbit. TQ La durée d un bit est par définition :. Le chronogramme nous permet d écrire : Tbit= TQ * (Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2) TQ, Sync_Seg, Prop_Seg, Phase_Seg1 et Phase_Seg2 sont des valeurs numériques programmables dans des registres du microcontrôleur. Tbit Le registre BRGCON1 permet de configurer SJW et BRP : SJW BRP - SJW permet d obtenir Sync_Seg = SJW + 1 codé sur 2 bits. - BRP permet d obtenir TQ = Le registre BRGCON2 permet de configurer PRSEG, SEG1PH: SEGPH1 PRSEG 4

- PRSEG permet d obtenir Prop_Seg = PRSEG + 1 codé sur 3 bits. - SEG1PH permet d obtenir Phase_Seg1 = SEGPH1 + 1 codé sur 3 bits. Le registre BRGCON3 permet de configurer Phase_Seg2: SEG2PH - SEG2PH permet d obtenir Phase_Seg2 = SEGPH2 + 1 codé sur 3 bits. Nous revenons au wizard : - BRP permet d obtenir TQ = - PRSEG permet d obtenir Prop_Seg = PRSEG + 1 codé sur 3 bits. - SEG1PH permet d obtenir Phase_Seg1 = SEGPH1 + 1 codé sur 3 bits. - SEG2PH permet d obtenir Phase_Seg2 = SEGPH2 + 1 codé sur 3 bits. - SJW permet d obtenir Sync_Seg = SJW + 1 codé sur 2 bits. Reprenons l équation de Tbit. - Tbit= Tq * (Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2) La notice technique indique les contraintes suivantes pour choisir les valeurs des différents paramètres. Prop_Seg + Phase_Seg 1 Phase_Seg 2 PRSEG + SEG1PH >= SEG2PH - 1 Phase_Seg 2 Sync Jump Width. SEG2PH >= SJW Le wizard nous permet de déterminer les différents coefficients. Une autre solution consiste à faire le tableau avec un tableau Excel. 5

Voici quelques exemples calculés à partir d un quartz de 8MHz utilisé avec la PLL interne, qui multiplie par 4 : Frequence BRP PRSEG SEG1 SEG2 SJW BAUD 32000000 7 2 5 5 0 125000 32000000 4 2 5 5 0 200000 32000000 3 2 5 5 0 250000 32000000 1 2 5 5 0 500000 En activant le bouton Ok, le squelette du programme est généré : deux fichiers sont produits. - TP5.c : fichier contenant les instructions dont la fonction principale void main(). - TP5.h : fichier contenant les déclarations. Nous pouvons le compiler, onglet Compile : Le résultat est donné en bas de la fenêtre : En principe, il n y a d erreur. Ici nous voyons que la compilation s est effectuée correctement. Il est possible de voir les différents fichiers utilisés par le projet, onglet Projet : 5 fichiers sont utilisés par le projet : - Tp5.c : fichier produit par le wizard, contenant le squelette du programme. - Tp5.h : fichier produit par le wizard contenant les déclarations. - 18F24J50.h : fichier provenant de la librairie de PICC, contenant les déclarations particulières du composant 18F24J50. En jetant un coup d œil, nous voyons l affectation des ports, des registres - can-18xxx8.c et can-18xxx8.h : librairies du bus CAN. Nous allons faire plusieurs essais : - En III. Essai d émission en série. - En IV. Essai d émission en bus CAN : un seul nœud, vitesse de transmission. - EN V. Essai d émission en bus CAN : deux nœuds, mise en œuvre du filtrage. - En VI. Bus CAN émission et réception avec transfert série. 6

III. Essai d émission en série. Vous allez utiliser le squelette produit et compléter le fichier Tp5. Le programme est simple, nous avons configuré le microcontrôleur à 57600bauds. Le fichier TP5.C devient : #include <Tp5.h> #define CAN_USE_EXTENDED_ID FALSE #include <can-18xxx8.c> void main() struct rx_stat rxstat; unsigned long long rx_id; unsigned int buffer[8]; unsigned int rx_len; unsigned int i; output_low(pin_b0); // signal RS du MCP2551 à 0 for(i=0;i<8;i++) buffer[i]=0; // ici configuration pour le bus can mais ne sert à rien pour l instant. can_init(); can_set_mode(can_op_config); BRGCON1.brp=3; BRGCON1.sjw=0; BRGCON2.prseg=2; BRGCON2.seg1ph=5; BRGCON2.sam=FALSE; BRGCON2.seg2phts=FALSE; BRGCON3.seg2ph=5; BRGCON3.wakfil=TRUE; can_set_mode(can_op_normal); setup_timer_3(t3_disabled T3_DIV_BY_1); while(true) // permet de boucler perpétuellement. putc('a'); // on envoie A sur la liaison série. delay_ms(100) ; // delai de 100ms. Le fichier Tp5.h est : #include <18F2680.h> #device ICD=TRUE #device adc=16 #FUSES NOWDT //No Watch Dog Timer #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES H4 //High speed osc with HW enabled 4X PLL #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES BBSIZ1K //1K words Boot Block size #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode) #FUSES DEBUG //Debug mode for use with ICD #use delay(clock=32000000) #use rs232(baud=57600,parity=n,xmit=pin_c6,rcv=pin_c7,bits=8,stream=port1) 7

Vous chargez le programme dans le microcontrôleur et testez son fonctionnement. La sortie TX doit transmettre le caractère A. Vous validez à l aide d un oscilloscope avec décodage RS232. IV. Essai d émission en bus CAN : un seul nœud, vitesse de transmission. Nous regardons le signal à l oscilloscope sur TXcan ou en sortie BUS CAN. Penser à mettre sur le bus les résistances d adaptation d impédance. Vous complétez à nouveau le programme Tp5.c. #include <Tp5.h> #define CAN_USE_EXTENDED_ID FALSE #include <can-18xxx8.c> void main() struct rx_stat rxstat; unsigned long long rx_id; unsigned int buffer[8]; unsigned int rx_len; unsigned int i; output_low(pin_b0); // signal RS du MCP2551 à 0 can_init(); can_set_mode(can_op_config); BRGCON1.brp=3; BRGCON1.sjw=0; BRGCON2.prseg=2; BRGCON2.seg1ph=5; BRGCON2.sam=FALSE; BRGCON2.seg2phts=FALSE; BRGCON3.seg2ph=5; BRGCON3.wakfil=TRUE; can_set_mode(can_op_normal); setup_timer_3(t3_disabled T3_DIV_BY_1); while(true) if (can_tbe()) // can est prêt a emettre strcpy (buffer, "Bonjour"); // can_putd(10, buffer, 8, 1, false, false); // pour essai on met 10 en adresse. delay_ms(100) ; // delai de 100ms. Le protocole de transmission est au format standard CAN 2.0A. L identifiant est donc sur 16 bits. Vous relevez le signal en sortie TX_CAN avec un oscilloscope spécialisé avec décodage BUS CAN. Vous vérifiez que le signal émis est correct. Vous pouvez vérifier le fonctionnement pour d autres débits nominaux. Nous constatons que les trames ont une construction correcte et que les débits sont corrects. Nous constatons cependant un dysfonctionnement : le délai de 100ms entre deux transmissions n est pas respecté, nous poursuivons cependant et analyserons ce problème plus tard. 8

Vous faite fonctionner le convertisseur MCP2551. Vous pouvez ensuite utiliser la sonde bus CAN avec le logiciel MUXTRACE. Le constat est identique. Vous devez vérifier que les niveaux logiques sont conformes à la norme. Retour au dysfonctionnement : La boucle while(true) est traditionnelle : - Teste si le transmetteur CAN est prêt à émettre, - Si oui copie de la chaine «Bonjour» dans tableau de caractère buffer, Transmission de 8 caractères contenus dans tableau buffer, Délais de 100ms, - Et on recommence. Le délai de 100ms entre 2 transmissions n est pas respecté. Pourquoi? Si nous regardons l organisation d une trame CAN, lors d une transmission d une information au format CAN 2.0A : 9

Nous constatons qu un des nœuds récepteurs doit transmettre un acquittement «ACK SLOT» afin d indiquer qu il a pris en compte la trame. Or nous n avons qu un seul nœud sur le BUS CAN, il ne peut donc pas y avoir d acquittement, le CAN continue à transmettre en attente d un acquittement. Il n y a pas de dysfonctionnement, simplement pour avoir un fonctionnement complet il faut ajouter un nœud récepteur. V. Essai d émission en bus CAN : deux nœuds, Mise en œuvre du filtrage. Le schéma de principe pour deux nœuds est : PIC18F2680 PIC18F2680 CAN_TX CAN_RX CAN_TX CAN_RX MCP2551 MCP2551 CAN_H CAN_L CAN_H CAN_L CAN_H CAN_L Le microcontrôleur 18F2680 possède un contrôleur CAN. Il est capable de gérer le bus CAN en version standard (version 2.0A, identifiant : 11 bits) ou étendue (version 2.0B, identifiant : 29 bits). Les résistances de terminaison sont obligatoires sur la ligne : une en début et l autre en fin de ligne. 10

Identifiant : Une trame émise sur le bus possède un identifiant en version standard de 11bits. Chaque nœud relié au bus va vérifier s il est concerné par ce message. Si c est le cas alors, il le traite sinon il l ignore. Un même identifiant peut concerner zéro ou plusieurs nœuds. Le filtrage : Les microcontrôleurs Microchip, qui ont une ressource CAN, implémentent un système de filtrage, qui va définir les identifiants, qui les concernent. Ces microcontrôleurs possèdent : - Trois buffers d émission permettent la mise en attente de trois trames. - Deux buffers de réception assurent la mémorisation de deux trames avant traitement par le microcontrôleur. - Des registres de masque et de filtrage permettant de déterminer les identificateurs CAN pouvant être acceptés par le nœud. Les registres de masque et de filtrage : - A chaque buffer de réception est associé un registre de masque. Il permet de déterminer les bits de l identificateur CAN à prendre en compte pour accepter une trame. - Le buffer de réception RX0 possède deux registres de filtrage et le buffer RX1 en possède quatre. Ces registres peuvent contenir chacun la valeur des bits d un identificateur CAN permettant l acceptation de la trame reçue. - Le tableau ci-contre présente les critères d acceptation d une adresse CAN pour un buffer de réception donné. 11

La configuration des registres en utilisant la configuration par défaut de PICC est réalisée par les lignes suivantes dans la fonction can_init(); can_set_id(rx0mask, CAN_MASK_ACCEPT_ALL, CAN_USE_EXTENDED_ID); //set mask 0 can_set_id(rx0filter0, 0, CAN_USE_EXTENDED_ID); //set filter 0 of mask 0 can_set_id(rx0filter1, 0, CAN_USE_EXTENDED_ID); //set filter 1 of mask 0 can_set_id(rx1mask, CAN_MASK_ACCEPT_ALL, CAN_USE_EXTENDED_ID); //set mask 1 can_set_id(rx1filter2, 0, CAN_USE_EXTENDED_ID); //set filter 0 of mask 1 can_set_id(rx1filter3, 0, CAN_USE_EXTENDED_ID); //set filter 1 of mask 1 can_set_id(rx1filter4, 0, CAN_USE_EXTENDED_ID); //set filter 2 of mask 1 can_set_id(rx1filter5, 0, CAN_USE_EXTENDED_ID); //set filter 3 of mask 1 A partir des lignes précédentes, indiquer les identifiants acceptés par défaut par les registres RX1 et RX0? Relier deux cartes bus CAN et vérifier le fonctionnement. Attribuer à chacune des cartes une adresse et vérifier le dialogue. 12

VI. Bus CAN émission et réception avec transfert série. Le fichier Tp5.c après avoir été complété. Ici vous utilisez deux cartes CAN. #include <Tp5.h> #define CAN_USE_EXTENDED_ID FALSE // mode CAN standard. #include <can-18xxx8.c> void main() struct rx_stat rxstat; unsigned long long rx_id; unsigned int buffer[8]; unsigned int rx_len; unsigned int i; output_low(pin_b0); // signal RS du MCP2551 à 0 delay_ms(50); can_init(); can_set_mode(can_op_config); BRGCON1.brp=3; BRGCON1.sjw=0; BRGCON2.prseg=2; BRGCON2.seg1ph=5; BRGCON2.sam=FALSE; BRGCON2.seg2phts=FALSE; BRGCON3.seg2ph=5; BRGCON3.wakfil=TRUE; can_set_mode(can_op_normal); setup_timer_3(t3_disabled T3_DIV_BY_1); while(true) if ( can_kbhit() ) // si une donnee est recue en bus CAN on renvoie vers RS232; if(can_getd(rx_id, buffer, rx_len, rxstat)) putc(buffer[0]); if ( kbhit()) //// si une donnee est recu en rs232 on menvoie vers bus can; if (can_tbe()) // can est pret a emettre buffer[0] = getc(); can_putd(10, buffer, 1, 1, 0, 0); // pour essai on met 10 en adresse. Une donnée, qui provient du BUS CAN est transmise vers le BUS série. Une donnée, qui provient du BUS série est transmise au BUS CAN. Il ne reste plus qu à tester, mais rien n est garanti. Je n ai pas essayé. Cela vous donne une base. Si cela fonctionne vous pouvez essayer plusieurs vitesses de transmission. Vous relevez les caractéristiques des signaux produits et les comparez aux grandeurs prévues. 13

Durée Nominal bit Time : Durée de la trame : Niveau haut signal CAN_H Niveau haut signal CAN_L Niveau bas signal CAN_H Niveau bas signal CAN_L Niveau haut signal CAN Niveau bas signal CAN Théorique Mesure Unité Puis vous utilisez la sonde CAN avec Muxtrace pour regarder les trames transmises et pour transmettre des trames. Donner à chaque carte un identifiant différent par exemple 10 et 11 et valider le fonctionnement. 14