WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Commande de l'éclairage public et mesure de la température à  base de pic18f4550

( Télécharger le fichier original )
par Soufiane SMAIL
Université Mohamed Khider Biskra- Algérie- Département de Génie Electrique - Master 2013
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

III. 3. 5. 2 Principe de fonctionnement du bus I2C

Pour les composants voulant communiquer en I2C il suffit de lier ces 3 fils. Le fonctionnement du bus I2C est assez simple malgré que son protocole puisse sembler complexe. La communication I2C repose sur l'échange entre un maître et des esclaves par adressage. C'est-à-dire que chaque composant dit esclave possède une adresse spécifique sur 7bits. C'est le composant maître qui gère la communication. Il envoie les signaux de données et le signal d'horloge. Généralement le maître est un composant dit microcontrôleur.

Le rôle du signal d'horloge SCL est de rythmer l'envoi des données. Chaque bit du signal de données SDA sera envoyé à chaque changement d'état du SCL (Fig. III.6).

Fig. III.6 : le chronogramme des lignes SDA et SCL

Au début d'une communication, il faut s'assurer que le SDA et SCL sont en état de repos, soit un niveau logique 1 (Fig. III.7).

Ensuite le maître envoie sur le bus I2C, l'adresse de l'esclave avec qui il veut communiquer. On dit qu'il envoie les bits d'adressage. Suite à cela le maître indique le mode d'action (R/W) c'est adire le maître indique s'il veut écrire ou lire les données de l'esclave (0 pour écriture, 1 pour la lecture).

Commande de l'éclairage public et mesure de la température à base de PIC18F4550

 

Chapitre III Programmation de PIC18F4550

(0 pour écriture, 1 pour la lecture)

Commande de l'éclairage public et mesure de la température à base de PIC18F4550

28

Fig. III.7 : le chronogramme de communication I2C

L'esclave possédant l'adresse indiqué répond par un « Acknowledge » (ACK). C'est un bit dit d'acquittement pour indiquer qu'il a bien reçu les instructions du maître. Ce bit est symbolisé par un forçage de l'esclave à mettre la ligne SDA à un niveau logique 0.

L'acquittement reçu par le maître, celui-ci envoyé alors les données à l'esclave qui acquittera à nouveau pour confirmer la réception. Le maître peut alors envoyer autant de donnée qu'il veut sur un même esclave qui acquittera à chaque opération.

Pour finir, un maître peut communiquer avec plusieurs esclaves à condition de paramétrer les adresses de tous les esclaves. Il devra alors indiquer, à chaque changement d'esclave, l'adresse du nouveau esclave avec qui il veut communiquer [13].

III. 3. 5. 3 Bus I2C et MikroC

MikroC fournit une bibliothèque prête du bus I2C (Tableaux 3.1), nous utilisons cette bibliothèque pour communiquer entre le maitre (PIC18F4550) et l'esclave (DS1307). L'exemple suivant montre comment écrire des fonctions de lire et d'écrire en l'esclave DS1307 avec les commentaires.

a. Fonction d'écriture

void write_ds1307(unsigned short address,unsigned short w_data)

{

I2C_Start(); // lancer un signal de départ (le bit de start)

I2C_Wr(0xD0); // envoyer un octet via I2C (adresse de composant + un bit de mode action (R/W))

// Adresse 0x68 est l'adresse de l'esclave DS1307 suivis par bit de direction (0 pour écriture, 1 pour la lecture), dans ce cas (mode écriture) l'adresse 0x68 suivi par 0 -> 0xD0

I2C_Wr(address); // envoyer un octet (adresse du register du DS1307) I2C_Wr(w_data); // envoyer des données (Les données qui seront écrites) I2C_Stop(); // envoyer un signal de stop ( bit de stop)

}

Chapitre III Programmation de PIC18F4550

Un exemple de l'utilisation de cette fonction :

write_ds1307(1,Dec2Bcd(59)); // écrire les minutes 59 write_ds1307(2,Dec2Bcd(23)); // écrire l'heur 23 PM

b. Fonction de lecture

void read_ds1307(unsigned short address)

{

I2C_Start(); // lancer un signal de départ (le bit de start)

I2C_Wr(0xD0); // envoyer un octet via I2C (adresse de composant + un bit de mode action (R/W))

// Adresse 0x68 est l'adresse de l'esclave DS1307 suivis par bit de direction (0 pour écriture, 1 pour la lecture), dans ce cas (mode écriture) l'adresse 0x68 suivi par 0 -> 0xD0

I2C_Wr(address); // envoyer un octet (envoyer l'adresse du registre à lire) I2C_Repeated_Start();//Ré-envoyer le bit de start

I2C_Wr(0xd1); // envoyer un octet via I2C (adresse de composant + un bit de mode action (R/W))

// Adresse 0x68 est l'adresse de l'esclave DS1307 suivis par bit de direction (0 pour écriture, 1 pour la lecture), dans ce cas (mode lecture) l'adresse 0x68 suivi par 1 -> 0xD1

data=I2C_Rd(0); L'esclave envoie le contenu du registre d'adresse dans le variable data

I2C_Stop(); // envoyer un signal de stop ( bit de stop)

return(data);// Retourne la valeur de la variable data à nom de fonction

}

Un exemple de l'utilisation de cette fonction :

minute=read_ds1307(1); // lire minute

hour=read_ds1307(2); // lire heur

dminute=Bcd2Dec(minute);dhours=Bcd2Dec(hour);// Conversions de BCD à décimal

Commande de l'éclairage public et mesure de la température à base de PIC18F4550

 

Chapitre III Programmation de PIC18F4550

Commande de l'éclairage public et mesure de la température à base de PIC18F4550

23

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Je ne pense pas qu'un écrivain puisse avoir de profondes assises s'il n'a pas ressenti avec amertume les injustices de la société ou il vit"   Thomas Lanier dit Tennessie Williams