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