TP BUS CAN LIN I2C - ABSA-NT
Transcription
TP BUS CAN LIN I2C - ABSA-NT
BUS CAN LIN I2C ABSA-NT: www.absa-nt.com/ 1/6 Description du matériel Carte ScanLin : Carte Car_Scan -Interface Can ABSA-NT: www.absa-nt.com/ 2/6 -Interface LIN Sur cette carte nous avons deux microcontrôleur l’un servant pour le LIN à laquelle nous associons les afficheurs 7 segments que nous allons utiliser pour afficher la distance ainsi que le MCP-201 qui est un transmetteur LIN. L’autre servant pour le CAN à laquelle nous associons le capteur de proximité, le moteur à contrôler avec sa vitesse et sa mise en marche (Bouton poussoir DM et CH), pour faire fonctionner le moteur en marche arrière il faut d’abord appuyer sur le bouton CH puis le bouton DM. Le bouton DM appuyé seul permet de faire fonctionner le moteur en marche avant, ainsi que le TJA1050 qui est l’émetteur-récepteur CAN. Le Bus I2C Le Bus I2C (Inter Integrated Circuit) est un bus série synchrone de données conçu par Philips pour les applications de domotique et d’électronique domestique. Il est sur deux fils, un des fils (SDA, c'est la ligne de données) du bus transporte les données, et l'autre (SCL, la ligne d'horloge) "synchronise" la communication entre les éléments du bus. Le bus I2C supporte le multimaitre (plusieurs maîtres peuvent cohabiter sur un même bus), est rapide (400 kilos bits / seconde pour les plus récents) et pas cher. Pour transmettre le bus I2C, il faut deux conditions particulières : condition de départ et condition d’arrêt. Pour le départ il faut donc que la ligne de données soit à un niveau logique « 0 » et un front ABSA-NT: www.absa-nt.com/ 3/6 descendant sur la ligne d’horloge. Et pour l’arrêt c’est l’inverse c’est-à-dire ligne d’horloge à un niveau logique « 1 » et un front montant sur la ligne de données. Afficher la vitesse sur les LED Objectif Nous voulons mettre en œuvre la communication I2C ainsi que la communication CAN de la carte Car_Scan. Pour ce faire, nous allons donc afficher la vitesse du moteur sur les LED du bus I2C. Réalisation du programme Dans un premier temps, nous allons relever la vitesse du moteur pour ensuite pouvoir l’afficher sur les LED. Pour l’envoyer sur les LED, nous allons nous servir de la fonction I2C_SendAdresse (BYTE adres, BYTE deb). Nous mettons donc l’adresse des LED puis ensuite nous utilisons I2C_SendData pour envoyer la vitesse précédemment relevée. Programme : A l’aide de ce petit programme nous pouvons ainsi afficher la vitesse du moteur sur les LED. Et si nous voulons l’afficher sur les LED du bus LIN il suffit tout simplement de mettre Lin_Msge1Data(MSG_LIN_LEDNIVEAU,bLsb). Capteur de température Nous voulons mettre en œuvre la partie I2C de la carte Scan-Lin et la carte Car_Scan. Pour ce faire nous allons réaliser un programme qui permette de communiquer avec le Bus I2C de ces deux cartes pour ainsi obtenir la température et l’afficher par la suite sur les afficheurs 7 segments présent sur la carte Car_Scan. Réalisation du programme permettant la capture de température Dans un premier temps, nous allons utiliser la fonction I2c_SendMsge(BYTE adrs, BYTE rcpsnd, BYTE *dat1, BYTE *dat2) Adrs = l’adresse de la fonction Rcpsnd = nombre de réception et d’envoi. Si on veut recevoir 3 data et en envoyer 2 il faut écrire 0x32. Le premier chiffre correspond au nombre de réception et le deuxième chiffre correspond au nombre d’envoi. *dat1,*dat2 = les données. Mettre l’adresse d’un pointeur ou d’un tableau du style &var. ABSA-NT: www.absa-nt.com/ 4/6 Programme : Dans un premier temps, nous configurons le capteur pour qu’on puisse faire une conversion continue on envois donc à l’adresse 0x9m (m correspondant au numéro de la carte allant de 0 à 3 car on peut communiquer avec au maximum 4 cartes), on envois deux donnée qui permette de lancer la conversion on envois donc 0xAC (dat1) et 0x00 (dat2) si on met 0x01, on effectue une conversion coup par coup. Ensuite on démarre la conversion pour se faire on garde la même adresse mais on envoi cette fois ci 0xEE. Puis on réalise une petite temporisation pour ensuite lire la température du capteur et pour ce faire on doit réaliser à la fois un envoi et une réception. On récupère la valeur reçu pour ensuite l’afficher sur l’afficheur 7 segments ainsi que sur les leds. Pour lire la température on doit envoyer la donnée 0xAA (voir documentation). Activer le Buzzer Objectif Nous voulons mettre en œuvre la communication entre deux cartes via le Bus CAN et le bus LIN. Pour ce faire, nous allons réaliser un programme qui permette d’activer le buzzer de la carte Car_Scan lorsque nous approchons trop près d’un obstacle à l’aide d’un capteur de proximité. Réalisation du programme permettant de faire cette fonction Dans un premier temps, il faut activer le capteur de proximité que lorsque le moteur est en mode marche arrière pour ceci nous mettrons donc ce code : Ensuite nous allons en fonction de la valeur obtenue par le capteur de proximité sachant que la distance mesuré est comprise entre 3 cm et 40 cm. Et également afficher la distance sur les afficheurs 7 segments, nous mettrons donc la fonction suivante : ABSA-NT: www.absa-nt.com/ 5/6 MSG_CAN_TX_CHGE_PROXI est la fonction qui permet de scruter la valeur du capteur de proximité. En fonction de cette valeur, nous faisons une conversion par rapport à la courbe du composant pour ainsi obtenir la distance en cm. ABSA-NT: www.absa-nt.com/ 6/6