Dernière mise à jour le 16/03/2019
Présentation
Si vous n’avez pas fait un tour par ici je vous invite à le faire afin de bien comprendre le fonctionnement du protocole I2C. Si cas contraire j’en déduis que vous avez compris le fonctionnement du protocole I2C, dans ce cas nous allons voir comment programmer un PIC 18F4550 en tant qu’esclave qui celui-ci pourra envoyer des données directement au maitre lorsque ce dernier enverra un bit de lecture (8ème bit à l’état logique “1”)
Fonctionnement
Mode réception
En mode réception I2C le PIC 18F4550 est configuré en tant qu’esclave, ainsi en mode esclave le matériel générera toujours une interruption si et seulement il y a une correspondance d’adresse.
Prenons un exemple, le maitre envoie une trame de données qui est cadencée par l’horloge ce qui par la même occasion impose aux esclaves cette cadence. Lorsque ces données arrivent sur les broches RB0 et RB1 du PIC 18F4550, les 7 premiers bits qui correspondent à l’adresse sont comparés au bit SSPADD que vous avez renseigné dans le programme. Lorsque les 7 bits correspondent au bit SSPADD une interruption sera générée.
Ci-dessous programmation des interruptions ainsi que l’adresse de l’esclave en MikroPascal:
INTCON.GIE := 1; // On active les interruptions globales
INTCON.PEIE := 1; // On active les interruptions périphériques PIE1.SSPIE := 1; // On active les interuptions du MSSP ( Module de port série synchrone principal I2C ou SPI) PIR1.SSPIF := 0; // On met le drapeau à zéro pour commencer SSPADD := 0xA8; // Configuration de l’adresse de l’esclave du PIC 18F4550 |
Si vous avez choisi la même adresse identifiés ci-dessus (0xA8 (hexadécimale)) et que le maitre envoie la même adresse alors votre PIC sera reconnue. Attention!! si vous avez plusieurs esclaves, chaque esclaves doivent avoir une adresse unique.
Les registres nommés SSPSR et SSBUF forme ensemble un récepteur double tampon. Lorsque le registre SSPSR reçoit un octet complet (8 bits (0 à 7) sans compter le bit d’acquittement « ACK ») et que l’adresse est validée, une impulsion Acknowledge (ACK), sera générée automatiquement par le PIC et va charger le registre SSPBUFF avec la valeur reçue actuellement située dans le registre SSPSR ce qui va produire une interruption via le bit SSPIF.
le bit SSPIF va passer à l’état logique “1” et doit donc être remis à “0” par logiciel.
PIR1.SSPIF := 0; // C’est ce bit qui passe à l’état logique “1” chaque fois que le SSBUFF est chargé
|
Vous trouverez plus bas la programmation du maitre ainsi que de l’esclave, je vous laisse lire le programme afin de mieux comprendre le fonctionnement.
Schéma
Logiciel du PIC
Ci-dessous les réglages dans le menu”Edit Project” (MikroPascal ou MikroC) à réaliser. je n’ai pas continué les autres captures d’écran mais tout le reste est à desactiver “Disabled”.
Programme MikroPascal du PIC 18F4550 – MikroPascal
Programme MikroC du PIC 18F4550 – MikroC
Prototype
Une petite vidéo pour la démonstration mais vidéo rapide
Circuit(s) imprimé(s)
Aucun.
Historiques
16/03/2019
-1er mise à disposition