Étape 6: Configurer le PIC comme une esclave I²C
Configuration du module MSSP de la PIC12LF1840T39ADans notre cas, nous aurons besoin de configurer le PIC12LF1840T39A d’agir comme un périphérique esclave. Première chose, qui doit être fait, consiste à configurer le module MSSP. La fiche technique décrit cette procédure en détail, ainsi que les transactions.
1. start bit détecté.
2. peu de S de SSP1STAT est situé ; SSP1IF est défini si interruption au démarrage détecte est activée.
3. correspondance adresse avec R/W peu clair est reçu.
4. l’esclave tire SDA faible en envoyant un ACK au maître et définit le bit SSP1IF.
5. logiciel efface le bit SSP1IF.
6. lectures de logiciel a reçu adresse SSP1BUF effacer l’indicateur BF.
7. si SEN = 1 ; Logiciel d’esclave définit CKP bit pour libérer la ligne SCL.
8. le maître des horloges sur un octet de données.
9. esclave disques SDA faible en envoyant un ACK au maître et définit le bit SSP1IF.
10. logiciel efface SSP1IF.
11. logiciel lit l’octet reçu de SSP1BUF BF de compensation.
12. les étapes 8 à 12 sont répétées pour tous les octets reçus du maître.
13. maître envoie Stop condition, peu de réglage P de SSP1STAT et le bus va Idle.
Nous allons commencer à écrire notre programme. Côté de nos configurations habituelles, comme la configuration de l’oscillateur, nous devrons donner des valeurs aux registres MSSP :
SSP1STAT = 0 X 80
1 = commande du débit slew désactivé pour le mode vitesse Standard (100 kHz et 1 MHz)
0 = désactiver SMBus entrées spécifiques
0 = indique que le dernier octet reçu ou transmis était adresse
0 = arrêt bit n’a pas décelé de dernière
0 = start bit n’a pas décelé de dernière
0 = écriture
0 = adresse n’a pas besoin d’être mis à jour
0 = transmettent des données complètes (n’inclut pas les bits ACK et arrêt), SSP1BUF est vide
SSP1CON1 = 0 X 26
0 ne = aucune collision
0 ne = aucun débordement
1 = permet le port série et configure les pins SDA et SCL comme source les broches du port série
1 = désactiver horloge
0110 = I2C esclave, adresse 7 bits
SSP1CON2 = 0 X 00
0 = adresse appel général désactivé
0 = accusé de réception a été reçu
0 = Acknowledge
0 = accusé de réception séquence Idle
0 = recevoir inactif
0 = arrêt condition Idle
0 = condition répétée lancer Idle
0 = horloge étirement est désactivé
SSP1ADD = 0X88
1000100 = adresse 7bits esclave
0 = n’est pas utilisé
SSP1MSK = 0X0F
Esclave de masquage d’adresse, ne cherchez pas match dans les quatre premiers bits
Ce sont donc les paramètres que nous devons appliquer à notre photo pour le faire fonctionner comme prévu. Tout cela va dans la routine d’initialisation, avant notre boucle infinie.
Une fois cela fait, il faut écrire notre écriture, lecture, reconnaître, négative reconnaître, idle, démarrer et arrêter des routines. C’est toujours une bonne chose pour construire quelque chose à partir de zéro, mais si quelqu'un a travaillé avec I²C avant et a déjà ses routines préférées/optimisé - il suffit d’utiliser ceux. J’ai suivi les instructions de la feuille de données, même si je l’avais déjà écrit I²C fonctions tout à l’heure. J’ai commencé à partir de zéro pour des raisons de l’instructable.