TP 5 : Bus SPI

Ce TP constitue la continuité du TD concernant le bus SPI.

Il s'agit d'exploiter le capteur de température TC77-5.0 présent sur la carte de développement utilisée pour les TP sur les microcontrôleurs PIC18F.

Pour rappel :

  • le signal SCK du TC77 est relié à la broche SCK du PIC18F4550,
  • le signal SDI du TC77 est relié à la broche du même nom du PIC18F4550,
  • le signal /CS du TC77 est connecté à la broche RB2.

1. Mise en oeuvre sans utiliser le module SPI du microcontrôleur

Nom du projet : SPI1

Cette première version du TP consiste à communiquer avec le TC77 en agissant directement sur les signaux du bus SPI. C'est une approche simple en terme d'implémentation mais plus lourde en terme d'usage du processeur du uC.

1.1.  Configuration préliminaire

  1. Créer une copie du projet TIMER3 et la nommer SPI1.
  2. Enrichissement du fichier CarteIUT.h :
    1. Ajouter une section relative aux signaux SPI dans le fichier carte_iut.h
    2. Prévoir des define pour gérer l'horloge (ConfigSCK pour la configuration en sortie, SetSCK() pour la mise à 1 et ResetSCK() pour la mise à 0).
    3. Idem pour le signal SDI (ConfigSDI_In() pour SDI en entrée, ConfigSDI_Out() pour en faire un signal SDO en sortie, LitSDI() pour connaître son état, SetSDO() pour la mise à 1 en sortie et ResetSDO() pour la mise à 0 en sortie).
    4. Ajouter des define pour gérer le signal CS (ConfigCS_TC77() pour configurer la broche en sortie, SetCS_TC77() pour mettre la sortie à 1 et ResetCS_TC77 pour la mettre à 0).
  3. Utiliser les différents define de configuration au début de la fonction main() pour configurer les signaux du bus SPI.

1.2. Première approche : lecture simple de la température

Dans un souci de simplification, on se limite au traitement des températures positives. La lecture de la température s'effectue toutes les 500 ms en utilisant l'indicateur Indicateur500ms déjà présent dans le programme.

  1. Générer les signaux sur le bus SPI pour lire les 9 bits de la partie entière de la température ainsi que les 2 bits les plus significatifs de la partie fractionnaire
    Note : on stockera les deux informations dans des variables différentes notées TempEntiere et TempFractionnaire de type uint16_t .
  2. Afficher la partie entière.
  3. Afficher le séparateur de point des nombres réels.
  4. Afficher la partie fractionnaire en utilisant une structure case du c permettant d'afficher 00 ou 25, 50 ou 75 en fonction de la valeur de TempFractionnaire.

1.3. Seconde approche : constitution d'une bibliothèque

Nom du projet : SPI2

De façon à mieux structurer le programme, il est judicieux de déplacer dans une bibliothèque spécifique tout ce qui à trait au capteur de température numérique TC77.

  1. Reprendre le projet SPI1 et en créer un copie nommée SPI2.
  2. Création des fichiers de la bibliothèque :
    1. Ajouter un fichier d'entête dans la section Header Files du projet et le nommer tc77.h .
    2. Ajouter un ficier source dans la section Source Files du projet en lui donnant pour nom tc77.c .
  3. Ecrire la fonction LitTC77 renvoyant les 13 bits de la température avec un type de retour uint16_t.
    Note 1 : il faut écrire l'entête de la fonction avec ses commentaires dans le fichier tc77.h et le code complet de la fonction dans tc77.c . Il faudra ensuite ajouter un #include "tc77.h" dans le programme main.c pour pouvoir utiliser les fonctions de la bibliothèque tc77.
    Note 2 : l'utilisation de différentes bibliothèques dans le programme tc77.c nécessite d'ajouter les #include correspondants dans le fichier tc77.c (voir le code de la bibliothèque lcd.c en guise d'exemple).
  4. Ecrire la fonction EnergieTC77 prenant le paramètre 0 en entrée pour mettre en veille le TC77 et 1 pour le réveiller.
  5. Modifier la section de la fonction main() permettant de consulter le TC77 toutes les 500 ms en prenant soin de le mettre en veille lorsqu'il n'est pas utilisé.

2. Mise en oeuvre reposant sur l'utilisation du module SPI des PIC18F

A venir.