Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
fr:examples:can:wiper:tp1 [2010/03/10 16:38] sdeniaudfr:examples:can:wiper:tp1 [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== TP1 - Exemple n°1 : acquérir l'état du commodo E.G. ======+====== TP1 - Exemple ======
  
 +===== Sujet =====
  
-===== Objectifs =====+**Acquérir l'état du commodo d'essuie-glace 
 +** 
 +==== Objectifs ====
  
   * Définir les trames de commande qui permettent d'initialiser un nœud CAN   * Définir les trames de commande qui permettent d'initialiser un nœud CAN
   * Définir, puis envoyer une trame interrogative à un module d'entrées, accessible à une adresse définie.   * Définir, puis envoyer une trame interrogative à un module d'entrées, accessible à une adresse définie.
-  * 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'écran les trames reçues ainsi que les trames envoyées. +  * Visualiser sur l'écran les trames reçues ainsi que les trames envoyées 
-  * Visualiser sur l'écran les données attendues.+  * Visualiser sur l'écran les données attendues
  
-===== Cahier des charges =====+==== Cahier des charges ====
  
-A intervalles de temps réguliers, on interroge le module sur lequel est connecté le commodo "Essuie-Glaceafin de connaître son état.+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'entrée analogique sera convertie   * L'entrée analogique sera convertie
-  * 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 //logiciel// (comptage du nombre de passages dans la boucle principale)    * La temporisation est de type //logiciel// (comptage du nombre de passages dans la boucle principale)
-  * 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'état des entrées du module 8 entrées (dont on donne le schéma structurel en Annexe) sur lequel est relié le commodo essuie-glace, il faut préalablement configurer  le "CAN expender MCP25050" +Avant de pouvoir lire l'état des entrées du module 8 entrées (dont on donne le schéma structurel en [[annex4|annexe 4]]) sur lequel est relié le commodo essuie-glace, il faut préalablement configurer  le CAN expender MCP25050 
-Cette configuration a pour but de définir en entrée les 8 bits du port (GP0 à GP7). Pour confirer un bit du port en entrée, il faut écrire un "1" sur le bit correspondant du registre GPDDR (Data Direction Register) (voir tableau "Register 5-1à la page 27  de la notice du 25050) +Cette configuration a pour but de définir en entrée les 8 bits du port (GP0 à GP7). Pour configurer un bit du port en entrée, il faut écrire un "1" sur le bit correspondant du registre GPDDR (Data Direction Register) (voir tableau Register 5-1 à la page 27  de la {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} du 25050) 
-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 "Write register(voir documentation  technique du MPC25025 pages 22). On pourra ainsi modifier les différents registres du module "Asservissement".+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 ''Write register'' (voir {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} du MPC25025 page 22). On pourra ainsi modifier les différents registres du module Asservissement.
  
-  * **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 "Commodo-EG" +
-     * Définition de variables structurées sous le modèle //Trame//: +
-  Trame T_IM_Commodo_EG;  +
-     * Définition des éléments d'identification de la variable structurée //T_IM_ Commodo_EG//  +
-  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  est défini dans le fichier CAN_VMD.h +
-     * 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'entrée et un 0 si bit de sortie(doc MCP25050 p27).  +
-  T_IM_Commodo_EG.data[0]=0x1F; // Adresse du registre GPDDR en écriture  +
-    (doc MCP25050 page 16)  +
-  T_IM_Commodo_EG.data[1]=0x7F; // Masque: bit 7 non concerné (doc MCP25050 page 16)  +
-  T_IM_Commodo_EG.data[2]=0x7F; // Valeur: à charger dans le registre adressé ( Tous les bits du port sont des entrées)+
  
-Suite à ces définitions, il faudra  +**Définition de la trame de commande (''IM''qui sera envoyée pour configurer le module Commodo-EG** 
-     envoyer la trame par la fonction Ecire_Trame(T_IM_Commodo_EG   +    Définition de variables structurées sous le modèle ''Trame'' : 
-     puis attendre la réponse de type //Ack//  en utilisant la fonction Lire_Trame(&T_Recue)    +''Trame T_IM_Commodo_EG;''  
-L'entrée //GP0// étant une entrée analogique (AN0), il faudra mettre en œuvre la fonctio de conversion anaolique -> numérique.+    * Définition des éléments d'identification de la variable structurée ''T_IM_ Commodo_EG''
  
-  * **Activation de la conversion Analogique-> Numérique** +<code c> 
-Définition des trois octets de données associées pour:+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.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; 
 +</code> 
 + 
 +Rem : ''Ident_T_IM_Commodo_EG '' est défini dans le fichier ''[[annex2|CAN_VMD.h]]'' 
 +     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'entrée et un 0 si bit de sortie ({{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} MCP25050 p. 27).  
 + 
 +<code c> 
 +T_IM_Commodo_EG.data[0]=0x1F; // Adresse du registre GPDDR en écriture (doc MCP25050 page 16) 
 +T_IM_Commodo_EG.data[1]=0x7F; // Masque: bit 7 non concerné (doc MCP25050 page 16) 
 +T_IM_Commodo_EG.data[2]=0x7F; // Valeur: à charger dans le registre adressé (Tous les bits du port sont des entrées) 
 +</code> 
 + 
 +Suite à ces définitions, il faudra : 
 +     envoyer la trame par la fonction ''Ecrire_Trame(T_IM_Commodo_EG)''    
 +     puis attendre la réponse de type ''Ack''  en utilisant la fonction ''Lire_Trame(&T_Recue)''    
 +L'entrée GP0 étant une entrée analogique (AN0), il faudra mettre en œuvre la fonction de conversion analogique -> numérique. 
 + 
 +=== 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'après la notice technique du circuit MCP25050 (pages 34 à37) :+D'après la {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} du circuit MCP25050 (pages 34 à 37) :
 Il faut initialiser le registre ADCON0, Il faut initialiser le registre ADCON0,
-  T_IM_ Commodo_EG.data[0]=0x2A; // Adresse du registre ADCON0 en écriture  +<code c> 
-   (doc MCP25050 p15) 0EH + décalage = 0EH + 1CH = 2AH +T_IM_ Commodo_EG.data[0]=0x2A; // Adresse du registre ADCON0 en écriture ({{:fr:hardware:didalab:mcp2502x_5x.pdf|doc.}} MCP25050 p15) 0EH + décalage = 0EH + 1CH = 2AH 
-  T_IM_ Commodo_EG.data[1]=0xF0; // Masque: Seul le bit 7 est concerné +T_IM_ Commodo_EG.data[1]=0xF0; // Masque: Seul le bit 7 est concerné 
-  T_IM_ Commodo_EG nt.data[2]=0x80; // Valeur: ADON=1 -> Activation convertisseur et "prescaler rate= 1:32+T_IM_ Commodo_EG nt.data[2]=0x80; // Valeur: ADON=1 -> Activation convertisseur et prescaler rate = 1:32 
 +</code>
  
-Suite à ces définitions, il faudra  +Suite à ces définitions, il faudra  : 
-     * envoyer la trame par la fonction Ecire_Trame(T_IM_Commodo_EG)    +     * envoyer la trame par la fonction ''Ecrire_Trame(T_IM_Commodo_EG)''   
-     * puis attendre la réponse de type //Ack// en utilisant la fonction Lire_Trame(&T_Recue)   +     * puis attendre la réponse de type ''Ack'' en utilisant la fonction ''Lire_Trame(&T_Recue)'' 
    
-Il faut aussi initialiser le registre ADCON1:  +Il faut aussi initialiser le registre ADCON1 :  
-  T_IM_ Commodo_EG.data[0]=0x2B; // Adresse du registre ADCON1 en écriture  +<code c> 
-   (doc MCP25050 p15) 0FH + décalage = 0EH + 1CH = 2BH +T_IM_ Commodo_EG.data[0]=0x2B; // Adresse du registre ADCON1 en écriture ({{:fr:hardware:didalab:mcp2502x_5x.pdf|doc.}} MCP25050 p. 15) 0FH + décalage = 0EH + 1CH = 2BH 
-  T_IM_ Commodo_EG.data[1]=0xFF; // Masque:  les 8 bits sont concernés +T_IM_ Commodo_EG.data[1]=0xFF; // Masque:  les 8 bits sont concernés 
-  T_IM_ Commodo_EG.data[2]=0xO3; // Valeur: (doc MCP25050 p36)+T_IM_ Commodo_EG.data[2]=0xO3; // Valeur: (doc MCP25050 p36)
  b7=ADCS1=0; b6=ADCS0=0 → Fréquence Fosc/2  b7=ADCS1=0; b6=ADCS0=0 → Fréquence Fosc/2
- b5=VCFG1=0; b4=VCFG0=0 → Plage de tension d'entrée 0/+5V + b5=VCFG1=0; b4=VCFG0=0 → Plage de tension en entrée 0/+5V 
- PCFG3:PCFG0=1100 → Convertion des entrées analogiques 1 et 0 ( sur GP1 et GP0)+ PCFG3:PCFG0=1100       → Conversion des entrées analogiques 1 et 0 (sur GP1 et GP0) 
 +</code>
  
-Suite à ces définitions, il faudra  +Suite à ces définitions, il faudra : 
-     * envoyer la trame par la fonction Ecire_Trame(T_IM_Commodo_EG)    +     * envoyer la trame par la fonction ''Ecrire_Trame(T_IM_Commodo_EG)''    
-     * puis attendre la réponse de type //Ack//  en utilisant la fonction Lire_Trame(&T_Recue)   +     * puis attendre la réponse de type ''Ack''  en utilisant la fonction ''Lire_Trame(&T_Recue)''   
  
  
-**Acquisition de l'état des entrées sur le module //Commodo-EG//**+=== Acquisition de l'état des entrées sur le module Commodo-EG === 
  
 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'entrée analogique. 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'entrée analogique.
  
-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 "Information Request message", avec la fonction "Read A/D Regs" (voir documentation  technique du "CAN Expander'" MPC25025 pages 22). +
  
-  * 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  T_IRM_Commodo_EG  comportera 5 octets utiles seulement, 1octet pour trame_info et  4 octets pour l'identificateur en mode étendu (qui comprendra l'adresse du registre concerné par la lecture. 
  
-  * Accès et définition des différents éléments de la variable structurée "T_IRM_Commodo_EG +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 ''IRM'' (Information Request Message), avec la fonction "Read A/D Regs(voir {{:fr:hardware:didalab:mcp2502x_5x.pdf|doctechnique}} du CAN Expander MPC25025 pages 22)
-  T_IRM_Commodo_EG.trame_info.registre=0x00;  //On initialise tous les bits à 0 +
-  T_IRM_Commodo_EG.trame_info.champ.extend=1; //On travaille en mode étendu +
-  T_IRM_Commodo_EG.trame_info.champ.rtr=0x01; // Type trame ->  Interrogative +
-  T_IRM_Commodo_EG.trame_info.champ.dlc=0x08; //Il y aura 8 octets de données  +
-  T_IRM_Commodo_EG.ident.extend.identificateur.ident= Ident_T_IRM8_Commodo_EG;  +
-    //! c'est sur 29 bits       Pour définir l'adresse du commodo +
-Des labels définissant les différents identificateusrs ont été déclarés dans le fichier CAN_VMD.h+
  
-Suite à ces définitions, il faudra  +  * Définition de variables structurées sous le modèle ''Trame'': 
-     * envoyer la trame par la fonction Ecire_Trame(T_IRM_Commodo_EG)    +        ''Trame T_IRM_Commodo_EG;'' Trame destinée à l’interrogation du module 8 entrées sur lequel est connecté le commodo lumière 
-     * puis attendre la réponse de type "OM"  en utilisant la fonction  Lire_Trame(&T_Recue)   +Rem :  La variable structurée  ''T_IRM_Commodo_EG'' comportera 5 octets utiles seulement, 1'octet pour ''trame_info'' et  4 octets pour l'identificateur en mode étendu (qui comprendra l'adresse du registre concerné par la lecture.
  
-Trame reçue en réponse à l'interrogation +  * Accès et définition des différents éléments de la variable structurée ''T_IRM_Commodo_EG''  
-D'après la définition des identificateurs donnée en Annexe 1, une trame de réponse à une IRM a le même identificateur que la trame interrogative qui en a été à l'origine.  +<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;  //On initialise tous les bits à 0 
-La trame réponse, suite à l'IRM, comportera en données associées 8 octets (doc MCP25050 p22): +T_IRM_Commodo_EG.trame_info.champ.extend=1; //On travaille en mode étendu 
-     * octet de rang 0  (data[0])→ valeur IOINTFL  non utilile dans notre cas+T_IRM_Commodo_EG.trame_info.champ.rtr=0x01; // Type trame ->  Interrogative 
 +T_IRM_Commodo_EG.trame_info.champ.dlc=0x08; //Il y aura 8 octets de données 
 +T_IRM_Commodo_EG.ident.extend.identificateur.ident= Ident_T_IRM8_Commodo_EG; //! c'est sur 29 bits Pour définir l'adresse du commodo 
 +</code> 
 + 
 +Des labels définissant les différents identificateurs ont été déclarés dans le fichier ''[[annex2|CAN_VMD.h]]'' 
 + 
 +Suite à ces définitions, il faudra : 
 +     * envoyer la trame par la fonction ''Ecrire_Trame(T_IRM_Commodo_EG)''    
 +     * puis attendre la réponse de type ''OM'' en utilisant la fonction  ''Lire_Trame(&T_Recue)''   
 + 
 +**Trame reçue en réponse à l'interrogation** 
 + 
 + 
 +D'après la définition des identificateurs donnée en [[annex1|Annexe 1]], une trame de réponse à une ''IRM'' a le même identificateur que la trame interrogative qui en a été à l'origine.  
 +Vu du module (du MCP25050), la réponse à un ''IRM'' (Information Request Message) est un ''OM'' (Output Message).  
 +La trame réponse, suite à l'IRM, comportera en données associées 8 octets ({{:fr:hardware:didalab:mcp2502x_5x.pdf|doc.}} MCP25050 p. 22): 
 +     * octet de rang 0  (data[0])→ valeur IOINTFL  non utilisée dans notre cas
      * 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 
 +{{  :fr:examples:can:wiper:an0.png|AN0}}
  
 ==== Organigramme ==== ==== Organigramme ====
  
-==== Programme en "C====+{{  :fr:examples:can:wiper:orga.png?600  |Organigramme}} 
 + 
 +==== 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)   
- ************************************************************************************************* +************************************************************************************************* 
- *       APPLICATION: Commande Essuie-glace à distance +*       APPLICATION: Commande Essuie-glace à distance 
- ************************************************************************************************* +************************************************************************************************* 
- *  TP Exemple n°1:  Acquérir l'état des entrées binaires ainsi que la valeur de l'entrée analogique +*  TP Exemple n°1:  Acquérir l'état des entrées binaires ainsi que la valeur de l'entrée analogique 
- *              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 
- *    Afficher la valeur de l'entrée analogique  +*    Afficher la valeur de l'entrée analogique  
- *------------------------------------------------------------------------------------------------  +*------------------------------------------------------------------------------------------------  
- *   CAHIER DES CHARGES :        +*   CAHIER DES CHARGES :        
- *  *********************        +*  *********************        
- *   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'entrée analogique sont affichés  +*   -> Les états des entrées binaires et de l'entrée analogique sont affichés  
- *   -> 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
 //******************** //********************
fr/examples/can/wiper/tp1.1268239108.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0