Pièce jointe « mod_I2C.tex »
Téléchargement 1 \section{Module I2C}
2
3 Auteur : Pierre Launay
4
5 per.launay chez free.fr
6
7 Le bus I2C est un bus série synchrone développé par Philips
8
9 Description du bus I2C : http://fr.wikipédia.org/wiki/I2C
10
11 Comprendre le bus I2C en espagnol \url{http://robots-argentina.com.ar/Comunicacion_busI2c.htm}
12
13 Voici les fonctions pour travailler avec le Module I2c en mode Maître Interne dans les PIC
14
15 Avant d'utiliser ce module, on doit définir la fréquence utilisée avec la commande :
16
17 \verb! #define FOSC_HZ 4000000 !
18
19 \verb! #include <i2c.h> !
20
21 Quelques définitions prédéfinies:
22 \begin{verbatim}
23 #define I2C_400K i2c_find_frec(400000) //frecuencia de 400Khz
24 #define I2C_100K i2c_find_frec(100000) //frecuencia de 100Khz
25 #define I2C_40K i2c_find_frec(40000) //frecuencia de 40Khz
26 #define I2C_10K i2c_find_frec(10000) //frecuencia de 10Khz
27 #define I2C_4K i2c_find_frec(4000) //frecuencia de 4Khz
28 #define I2C_1K i2c_find_frec(1000) //frecuencia de 1Khz
29 \end{verbatim}
30
31 Ces définitions peuvent être utilisées dans la fonction i2c\_init
32
33 \subsection{i2c\_init}
34 Configure le port série synchrone
35
36 \textit{void i2c\_init(unsigned char SPEED\_I2C);}
37
38 SPEED\_I2C es el registro SSPADD, reloj\_I2C=FOSC\_HZ/(4*(SSPADD+1))
39 \subsection{i2c\_wait\_for\_idle}
40 Attend que le bus soit libre.
41
42 \textbf{void i2c\_wait\_for\_idle(void);}
43 \subsection{ i2c\_start}
44 Début de trame, séquence de départ
45
46 \textbf{void i2c\_start(void);}
47 \subsection{i2c\_restart}
48 Recommencer une trame, fin de trame et début de trame permet de mettre 2 trames pour lire. Voir i2c\_read()
49
50 Exemple pour lire les secondes dans une trame :
51 Début de trame (start), écrire l'adresse du circuit I2c, écrire l'adresse du registre des secondes.
52 Relancer une trame (restart), écrire l'adresse ducircuit I2C, lire le registre des secondes, fin de trame(stop).
53
54 \textbf{void i2c\_restart(void);}
55 \subsection{i2c\_stop}
56 fin de trame, séquence d'arrêt
57
58 \textbf{void i2c\_stop(void);}
59 \subsection{i2c\_delay}
60 Temps d'attente entre fin de trame et début de trame $>=4,7\mu s$ (fréquence d'horloge de 100KHz)
61
62 \textbf{void i2c\_delay(void);}
63 \subsection{i2c\_ack\_read}
64 réception de l'acquittement
65
66 unsigned char i2c\_ack\_read (v oid);
67
68 "0" bonne réception
69
70 "1" mauvaise réception
71 \subsection{i2c\_ack\_write}
72 émission de l'acquittement
73
74 void i2c\_ack\_write(unsigned char ack);
75
76 "0" la trame peut continuer
77 "1" la trame s'arrête
78
79 \subsection{i2c\_write}
80 Le maître écrit dans l'esclave le caractère c, le caractère c peut être une adresse, un registre interne,
81 une donnée
82
83 \textbf{void i2c\_write(unsigned char c);}
84 \subsection{i2c\_write\_with\_ack}
85 Le maître écrit dans l'esclave le caractère c, et reçoit l'acquittement (ack).
86
87 Cette routine rassemble i2c\_write(c) et reception\_ack()
88
89 unsigned char i2c\_write\_with\_ack(unsigned char c) ;
90
91 \subsection{i2c\_read}
92 Le maître lit le caractère envoyé par l'esclave.
93
94 unsigned char i2c\_read(void);
95
96 \subsection{i2c\_read\_with\_ack}
97 Le maître lit le caractère envoyé par l'esclave et envoie l'acquittement (ack).
98
99 unsigned char i2c\_read\_with\_ack(unsigned char ack);
100
101 \subsection{Exemple du Module I2C}
102 Pour compilar tu as besoin des commandes suivantes
103
104 Exemple de compilation : ./compila.sh ej\_i2c 16f877a
105
106 ej\_i2c.c
107 \verbatiminput{source/ej_i2c.c}
Fichiers joints
Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.Vous n'êtes pas autorisé à joindre un fichier à cette page.