| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| fr:examples:can:wiper:intro [2010/03/11 06:13] – sdeniaud | fr:examples:can:wiper:intro [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| Remarque : Dans l'application "Commande d'essuie-glace", réf : CAN01B, on n'utilise pas de module 4 sorties de puissance TOR. | Remarque : Dans l'application "Commande d'essuie-glace", réf : CAN01B, on n'utilise pas de module 4 sorties de puissance TOR. |
| |
| * Dans sa version "VMD" (Véhicule Multiplexé Didactique) les organes reliés aux modules d'interface CAN peuvent être un commodo lumières, un bloc optique avant, un bloc optique arrière, un commodo essuie-glace un moteur d'essuie-glace ou de lève-vitre, plafonnier, etc. | * Dans sa version VMD (Véhicule Multiplexé Didactique), les organes reliés aux modules d'interface CAN peuvent être un commodo lumières, un bloc optique avant, un bloc optique arrière, un commodo essuie-glace un moteur d'essuie-glace ou de lève-vitre, plafonnier, etc. |
| |
| * L'unité centrale programmable comprend un certain nombre de cartes électroniques reliées entre elle par BUS parallèles : | * L'unité centrale programmable comprend un certain nombre de cartes électroniques reliées entre elle par BUS parallèles : |
| * cartes indispensables | * cartes indispensables |
| * [[fr:hardware:wiper:cpu-eid210|carte processeur EID210]] conçue autour du microprocesseur 32 bits Motorola 68332 (carte spécifique Didalab) | * [[fr:hardware:wiper:cpu-eid210|carte processeur EID210]] conçue autour du microprocesseur 32 bits Motorola 68332 (carte spécifique Didalab) |
| * [[fr:hardware:wiper:aton-pc104|carte industrielle d'interface parallèle / CAN]] conçue autour du contrôleur CAN "SJA1000", au format normalisé "PC104" (carte commercialisée par la société Aton Systèmes), | * [[fr:hardware:wiper:aton-pc104|carte industrielle d'interface parallèle / CAN]] conçue autour du contrôleur CAN SJA1000, au format normalisé PC104 (carte commercialisée par la société Aton Systèmes), |
| * cartes optionnelles (non utilisée dans l'application Essuie-Glace, Réf : CAN01B | * cartes optionnelles (non utilisée dans l'application Essuie-Glace, Réf : CAN01B |
| * carte clavier 16 touches matricées et afficheur graphique (carte spécifique Didalab) | * carte clavier 16 touches matricées et afficheur graphique (carte spécifique Didalab) |
| * carte d'interface réseau "Ethernet" (carte spécifique Didalab) | * carte d'interface réseau Ethernet (carte spécifique Didalab) |
| * toute carte au format PC1014 | * toute carte au format PC1014 |
| |
| * ''CPU_Reg.h'' définissant les adresses d'accès aux différents registres internes au micro-contrôleur 68332 (processeur autour duquel est conçue la carte processeur EID210) | * ''CPU_Reg.h'' définissant les adresses d'accès aux différents registres internes au micro-contrôleur 68332 (processeur autour duquel est conçue la carte processeur EID210) |
| * ''EID210_Reg.h'' définissant les adresses d'accès aux différents éléments matériels implantés sur la carte processeur EID210 | * ''EID210_Reg.h'' définissant les adresses d'accès aux différents éléments matériels implantés sur la carte processeur EID210 |
| * ''[[fr:examples:can:wiper:annex3|Aton_CAN.h]]'' définissant les adresses d'accès aux différents registres du contrôleur CAN SJA1000 implanté sur la carte industrielle "CAN-PC104" fournie par la société "Aton Systèmes" | * ''[[fr:examples:can:wiper:annex3|Aton_CAN.h]]'' définissant les adresses d'accès aux différents registres du contrôleur CAN SJA1000 implanté sur la carte industrielle CAN-PC104 fournie par la société Aton Systèmes |
| * ''Structures_Donnees.h'' définissant l'ensemble des structures de données utiles à une programmation structurée | * ''Structures_Donnees.h'' définissant l'ensemble des structures de données utiles à une programmation structurée |
| * ''[[fr:examples:can:wiper:annex2|CAN_VMD.h]]'' définissant les éléments de l'application VMD | * ''[[fr:examples:can:wiper:annex2|CAN_VMD.h]]'' définissant les éléments de l'application VMD |
| |
| {{:fr:examples:can:wiper:warning_1.png?600|}} | **Attention : Veiller à ce que tous ces fichiers soient présents, soit dans le répertoire de travail, soit dans le répertoire "include" lui-même situé sous le répertoire contenant l'environnement de développement intégré ("Cross compilateur") EID210100.** |
| |
| ==== Les structures de données spécifiques à l'application CAN ==== | ==== Les structures de données spécifiques à l'application CAN ==== |
| |
| **Définition des unions et structures particulières (Voir dans fichier ''[[fr:examples:can:wiper:annex2|CAN_VMD.h]]'')** | **Définition des unions et structures particulières (Voir dans fichier ''[[fr:examples:can:wiper:annex2|CAN_VMD.h]]'')** |
| | |
| |
| Les structures définies ci-après ont été définies en conformités aux différents registres du SJA1000 (se référer à la notice technique du SJA1000, pages 39, 40 et 41). | Les structures définies ci-après ont été définies en conformités aux différents registres du SJA1000 (se référer à la notice technique du SJA1000, pages 39, 40 et 41). |
| | |
| * Définition d'une variable structurée sous le modèle ''Trame'' : | * Définition d'une variable structurée sous le modèle ''Trame'' : |
| ''Trame T_IM_Commodo_EG;'' //IM -> Input Message// | <code c> |
| | Trame T_IM_Commodo_EG; //IM -> Input Message |
| Trame destinée au module 8 entrées sur lequel est connecté le commodo Essuie-Glace | //Trame destinée au module 8 entrées sur lequel est connecté le commodo Essuie-Glace |
| | </code> |
| |
| Remarque: La variable structurée ''T_IM_ Commodo_EG'' comportera 8 octets (1 pour ''trame_info'', 4 pour l’identificateur, 1 pour l’adresse registre, 1 pour le masque et 1 pour la valeur). | Remarque : La variable structurée ''T_IM_ Commodo_EG'' comportera 8 octets (1 pour ''trame_info'', 4 pour l’identificateur, 1 pour l’adresse registre, 1 pour le masque et 1 pour la valeur). |
| |
| * Accès et définition des différents éléments de la variable structurée ''T_IM_Commodo_EG'' | * Accès et définition des différents éléments de la variable structurée ''T_IM_Commodo_EG'' |
| ===== Les fonctions spécifiques ===== | ===== Les fonctions spécifiques ===== |
| |
| Des fonctions spécifiques à l'accès au réseau CAN via la carte CAN-PC104 de chez "ATON SYSTEMES". | Des fonctions spécifiques à l'accès au réseau CAN via la carte CAN-PC104 de chez Aton Systèmes. |
| Les prototypes de ces fonctions sont définis dans le fichier ''Aton_CAN.h'' et leurs définitions elle-mêmes dans le fichier ''Aton_CAN.C'' | Les prototypes de ces fonctions sont définis dans le fichier ''[[annex3|Aton_CAN.h]]'' et leurs définitions elle-mêmes dans le fichier ''Aton_CAN.C'' |
| S'il ne l'est déjà, ce fichier doit être compilé et son résultat de compilation ''Aton_CAN.o'' doit être inclus en tant que fichier à ''Linker'' avec le fichier application. | S'il ne l'est déjà, ce fichier doit être compilé et son résultat de compilation ''Aton_CAN.o'' doit être inclus en tant que fichier à Linker avec le fichier application. |
| |
| {{:fr:examples:can:wiper:warning_2.png?600|}} | **Attention : |
| |
| * Fonction **Init_Aton_CAN()** | Veiller à ce que le fichier ''Aton_CAN.o'' soit présent dans le répertoire "lib" lui-même situé sous le répertoire contenant l'éditeur-assembleur EID210100. |
| |
| Cette fonction permet d'initialiser le circuit intégré SJA1000, cœur de la carte CAN-PC104 de chez ATON-SYSTEMES. Aucun paramètre n'est passé ni retourné. | Veiller également à ce que ce fichier ''Aton_CAN.o'' soit inclus au "linker". |
| | |
| | Pour ce faire : |
| | |
| | Dans logiciel EID210, sélectionner "Configuration" puis "GNU C/C++" puis "Linker" puis "Ajouter" puis retrouver et sélectionner le fichier ''Aton_CAN.o'' qui viendra s'ajouter aux fichiers déjà présents c'est à dire ''CTR0.o'' et ''EID210.o''** |
| | |
| | * Fonction **''Init_Aton_CAN()''** |
| | |
| | Cette fonction permet d'initialiser le circuit intégré SJA1000, cœur de la carte CAN-PC104 de chez Aton Systèmes. Aucun paramètre n'est passé ni retourné. |
| Cette fonction est à appeler dans la partie "Initialisation" du programme application | Cette fonction est à appeler dans la partie "Initialisation" du programme application |
| |
| * Fonction **Ecrire_Trame(Nom_Trame)** | * Fonction **''Ecrire_Trame(Nom_Trame)''** |
| |
| Cette fonction permet d'envoyer une ''trame'' sur le réseau CAN. | Cette fonction permet d'envoyer une trame sur le réseau CAN. |
| La variable passée est une variable structurée sous le modèle ''Trame'' (modèle défini dans le chapitre précédent). | La variable passée est une variable structurée sous le modèle ''Trame'' (modèle défini dans le chapitre précédent). |
| Cette fonction ne renvoi pas de paramètre. | Cette fonction ne renvoie pas de paramètre. |
| |
| * Fonction **Lire_Trame(&Nom_Trame_recue) ** | * Fonction **''Lire_Trame(&Nom_Trame_recue)'' ** |
| |
| Cette fonction permet de savoir si une trame a été reçue du réseau CAN et si oui d'accéder à celle-ci. La variable passée est un pointeur sur variable structurée sous le modèle ''Trame'' (modèle défini dans le chapitre précédent). | Cette fonction permet de savoir si une trame a été reçue du réseau CAN et si oui d'accéder à celle-ci. La variable passée est un pointeur sur variable structurée sous le modèle ''Trame'' (modèle défini dans le chapitre précédent). |
| Le paramètre renvoyer vaut 1 si un message a été reçu et 0 si aucun message n'a été reçu. | Le paramètre renvoyer vaut 1 si un message a été reçu et 0 si aucun message n'a été reçu. |
| |
| * Fonction **Affiche_Trame(Nom_Trame)** | * Fonction **''Affiche_Trame(Nom_Trame)''** |
| |
| Cette fonction permet d'afficher une trame sur l'écran de l'ordinateur connecté à l'unité centrale programmable. | Cette fonction permet d'afficher une trame sur l'écran de l'ordinateur connecté à l'unité centrale programmable. |
| ===== Principe des échanges sur le bus ===== | ===== Principe des échanges sur le bus ===== |
| |
| L'utilisation du ''CAN Expander'' MCP25050 impose différents types de ''trames'' (d'après la page 2 dans la notice technique du ''CAN Expander'' MCP25050) | L'utilisation du CAN Expander MCP25050 impose différents types de trames (d'après la page 2 dans la {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} du CAN Expander MCP25050) |
| |
| * **Trame ''IM'' (Input Message)** | * **Trame ''IM'' (Input Message)** |
| C'est en fait une ''trame'' de commande (ou missive) envoyée par le contrôleur à un nœud destinataire (ex: écriture d'une valeur dans un registre du ''CAN Expander'' MCP25050 destinataire) | C'est en fait une trame de commande (ou missive) envoyée par le contrôleur à un nœud destinataire (ex: écriture d'une valeur dans un registre du CAN Expander MCP25050 destinataire) |
| |
| {{ :fr:examples:can:wiper:trame_im.png |''Trame IM''}} | {{ :fr:examples:can:wiper:trame_im.png |''Trame IM''}} |
| |
| * **Trame ''Ack'' (Acknowledge Message)** | * **Trame ''Ack'' (Acknowledge Message)** |
| C'est une ''trame'' de réponse à une IM informant que le nœud destinataire s'est reconnu et a bien pris en compte la missive IM qui vient de circuler sur le bus. | C'est une trame de réponse à une IM informant que le nœud destinataire s'est reconnu et a bien pris en compte la missive IM qui vient de circuler sur le bus. |
| |
| {{ :fr:examples:can:wiper:trame_ack.png |''Trame ACK''}} | {{ :fr:examples:can:wiper:trame_ack.png |''Trame ACK''}} |
| |
| * **Trame ''IRM'' (Information Request Message)** | * **Trame ''IRM'' (Information Request Message)** |
| C'est en fait une ''trame'' de type requête (interrogation) envoyée par le contrôleur à un nœud destinataire lui demandant des informations (ex: Lecture d'un ou de plusieurs registre(s) du ''CAN Expander'' MCP25050 destinataire) | C'est en fait une trame de type requête (interrogation) envoyée par le contrôleur à un nœud destinataire lui demandant des informations (ex: Lecture d'un ou de plusieurs registre(s) du CAN Expander MCP25050 destinataire) |
| |
| {{ :fr:examples:can:wiper:trame_irm.png |''Trame IRM''}} | {{ :fr:examples:can:wiper:trame_irm.png |''Trame IRM''}} |
| |
| * **Trame ''OM'' (Output Message)** | * **Trame ''OM'' (Output Message)** |
| C'est une ''trame'' de réponse à une IRM, envoyée par le nœud destinataire de l'IRM précédemment envoyée et contenant dans sa zone ''Data'' les informations demandées. | C'est une trame de réponse à une IRM, envoyée par le nœud destinataire de l'IRM précédemment envoyée et contenant dans sa zone Data les informations demandées. |
| |
| {{ :fr:examples:can:wiper:trame_om.png |''Trame OM''}} | {{ :fr:examples:can:wiper:trame_om.png |''Trame OM''}} |
| |
| **Conséquences :** | **Conséquences :** |
| * Dans un programme, suite à l'envoi d'une ''IM'' ou d'une ''IRM'' (utilisation de la fonction ''Ecrire_Trame( )''), il est impératif d'attendre la réponse (utilisation de la fonction ''Lire_Trame( )''), avant d'envoyer une nouvelle trame: | * Dans un programme, suite à l'envoi d'une ''IM'' ou d'une ''IRM'' (utilisation de la fonction ''Ecrire_Trame( )''), il est impératif d'attendre la réponse (utilisation de la fonction ''Lire_Trame( )''), avant d'envoyer une nouvelle trame : |
| * cette réponse sera une ''Ack'' suite à une ''IM'' | * cette réponse sera une ''Ack'' suite à une ''IM'' |
| * cette réponse sera une ''OM'' suite à une ''IRM'' | * cette réponse sera une ''OM'' suite à une ''IRM'' |
| Lors du premier échange, il conseillé de prévoir un ''Time out'' et l'affichage d'un message d'alerte dans le cas où il n'y a pas de réponse, afin d'éviter une situation bloquante. | Lors du premier échange, il conseillé de prévoir un Time out et l'affichage d'un message d'alerte dans le cas où il n'y a pas de réponse, afin d'éviter une situation bloquante. |
| |
| **Remarques :** | **Remarques :** |
| * L'identificateur d'une ''OM'' est le même que celui de l'IRM qui est à l'origine. | * L'identificateur d'une ''OM'' est le même que celui de l'''IRM'' qui est à l'origine. |
| * L'identificateur d'une ''Ack'' est différent que celui de l'IM qui est à l'origine. | * L'identificateur d'une ''Ack'' est différent que celui de l'''IM'' qui est à l'origine. |
| |
| **Trames particulières :** | **Trames particulières :** |
| * A la mise sous tension un ''CAN Expander MCP25050'' signale sa présence par l'envoi automatique (sans interrogation) d'une trame de type ''OB'' (On Bus Massage). | * A la mise sous tension un CAN Expander MCP25050 signale sa présence par l'envoi automatique (sans interrogation) d'une trame de type ''OB'' (On Bus Massage). |
| * Il est possible de configurer un ''CAN Expander MCP25050'' pour qu'il envoi automatiquement une trame | * Il est possible de configurer un CAN Expander MCP25050 pour qu'il envoie automatiquement une trame |
| * lorsqu'une de ses entrées subi un changement d'état prédéfini (Pages 23 et 26 doc MCP25050) | * lorsqu'une de ses entrées subi un changement d'état prédéfini (pages 23 et 26 {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} MCP25050) |
| * lorsqu'une entrée alalogique prédéfinie croise un seuil de tension ''Threshold detection'' (Pages 23 et 35 doc MCP25050) | * lorsqu'une entrée analogique prédéfinie croise un seuil de tension ''Threshold detection'' (pages 23 et 35 {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} MCP25050) |
| * à intervalle de temps régulier ''Scheduled transmissions'' (Pages 24 doc MCP25050) | * à intervalle de temps régulier ''Scheduled transmissions'' (page 24 {{:fr:hardware:didalab:mcp2502x_5x.pdf|doc. technique}} MCP25050) |