• Aucun résultat trouvé

protocole SPI

N/A
N/A
Protected

Academic year: 2022

Partager "protocole SPI"

Copied!
6
0
0

Texte intégral

(1)

Systèmes communicants : TP sur le

protocole SPI

Mise en oeuvre du bus SPI à par r d'un microcontrôleur PIC  P18F2620 et d’un conver sseur numérique- analogique  DAC 12bits MCP4821 (à interface SPI)

Une liaison SPI (pour Serial Peripheral

Interface) est un bus de données série synchrone, qui opère en mode Full-duplex. Les circuits communiquent selon un schéma maître-esclaves, où le maître s'occupe totalement de la

communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée chip select.

Théorie

Etude du bus SPI

1) Nommer les fils nécessaires pour réaliser un bus au protocole SPI -

- - -

2) Quel type de liaison est réalisé par la liaison SPI ?

( liaison série ou parallèle , synchrone ou asynchrone , half duplex ou full duplex )

3) A partir du schéma structurel ci-dessous , repérer et nommer les fils du bus SPI :

SPI Master

SCLK MOSI MISO SS1 SS2 SS3

SPI Slave SCLK

MOSI MISO SS

SPI Slave SCLK

MOSI MISO SS

SPI Slave SCLK

MOSI MISO SS

(2)

Etude du circuit MCP4821

A partir de la documentation technique sur ce circuit , répondez aux questions suivantes : 4) Donner la résolution de chaque DAC .

5) Quelle est la tension de référence de ce DAC ?

6) Combien de convertisseurs DAC intègre ce circuit ? (voir le « block diagram »)

D'après le schéma structurel , quel est le DAC utilisé ?

7) On suppose que le « gain » (amplification en tension) sélectionné pour ce DAC est de 2.

Calculer la tension analogique obtenue en sortie de ce circuit si la donnée numérique en entrée est 6AD (donnée en hexadécimale).

8) A partir de la question 6) , donner la valeur binaire nécessaire pour programmer (écrire) le registre de commande du circuit MCP4821 à la configuration demandée.

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

9) Analyse du programme

- Surligner l'instruction permettant de valider le convertisseur DAC MCP4821 (entrée Chip select) . - Repérer sur le programme la boucle sans fin . Que permet elle de réaliser en sortie du DAC ? - A partir du document sur le pic18F2620 en mode spi (page 18) , commenter l'action de chaque bit du registre de contrôle SSPCON1 , pour paramétrer le protocole SPI.

SSPCON1 WCOL SSPOV(1) SSPEN(2) CKP SSPM3(3) SSPM2(3) SSPM1(3) SSPM0

0 0 1 0 0 0 0 0

- Quel est le nom du registre du PIC 18F2520 qui permet d'émettre ou de recevoir les données ?

(3)

#include <p18f2620.h> // « header » incluant tous les registres internes du µC PIC18F2620

#define CS PORTCbits.RC2 // définit la broche CS sur la ligne RC2 du port C du pic

#define TRIS_CS TRISCbits.TRISC2 // TRIS_CS permet de définir la ligne RC2 en entrée ou en sortie void initSPI_emission(void) // initialise l'interface SPI sur PIC18

{

DDRCbits.RC3=0; //SCK en sortie

DDRCbits.RC5=0; //SDO en sortie

SSPSTAT=0b01000000; //echantillonne au milieu de la donnée, sur front montant SSPCON1=0b00100000; // active SPI MASTER, IDLE=0, clock=FOSC/4 PIR1bits.SSPIF=0; // efface drapeau d'emission SSPIF

TRIS_CS=0 ; // signal CS en sortie

CS=1; // CS= 1 (chip select invalidé)

}

void emet_SPI(unsigned int n) // envoie synchro, pouls et spo2 {

unsigned char forts,faibles;

forts=n>>8; // recupere poids forts faibles=n|0x0F; // recupere poids faibles

CS=0; // debut transmission

forts|=0b00010000; // Sortie MCP4821 activee G=2 SSPBUF=forts;

while(!PIR1bits.SSPIF); // attend la fin de l'émission PIR1bits.SSPIF=0;

SSPBUF=faibles; // émission

while(!PIR1bits.SSPIF); // attend la fin de l'émission PIR1bits.SSPIF=0;

CS=1; // fin transmission, d=buffer en sortie du MCP4821 }

void main(void) {

unsigned int a;

init_horloge_interne();

initSPI_emission(); // appel le sous programme (fonction en langage C) initSPI_emission(void) while(1) // demo, generateur de rampes

{

for (a=0;a<=4095;a+=10) {

emet_SPI(a); // appel le sous programme emet_SPI(unsigned int n) }

} }

TP Génération d'une rampe

1) A partir du logiciel isis (version 7.7) ouvrir le fichier de simulation* et simuler le graphe pour obtenir la courbe en sortie du DAC.

Imprimer la courbe obtenue . Mesurer la valeur min et max obtenue ainsi que la durée d'une rampe Validation professeur :

*Vérifier que le fichier SPI.hex est chargé dans le microcontrôleur

(4)

2) Lancer l'animation (touche « play ») et imprimer les valeurs obtenues sur le moniteur (SPI Debug) avec au moins 2 cycles d'écriture . (L'animation nécessite un ordinateur puissant )

Commenter chaque ligne sur votre impression .

Convertir en binaire les données hexadécimales et commenter les 4 bits de poids forts :

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

Calculer la tension de sortie du DAC obtenue.

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

Calculer la tension de sortie du DAC obtenue.

3) Modifier le programme pour avoir en sortie du DAC un « générateur de triangle » (triangle isocèle)

Pour cela utiliser le compilateur C18 avec MPLAB afin de compiler votre programme (ouvrir le projet SPI.mcp ). Imprimer votre programme en ajoutant votre nom en commentaire.

Inclure le fichier.hex obtenu dans le schéma de simulation avec Isis. (Faire un clic doit sur le Pic 18F2620 puis « Edit properties ». Insérer votre fichier.hex à la ligne « Program File ».)

Simuler ensuite votre graphe (en modifiant le temps max).

Mesurer les valeurs max et min ainsi que la période du signal.

MPLAB –- Project — open « SPI.mcp »

Sauvegarder le projet (save project as) avec un autre nom

Faire les modifications nécessaires pour générer un triangle ( isocèle) dans votre programme.

Compiler ensuite votre programme (bouton « Make » ou « build all »)

Validation professeur :

Validation professeur :

Validation professeur :

(5)

5) Reprendre le fichier d'origine (générateur de rampe (fichier SPI.hex) ) .

- Mettre des sondes de tension (Voltage probe mode) aux signaux SCK , CS/ , SDI du composant MCP 4821 .

- Dans Graph mode , sélectionner Mixed et faire une fenêtre de ce graphe pour signaux numériques et analogiques dans la zone de l'éditeur .

Dans l'onglet « Graph » , sélectionner « Add Trace ». Dans « Probe P1 » , sélectionner le signal SCK et le paramétrer en mode « Digital ».

Dans l'onglet « Graph » , sélectionner « Add Trace ». Dans « Probe P1 » , sélectionner le signal CS/ et le paramétrer en mode « Digital ».

Dans l'onglet « Graph » , sélectionner « Add Trace ». Dans « Probe P1 » , sélectionner le signal SDI et le paramétrer en mode « Digital ».

Dans l'onglet « Graph » , sélectionner « Add Trace ». Dans « Probe P1 » , sélectionner le signal VS et le paramétrer en mode « Analog».

Dans l'onglet « Graph » , sélectionner « EditTrace ». Paramétrer le début du graphe à t=4,139ms et à la fin du graphe à t=4,144ms.

Dans l'onglet « Graph » , sélectionner « Simulate Graph » ( ou appuyer sur la barre d'espace directement dans le graphe) pour lancer la simulation des signaux . Les chronogrammes vont apparaître sur le graphe.

Agrandir la fenêtre du graphe (double clic sur le bandeau vert du graphe) . Imprimer le graphe (Dans Files puis Print ) .

A quel état logique doit être la broche de validation CS/ pour valider la transmission de la donnée ? Mettre sur le graphe , les données binaires obtenues sur le signal de donnée SDI (donnée sur 16 bits s'enclenchant sur les fronts descendants du signal d'horloge SCK)

Ces 16 bits représentent 4 bits de configuration + donnée

N

sur 12 bits.

Donner la signification des 4 bits de configuration (quartet de poids fort)

Convertir la donnée

N

en hexadécimal et ensuite la convertir en décimal

(6)

Mettre sur le graphe , la valeur analogique du signal VS .

A l'aide de la formule donnée en sortie du DAC MCP4821 : Vout = (2,048∗2∗N)

212 , calculer la tension VS en sortie de ce DAC.

Comparer cette valeur avec la valeur mesurée en simulation en VS . Calculer le pourcentage d'erreur faite sur la mesure par rapport à la valeur théorique ( % d'erreur = [(valeur mesurée – valeur théorique) / valeur théorique ]*100 )

Conclure si la mesure est précise ( mesure précise si <1 % d'erreur).

Lancer l'animation de ce circuit en sélectionnant le touche lecture.

Appuyer ensuite sur la touche Pause

Avec le moniteur SPI , recopier la ligne correspondant à la donnée obtenue en sortie de ce DAC pour le temps demandé à la simulation.

Donnée obtenue avec le moniteur SPI ( recopier la ligne )

Comparer cette donnée avec votre valeur mesurée à partir des chronogrammes.

Ici donnée mesurée entre 2,112ms et 2,115ms

Références

Documents relatifs

This application note provides code samples, which will enable the user to get a jump- start into using some of the serial communication interfaces of the LPC2000 family.. In

To satisfy this need, a formal SPI manager education is needed beyond standard project management or standard process engineering.. Properly educated SPI

In this way, the system shall be able to switch the power source from external power link to a battery able to supply the data processing unit of the system, when the external

Si l'évolutionprogressivedes ma- chines-outilset de leurs composants a étédécisivepourla très largeadop- tion de latechniqued'usinageà gran- de vitesse,sansparlerdes

communication communication série synchrone et full duplex entre deux terminaux, un maître et un esclave (Master-Slave), généralement sur un même circuit imprimé.. Synchrone : les

Un compteur aura pu servir ` a m´ emoriser la case m´ emoire contenant la derni` ere mesure : exporter cette variable vers main.c (comment faire ?) et tester cette variable

l'initiative des échanges : quand le maître sélectionne l'esclave et génère l'horloge, les données sont échangées dans les deux directions, simultanément.. Le maître ne tient

Sur la figure, on y voit trois lignes « utiles » que sont SDO, SDI et SCK et une ligne de sélection de mode de fonctionnement du circuit ( maître ou esclave ) appelée SS. * La