This is an old revision of the document!
Le système comporte les éléments suivants :
Remarque :
Remarque: Dans l'application “Commande d'essuie-glace, réf : CAN01B, on n'utilise pas de module 4 sorties de puissance TOR.
Les programmes fournis font appel à des fichiers de définitions:
Définition des unions et structures particulières (Voir dans fichier CAN_VMD.h)
Les structures définies ci-après ont été définies en conformités aux différents registre du SJA1000 (se référer à la notice technique du SJA1000, pages 39 ; 40 et 41)
L'union tr_info est à associer au registre d'information trame du circuit SJA1000
typedef union { struct { unsigned char extend:1; // 1 bit pour définir le bit IDE (mode étendu ou standard) unsigned char rtr:1; // 1 bit pour définir le type de trame unsigned char nul:2; // 2 bits inutilisés unsigned char dlc:4; // 4 bits pour définir le DLC (longueur de la trame) } champ; unsigned char registre; } tr_info; // taille occupation: 8 bits
L'union ident_standard permet de définir la partie identification en mode standard
typedef union { struct {// Eléments constitutif de l'identificateur dans une trame unsigned short ident:11; // les 11 bits d'identification en mode standard unsigned short nul:5; // 5 bits inutilisés } identificateur; struct {// Les mêmes éléments mais dans les registres du circuit SJA1000 unsigned char ident1; // premier registre 8 bits de définition de l'identificateur unsigned char ident2; // deuxième registre 8 bits de définition de l'identificateur } registre; unsigned short valeur; // La taille globale est de 16 bits } ident_standard;
Remarque : Cette union permet de définir les mêmes informations mais de trois façons différentes.
L'union ident_extend permet de définir la partie identification en mode étendu
typedef union { struct {// Eléments constitutif de l'identificateur dans une trame unsigned long ident:29; // les 29 bits d'identification en mode étendu unsigned long x:3; // 3 bits inutilisés } identificateur; struct {// Les mêmes éléments mais dans les registres du circuit SJA1000 unsigned char ident1; // premier registre 8 bits de définition de l'identificateur unsigned char ident2; // deuxième registre 8 bits de définition de l'identificateur unsigned char ident3; // troisième registre 8 bits de définition de l'identificateur unsigned char ident4; // quatrième registre 8 bits de définition de l'identificateur } registre; unsigned long valeur; // La taille globale est de 32 bits } ident_extend;
Remarque : Cette union permet de définir les mêmes informations mais de trois façons différentes.
La structure Trame permet de définir une trame complète
typedef struct { tr_info trame_info; // Taille 8 bits union { ident_standard standard; // Identificateur en mode standard (2*8bits LSB) ident_extend extend; // Identificateur en mode étendu (4*8bits) } ident; unsigned char data[8]; // les 8 octets de données (au maximum) } Trame; // Taille globale: 13 octets
Exemple : Définir une trame qui permette d'écrire dans un registre du circuit MCP25050 implanté sur le module 8 entrées Commodo Essuie-Glace.
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 “Input Message”, avec la fonction “Write register” (voir documentation technique du MPC25025 pages 22). Ce tableau indique que la trame comportera une zone de donnée composée de trois octets (donc DLC =3)
Remarques :
1. Rôle de l'octet mask
2. Détermination de l'adresse
Les adresses des différents registres sont définies dans la table 3 du chapitre 3, aux pages 15 et 16 de la notice technique du circuit MCP25050. Il faut prendre connaissance de la “note 1” qui indique qu'il faut ajouter 1Ch aux adresses indiquées dans le tableau, à l'exception du registre GPDDR (repère 1 en bas de la page 15) Ex: pour écritre dans le registre de sortie GPLAT, l'adresse sera 02h+1Ch = 1Eh
3. Détermination de l'identificateur
Dans l'annexe 1, il est décrit les principes d'identification des différents modules. Des labels sont également définis dans le registre CAN_VMD.h
Trame T_IM_Commodo_EG; IM → Input Message Trame destinée au module 8 entrées sur lequel est connecté le commodo Essuie-Glace
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).
T_IM_Commodo_EG.trame_info.registre=0x00;//On initialise tous les bits du registre à 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 données de 8 bits envoyés T_IM_Commodo_EG.ident.extend.identificateur.ident= Ident_T_IM_Commodo_EG; // voir dans CAN_VMD.H // Pour définir l'adresse du bloc optique arrière droit -> voir chapitre suivant T_IM_Commodo_EG.data[0]=0x1F; // "Adresse" -> registre concernée GPDDR T_IM_Commodo_EG.data[1]=0x7F; // "Masque" -> seuls les 7 bits de poids faibles seront affectés par l'écriture T_IM_Commodo_EG.data[2]=0x7F; // "Valeur" -> on met à 1 les 7 bits de poids faibles
Des fonctions spécifiques à l'accès au réseau CAN via la carte CAN-PC104 de chez “ATON SYSTEMES”. 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 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.
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é. Cette fonction est à appeler dans la partie “Initialisation” du programme application
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). Cette fonction ne renvoi pas de paramètre.
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.
Cette fonction permet d'afficher une trame sur l'écran de l'ordinateur connecté à l'unité centrale programmable. 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.
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)
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 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 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 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.
Conséquences :
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 :
Trames particulières :
(Pages 23 et 35 doc MCP25050)