Cours/TD d’informatique embarquée Utilisation d’un microcontrôleur MBED Partie 9 Communication série SPI Serial communication with SPI Plan du cours 9.1. Introduction 9.2. Etude de la communication SPI 9.3. Utilisation de SPI avec mbed 9.4. Etude du circuit MCP3201 9.5. Etude du circuit MCP4141 CV C/TD INFO2 - Partie 9 page 1 9.1. Introduction SPI est l’abréviation de __________________________________. __________________________________ SPI est un protocole _____________________________________. _____________________________________ Ce protocole utilise une relation maître/esclave entre les composants. comp Lorsque le maître initie la communication en sélectionnant un esclave, les données peuvent être transférées ______________________________ : communication _____________________ Il existe de nombreux composants compatibles SPI. SPI Le protocole SPI utilise 4 signaux de communication (+ la masse) : • __________ : _______________________ (horloge) • __________ : _______________________ (transmission du maître vers l’esclave) • __________: _______________________ (transmission de l’esclave vers le maître) • ____ : ___________________ (sélectionne l’esclave actif, un fil CS par esclave) 9.2 Etude de la communication SPI SPI est adapté _______________________________________, _______________________________________, par exemple des données de communication entre 2 microprocesseurs ou le transfert de données données à partir d'un convertisseur analogique-numérique numérique nécessitant _____________________________________________. _____________________________________________ Le transfert de données est plus _________________________________,, car la fréquence de l’horloge ________________________, ________________________ il n’y a pas besoin de transmettre ______________________ ______________________. La communication SPI est bien adapté pour _______________________________________. _______________________________________ Procédure de transfert de données : 1. Le maître __________________ (SCLK) qui doit être supportée par l’esclave (jusqu’à 70MHz) 2. Le maître _____________________en _____________________ activant ___________________(Souvent (Souvent actif à 0V) 3. Le maître active _______________________ et ___________________________________ 4. L’esclave renvoie les données de la même manière sur le fil MISO Rq : Le nombre de bits de chaque trame peut être configuré (généralement compris entre 4 et 16 bits) CV C/TD INFO2 - Partie 9 page 2 Le maître configure également la polarité de l’horloge (CPOL) et la phase (CPHA) : Il y a donc 4 modes possibles du bus SPI : En général, les composants nts SPI sont configurés pour fonctionner dans l’un de ces 4 modes (voir dans la datasheet de chaque composant). Exercice 1 : Rechercher 3 composants fonctionnant sur le bus SPI (capteur de température, LCD...) - 9.3 Utilisation de SPI avec mbed Les méthodes associées au type SPI sont dans le tableau ci-dessous : SPI SPI format frequency write Utilisation Définit un maître SPI connecté à des broches spécifiques _______________________________________________________________________ ______________________________________ Permet ______________________ d’une donnée ou d’une commande et ___________ ________________________ l’esclave ________________________de Rq : pour faire une lecture il faudra « paradoxalement » utiliser la méthode write() Remarque : Cee tableau regroupe les méthodes d’un maître SPI. Il existe également une liste de méthode pour créer un esclave SPI sur mbed : SPISlave. Nous n’en parlerons pas dans le cadre de ce cours. CV C/TD INFO2 - Partie 9 page 3 Le LPC1768 possède 2 interfaces SPI sur les broches p5/p6/p7 p et p11/p12/p13. En plus de ces broches il faudra utiliser ________________________ ____________________________________________. Par défaut les réglages de l’interface mbed SPI sont : • Fréquence = 1MHz • Longueur des données : 8 bits • Mode de transmission : 0 Exercice 2 : Ecrire les lignes de code permettant de définir un port SPI sur les broches p11, p12 et p13 du LPC1768, de régler la fréquence de transmission à 500 kHz, le format de données sur 8 bits, et le mode à 1. 9.4 Etude du composant MCP3201 nalogique-numérique 2,7V/12bits MCP3201 est un convertisseur analogique Il sera utilisé en lecture, donc seule la broche MISO du mbed sera connectée Montage à réaliser : CV C/TD INFO2 - Partie 9 page 4 Après la mise à ‘0’ de CS les données sont lues par le maître à partir du 4ème front montant • 4ème front : B11 • … • 14ème front : B1 • 15ème front : B0 • 16ème front : de nouveau B1 (il faudra ne pas en tenir compte) Extrait de la datasheet illustrant la transmission des 12 bits de mesure : Code permettant de lire la valeur du convertisseur : #include "mbed.h" SPI spi(p5, p6, p7); // mosi, miso, sclk DigitalOut cs(p8); int main() { cs = 1; //initialisation de CS à ‘1’ spi.format(16,0); //communication sur 16 bits / mode 0 spi.frequency(1000000); //fréquence de 1MHz while(1){ cs = 0; //CS à ‘0’ <-> activation du circuit unsigned int valeur = spi.write(0x00); //Lecture de la valeur en //écrivant n’importe //quoi... valeur = (valeur>>1)&0x0FFF; //Mise en forme des deux //bits lus et décalage de //1bits pour ne pas tenir //compte du deuxième B1 printf("valeur lue = %d\n\r", valeur); //Affichage sur la //console cs = 1; } //CS à ‘1’ <-> désactivation } CV C/TD INFO2 - Partie 9 page 5 Exercice 3 : (si vous n'avez pas assez de composant MCP3201 passez à la partie 9.4) a) Dessiner le schéma électrique d'un potentiomètre connecté entre le 0V et le 3,3V et dont la tension du point milieu évolue entre 0 et 3,3V. b) Réaliser et tester le montage et le programme ci-dessus (vous utiliserez un potentiomètre pour générer la tension mesurée par le convertisseur). Vérifier que la mesure est correcte. c) Relever à l'oscilloscope la trame transmise entre le MCP3201 et le mbed. chronogramme de MISO et SCLK d) Générer un signal triangulaire avec la sortie AnalogOut, de fréquence 5HZ et mesurer la avec le MCP3201, afficher la mesure sur la console. 9.4 Etude du composant MCP4141 MCP4141 est un potentiomètre ajustable SPI. Il possède une mémoire permettant de le régler. • Il est possible de fixer la position du point milieu en envoyant une valeur à l’adresse 0x00 de sa mémoire (valeur comprise entre 0 et 127). • Il est possible d’incrémenter la position du point milieu en envoyant la commande 0x04. • Il est possible d’incrémenter la position du point milieu en envoyant la commande 0x08. Il sera utilisé en écriture, donc seule la broche MOSI du mbed sera connectée. La résistance entre 5 et 6 (et entre 6 et 7) sera variable. CV C/TD INFO2 - Partie 9 page 6 Le programme suivant permet de fixer la l valeur du potentiomètre : #include "mbed.h" SPI spi(p5, p6, p7); void ecriture(int n); //prototype de la fonction ecriture int main() { cs=1; spi.format(8,0); // 8 bits , mode 0 spi.frequency(1000000); while (1) { ecriture(63);// Fixe le potentiomètre au milieu de sa course wait(1); } } void ecriture(int n) { //n est compris entre 0 et 127 cs=1; cs=0; spi.write(0x00); spi.write(n); cs=1; } Exercice 4 : a) Réaliser et tester le montage et le programme ci-dessus. ci dessus. Mesurer à l'aide d'un multimètre la résistance entre les broches 5 et 7, puis entre les broches 5 et 6. Résistances mesurées : b) ) Réaliser un pont diviseur de tension avec une résistance de 10kW et la résistance variable du MCP4141. Mesurer la tension de ce pont diviseur avec une entrée AnalogIn, AnalogIn, afficher la valeur lue sur la console c) Calculer la valeur de la résistance afficher sa valeur sur la console. SPI informatiquement informatiquement et d) Modifier le programme pour que la résistance s'incrémente toutes les 500 ms (utiliser la fonction incrément présentée sur la vidéo). CV C/TD INFO2 - Partie 9 page 7 Questions de cours : Q1) Que signifie SPI ? Q2) Combien faut-il de signaux pour utiliser une composant SPI ? Q3) Combien faut-il de signaux pour utiliser 5 composants SPI ? Q4) En utilisant un seul port SPI, combien de composants SPI pouvons nous connecter sur le LPC1768 ? Q5) Quel est l'avantage du bus SPI par rapport à un bus I²C ? Q6) Quel est l'inconvénient du bus SPI par rapport au bus I²C ? Q7) Qu'est-ce qu'une communication full-duplex ? Q8) En mode 1, le transfert des données se fait sur quel front ? Q9) Avec le MCP3201 pourquoi ne connecte-t-on que le fil MISO ? Q10) Quelle ligne d'instruction en langage C permet de supprimer le bit de poids faible et de forcer à 0 les 4 bits de poids forts sur une donnée de 16 bits ? CV C/TD INFO2 - Partie 9 page 8
© Copyright 2024