This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| fr:examples:can:wiper:tp1 [2010/03/10 16:38] – sdeniaud | fr:examples:can:wiper:tp1 [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== TP1 - Exemple | + | ====== TP1 - Exemple |
| + | ===== Sujet ===== | ||
| - | ===== Objectifs | + | **Acquérir l' |
| + | ** | ||
| + | ==== Objectifs ==== | ||
| * Définir les trames de commande qui permettent d' | * Définir les trames de commande qui permettent d' | ||
| * Définir, puis envoyer une trame interrogative à un module d' | * Définir, puis envoyer une trame interrogative à un module d' | ||
| - | * Tester si une trame a été reçue. | + | * Tester si une trame a été reçue |
| - | * Extraire d'une trame réponse les informations attendues. | + | * Extraire d'une trame réponse les informations attendues |
| - | * Visualiser sur l' | + | * Visualiser sur l' |
| - | * Visualiser sur l' | + | * Visualiser sur l' |
| - | ===== Cahier des charges | + | ==== Cahier des charges ==== |
| - | A intervalles de temps réguliers, on interroge le module sur lequel est connecté le commodo | + | A intervalles de temps réguliers, on interroge le module sur lequel est connecté le commodo Essuie-Glace afin de connaître son état. |
| * L' | * L' | ||
| - | * Les trames reçues ou envoyées sur le bus CAN sont affichées. | + | * Les trames reçues ou envoyées sur le bus CAN sont affichées |
| * La temporisation est de type // | * La temporisation est de type // | ||
| - | * Les différentes commandes imposées par la position de la manette commodo seront affichées individuellement. | + | * Les différentes commandes imposées par la position de la manette commodo seront affichées individuellement |
| + | |||
| + | |||
| + | ---- | ||
| ===== Eléments de solution ===== | ===== Eléments de solution ===== | ||
| + | |||
| ==== Analyse ==== | ==== Analyse ==== | ||
| - | Avant de pouvoir lire l' | + | Avant de pouvoir lire l' |
| - | Cette configuration a pour but de définir en entrée les 8 bits du port (GP0 à GP7). Pour confirer | + | Cette configuration a pour but de définir en entrée les 8 bits du port (GP0 à GP7). Pour configurer |
| - | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme une IM "Input message", avec la fonction | + | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme une '' |
| - | * **Configuration des liaisons en entrées** | + | === Configuration des liaisons en entrées === |
| - | Définition de la trame de commande (IM) qui sera envoyée pour configurer le module " | + | |
| - | * Définition de variables structurées sous le modèle // | + | |
| - | Trame T_IM_Commodo_EG; | + | |
| - | * Définition des éléments d' | + | |
| - | T_IM_Commodo_EG.trame_info.registre=0x00; //On initialise tous les bits à 0 | + | |
| - | T_IM_Commodo_EG.trame_info.champ.extend=1; //On travaille en mode étendu | + | |
| - | T_IM_Commodo_EG.trame_info.champ.dlc=0x03; //Il y aura 3 octets de données | + | |
| - | T_IM_Commodo_EG.ident.extend.identificateur.ident=Ident_T_IM_Commodo_EG; | + | |
| - | Rem: Ident_T_IM_Commodo_EG | + | |
| - | * Définition des paramétres associée à la trame de commande | + | |
| - | Il faut initialiser le registre GPDDR (//Data Direction Register//) en écrivant un 1 si bit d' | + | |
| - | T_IM_Commodo_EG.data[0]=0x1F; | + | |
| - | (doc MCP25050 page 16) | + | |
| - | T_IM_Commodo_EG.data[1]=0x7F; | + | |
| - | T_IM_Commodo_EG.data[2]=0x7F; | + | |
| - | Suite à ces définitions, | + | **Définition de la trame de commande |
| - | * envoyer | + | * Définition |
| - | | + | ''Trame T_IM_Commodo_EG;'' |
| - | L'entrée //GP0// étant une entrée analogique (AN0), il faudra mettre en œuvre la fonctio | + | * Définition des éléments d' |
| - | | + | <code c> |
| - | Définition des trois octets de données associées pour: | + | T_IM_Commodo_EG.trame_info.registre=0x00; |
| + | T_IM_Commodo_EG.trame_info.champ.extend=1; | ||
| + | T_IM_Commodo_EG.trame_info.champ.extend=1; | ||
| + | T_IM_Commodo_EG.trame_info.champ.dlc=0x03; | ||
| + | T_IM_Commodo_EG.ident.extend.identificateur.ident=Ident_T_IM_Commodo_EG; | ||
| + | </ | ||
| + | |||
| + | Rem : '' | ||
| + | * Définition des paramètres associés à la trame de commande | ||
| + | Il faut initialiser le registre GPDDR (Data Direction Register) en écrivant un 1 si bit d' | ||
| + | |||
| + | <code c> | ||
| + | T_IM_Commodo_EG.data[0]=0x1F; | ||
| + | T_IM_Commodo_EG.data[1]=0x7F; | ||
| + | T_IM_Commodo_EG.data[2]=0x7F; | ||
| + | </ | ||
| + | |||
| + | Suite à ces définitions, | ||
| + | * envoyer la trame par la fonction '' | ||
| + | * puis attendre la réponse de type '' | ||
| + | L' | ||
| + | |||
| + | === Activation de la conversion Analogique -> Numérique | ||
| + | |||
| + | |||
| + | Définition des trois octets de données associées pour : | ||
| * activer et configurer la conversion Analogique vers Numérique | * activer et configurer la conversion Analogique vers Numérique | ||
| - | D' | + | D' |
| Il faut initialiser le registre ADCON0, | Il faut initialiser le registre ADCON0, | ||
| - | | + | <code c> |
| - | (doc MCP25050 p15) 0EH + décalage = 0EH + 1CH = 2AH | + | T_IM_ Commodo_EG.data[0]=0x2A; |
| - | T_IM_ Commodo_EG.data[1]=0xF0; | + | T_IM_ Commodo_EG.data[1]=0xF0; |
| - | T_IM_ Commodo_EG nt.data[2]=0x80; | + | T_IM_ Commodo_EG nt.data[2]=0x80; |
| + | </ | ||
| - | Suite à ces définitions, | + | Suite à ces définitions, |
| - | * envoyer la trame par la fonction | + | * envoyer la trame par la fonction |
| - | * puis attendre la réponse de type //Ack// en utilisant la fonction Lire_Trame(& | + | * puis attendre la réponse de type '' |
| - | Il faut aussi initialiser le registre ADCON1: | + | Il faut aussi initialiser le registre ADCON1 : |
| - | T_IM_ Commodo_EG.data[0]=0x2B; | + | <code c> |
| - | (doc MCP25050 | + | T_IM_ Commodo_EG.data[0]=0x2B; |
| - | T_IM_ Commodo_EG.data[1]=0xFF; | + | T_IM_ Commodo_EG.data[1]=0xFF; |
| - | T_IM_ Commodo_EG.data[2]=0xO3; | + | T_IM_ Commodo_EG.data[2]=0xO3; |
| b7=ADCS1=0; | b7=ADCS1=0; | ||
| - | b5=VCFG1=0; | + | b5=VCFG1=0; |
| - | PCFG3: | + | PCFG3: |
| + | </ | ||
| - | Suite à ces définitions, | + | Suite à ces définitions, |
| - | * envoyer la trame par la fonction | + | * envoyer la trame par la fonction |
| - | * puis attendre la réponse de type //Ack// en utilisant la fonction Lire_Trame(& | + | * puis attendre la réponse de type '' |
| - | **Acquisition de l' | + | === Acquisition de l' |
| A intervalles de temps réguliers, on interroge le module 8 entrées sur lequel est connecté le commodo Essuie-Glace. Dans la réponse on attend également le résultat de conversion de l' | A intervalles de temps réguliers, on interroge le module 8 entrées sur lequel est connecté le commodo Essuie-Glace. Dans la réponse on attend également le résultat de conversion de l' | ||
| - | Définition de la trame interrogative qui sera envoyée | + | ** Définition de la trame interrogative qui sera envoyée |
| - | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme un " | + | |
| - | * Définition de variables structurées sous le modèle //Trame//: | ||
| - | Trame T_IRM_Commodo_EG; | ||
| - | // Trame destinée à l’interrogation du module 8 entrées sur lequel est connecté le commodo lumière | ||
| - | Rem: La variable structurée | ||
| - | * Accès et définition des différents éléments de la variable structurée | + | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme un '' |
| - | T_IRM_Commodo_EG.trame_info.registre=0x00; | + | |
| - | T_IRM_Commodo_EG.trame_info.champ.extend=1; | + | |
| - | T_IRM_Commodo_EG.trame_info.champ.rtr=0x01; | + | |
| - | T_IRM_Commodo_EG.trame_info.champ.dlc=0x08; | + | |
| - | T_IRM_Commodo_EG.ident.extend.identificateur.ident= Ident_T_IRM8_Commodo_EG; | + | |
| - | //! c'est sur 29 bits Pour définir l' | + | |
| - | Des labels définissant les différents identificateusrs ont été déclarés dans le fichier CAN_VMD.h | + | |
| - | Suite à ces définitions, | + | * Définition de variables structurées sous le modèle '' |
| - | * envoyer la trame par la fonction Ecire_Trame(T_IRM_Commodo_EG) | + | '' |
| - | * puis attendre la réponse de type " | + | Rem : La variable structurée |
| - | Trame reçue en réponse à l' | + | * Accès et définition des différents éléments de la variable structurée '' |
| - | D' | + | <code c> |
| - | Vu du module (du MCP25050), la réponse à un IRM (Information Request Message) est un OM (Output Message). | + | T_IRM_Commodo_EG.trame_info.registre=0x00; |
| - | La trame réponse, suite à l'IRM, comportera en données associées 8 octets (doc MCP25050 | + | T_IRM_Commodo_EG.trame_info.champ.extend=1; |
| - | * octet de rang 0 (data[0])→ valeur IOINTFL | + | T_IRM_Commodo_EG.trame_info.champ.rtr=0x01; |
| + | T_IRM_Commodo_EG.trame_info.champ.dlc=0x08; | ||
| + | T_IRM_Commodo_EG.ident.extend.identificateur.ident= Ident_T_IRM8_Commodo_EG; | ||
| + | </ | ||
| + | |||
| + | Des labels définissant les différents identificateurs ont été déclarés dans le fichier '' | ||
| + | |||
| + | Suite à ces définitions, | ||
| + | * envoyer la trame par la fonction '' | ||
| + | * puis attendre la réponse de type '' | ||
| + | |||
| + | **Trame reçue en réponse à l' | ||
| + | |||
| + | |||
| + | D' | ||
| + | Vu du module (du MCP25050), la réponse à un '' | ||
| + | La trame réponse, suite à l'IRM, comportera en données associées 8 octets ({{: | ||
| + | * octet de rang 0 (data[0])→ valeur IOINTFL | ||
| * octet de rang 1 (data[1])→ valeur GPIO → Valeur des entrées logiques | * octet de rang 1 (data[1])→ valeur GPIO → Valeur des entrées logiques | ||
| * octet de rang 2 (data[2])→ valeur AN0H → 8 bits MSB conversion entrée anologique 0 | * octet de rang 2 (data[2])→ valeur AN0H → 8 bits MSB conversion entrée anologique 0 | ||
| Line 111: | Line 137: | ||
| * octet de rang 4 (data[4])→ valeur AN10H → 2 fois 2 bits LSB conversion entrées ana. 1 et 0 | * octet de rang 4 (data[4])→ valeur AN10H → 2 fois 2 bits LSB conversion entrées ana. 1 et 0 | ||
| Les 3 autres octets ne sont pas utiles dans notre application. | Les 3 autres octets ne sont pas utiles dans notre application. | ||
| - | Le résultat de conversion est sur 10bits: | + | Le résultat de conversion est sur 10bits : |
| * pour résultat AN0 | * pour résultat AN0 | ||
| + | {{ : | ||
| ==== Organigramme ==== | ==== Organigramme ==== | ||
| - | ==== Programme en "C" | + | {{ : |
| + | |||
| + | ==== Programme en C ==== | ||
| <code c> | <code c> | ||
| - | / | + | / |
| - | * TPs sur EID210 / Réseau CAN - VMD (Véhicule Multiplexé Didactique) | + | * TPs sur EID210 / Réseau CAN - VMD (Véhicule Multiplexé Didactique) |
| - | ************************************************************************************************* | + | ************************************************************************************************* |
| - | * | + | * |
| - | ************************************************************************************************* | + | ************************************************************************************************* |
| - | * TP Exemple n°1: Acquérir l' | + | * TP Exemple n°1: Acquérir l' |
| - | * du commodo Essuie-Glace | + | * du commodo Essuie-Glace |
| - | * Afficher séparément les états de ces entrées binaires | + | * Afficher séparément les états de ces entrées binaires |
| - | * | + | * |
| - | *------------------------------------------------------------------------------------------------ | + | *------------------------------------------------------------------------------------------------ |
| - | * | + | * |
| - | * ********************* | + | * ********************* |
| - | * On souhaite qu'à intervalles de temps réguliers on interroge le module 8 entrées sur lequel | + | * On souhaite qu'à intervalles de temps réguliers on interroge le module 8 entrées sur lequel |
| - | * est relié le commodo de commande Essuie-Glace | + | * est relié le commodo de commande Essuie-Glace |
| - | * -> Les trames reçues et envoyées sur le bus CAN sont affichées | + | * -> Les trames reçues et envoyées sur le bus CAN sont affichées |
| - | * -> Les états des entrées binaires et de l' | + | * -> Les états des entrées binaires et de l' |
| - | * -> La temporisation est de type "logiciel" | + | * -> La temporisation est de type logiciel |
| - | * (comptage du nombre de passages dans la boucle principale) | + | * (comptage du nombre de passages dans la boucle principale) |
| - | *---------------------------------------------------------------------------------------------- | + | *---------------------------------------------------------------------------------------------- |
| - | * NOM du FICHIER : TP_Exemple 2.C | + | * NOM du FICHIER : TP_Exemple 2.C |
| - | * ***************** | + | * ***************** |
| - | *************************************************************************************************/ | + | *************************************************************************************************/ |
| // Fichiers à inclure | // Fichiers à inclure | ||
| // | // | ||