Bus CAN et systèmes PSOC5 publié le 10/02/2013 - mis à jour le 17/10/2019
2. Exploitation du bus CAN avec le microcontrôleur PSOC5
2.1 Module transceiver
Afin d’interfacer correctement le contrôleur CAN présent dans le microcontrôleur, un module transceiver est nécessaire. Il est bien sur possible de le câbler directement sur la carte LAB du kit. J’ai préféré une réalisation offrant plus de modularité.
Le transceiver employé (TJA1050) a été implanté sur un circuit imprimé sur lequel existe la possibilité de placer les résistances de terminaison du bus (2 x 60 Ohms). Les documents nécessaires à la réalisation de cette interface sont accessibles :
L’exploitation proposée consiste à réaliser un émetteur ainsi qu’un récepteur. Toutes les déclinaisons/exploitations sont ensuite possibles.
2.2 L’émetteur, construction du projet
Le top design (PSOC Creator 1.0)
Il faut ajouter au top design le composant contrôleur CAN (renommé ici CAN_TX).
Il faut ensuite le configurer.
Arbitrairement le choix a été fixé à une vitesse de transmission de 500kb/s et 1 octet de champ de donnée.
1. Imposer le nom du contrôleur CAN
2. ôter l’option du signal de validation du transceiver (on ne se servira que des broches RX et TX))
3. Sélectionner l’option Automatic
1. Choisir la vitesse de transmission
2. Sélectionner le timing désiré (double clic). Les champs de la ligne "3" seront complétés automatiquement.
Pas de manipulation ici, sauf si des besoins d’interruptions supplémentaires sont nécessaires.
1. Modification de DLC = 1 (longueur de donnée à transmettre ici, 1 octet)
2. Changement du nom de la case "mailbox" (champ de données) à transmettre.
3. Identification du noeud emetteur (codé sur 11bits _Full_ en mode IDE il est possible de coder l’identifiant sur 29 bits), choisi arbitrairement à 0x005.
Chaque "MailBox" peut contenir jusqu’à 8 octets à transmettre. Les variables permettant de compléter ces "mailboxes" sont identifiées ainsi dans la fonction CAN_TX_TX_RX_func.c (voir après) :
Pour la "mailbox0" (ici renommée TX_Message), la variable "container" est :
CAN_TX_TX_DATA_BYTE1(0).
Elle contient le premier octet à transmettre. Cela nous suffit puisque DLC=1. Si on avait désiré transmettre plus d’octets (DLC = 2 par exemple), il aurait fallu employer deux variables CAN_TX_TX_DATA_BYTE1(0) et CAN_TX_TX_DATA_BYTE2(0).
A ce stade il convient d’assigner les broches de l’afficheur ainsi que du contrôleur.
Il faut à présent construire le projet "Shift F6" et compléter le programme principal ainsi que la fonction CAN_TX_TX_RX_func.c qui a été générée