Page 1 sur 13

Multipower - Proteus/Flowcode - BUS I2C

Multipower

83 Avenue d’Italie - 75013 PARIS - Tél. : 01 53 94 79 90 - Fax : 01 53 94 08 51

E-Mail : contact@multipower.fr - Web : http//www.multipower.fr

Document propriété de Multipower. Reproduction même partielle interdite sans autorisation.

Utilisation conjointe de Flowcode et Proteus

Le BUS I2C - Mémoire EEPROM

André Mininno – Mai 2010 - ©MULTIPOWER

Page 2 sur 13

Multipower - Proteus/Flowcode - BUS I2C

2

SOMMAIRE

1 Généralités 3

2 Le bus I2C 3

2.1 Généralités 3

2.2 La technique 4

3 Le projet 5

4 L’algorigramme 6

5 Le projet électronique 10

6 Paramétrage Flowcode et Proteus 12

6.1 Vitesse d’horloge du microcontrôleur 12

6.1.1 Flowcode 12

6.1.2 ISIS 12

6.2 Vitesse du bus I2C et connexion de l’EEPROM sur le port C 12

6.2.1 Flowcode 12

6.2.2 ISIS 12

6.3 Connexion du LCD sur le port B 13

6.3.1 Flowcode 13

6.3.2 ISIS 13

6.4 Programme à exécuter 13

6.4.1 Flowcode 13

6.4.2 ISIS 13

Page 3 sur 13

Multipower - Proteus/Flowcode - BUS I2C

3

1 Généralités

Cette note d’application explique comment mettre en œuvre une communication I2C entre un mi- croprocesseur PIC et une mémoire EEPROM.

Le logiciel Flowcode, de Matrix Multimédia, est utilisé pour décrire un algorigramme qui écrit des

valeurs dans la mémoire EEPROM, puis vient relire ces données. Les données lues sont visualisées

sur un afficheur LCD 2 lignes.

Le logiciel Proteus, de Labcenter Electronics, est utilisé pour dessiner le schéma électronique équi- valent à la fonction programmée. Le programme HEX, généré par Flowcode, est ensuite testé dans

Proteus pour prouver son bon fonctionnement.

Internet fourmille d’informations relatives au protocole I2C. Nous nous contenterons donc d’un

rappel synthétique sur ce bus de communication pour nous concentrer sur sa mise en œuvre avec

Flowcode et Proteus.

Les versions des logiciels utilisés dans nos exemples sont :

• Flowcode V4.2.3.58

• Proteus V7.7SP2

2 Le bus I2C

2.1 Généralités

Le bus I2C ( Inter-Integrated Circuit ) a été conçu par la société Philips dans les années 80. Il per- met d’interfacer des microprocesseurs à des composants dédiés par l’intermédiaire d’un bus série

synchrone à 2 fils.

En comparaison d’un bus parallèle qui nécessite beaucoup de liens, l’I2C a l’avantage de simplifier

le design et de réduire considérablement le nombre de fils à router lors de la conception du circuit

imprimé.

Les données sont transmises sur le bus à des vitesses variables de 100Kbits/s à 400Kbits/s. Ces

vitesses ne sont pas phénoménales, mais conviennent parfaitement pour l’interfaçage de nombreux

composants tels que des mémoires, des convertisseurs, des horloges, des drivers audio, vidéo,

etc.

Note : Les bus série sont de plus en plus employés dans l’électronique moderne – USB, CAN, PCI

Express, SerDes des composants FPGA, etc. Bien évidemment les vitesses de communication ac- tuelles sont considérablement plus élevées que celles disponibles pour le bus I2C.

Page 4 sur 13

Multipower - Proteus/Flowcode - BUS I2C

4

2.2 La technique

Les deux fils dont se sert le bus I2C pour communiquer sont :

• SDA pour Serial DAta line

• SCL pour Serial Clock line

Microcontrôleur

Module I2C Module I2C

SCL

SDA

Maître

Esclave Esclave

Adresse Adresse

Les liens du bus I2C

Plusieurs modules I2C peuvent être reliés sur le bus. Par exemple, lorsque la vitesse est de

100Kbits/s, il est possible d’interfacer quelques dizaines de composants I2C placés à faible distance

du microcontrôleur. La limitation du nombre de modules I2C est liée à la charge capacitive.

Note : L’ajout de buffers en sortie du microcontrôleur permet d’augmenter le nombre de modules

I2C connectés et/ou de les placer à plus grande distance (plusieurs mètres).

Chaque module I2C possède une adresse spécifique. Dans notre exemple, le microcontrôleur est le

maître. Avant de communiquer avec un module I2C esclave, le maître doit indiquer son adresse.

Page 5 sur 13

Multipower - Proteus/Flowcode - BUS I2C

5

3 Le projet

Nous souhaitons écrire des valeurs dans une mémoire EEPROM. Cette mémoire est accessible par

un microcontrôleur via le bus I2C. Afin de vérifier que les valeurs écrites sont bonnes, nous allons

les relire pour les visualiser sur un afficheur LCD.

Microcontrôleur Afficheur LCD

EEPROM PIC 16F877A

LM016L

24C02C

Port B

Port C

Les composants du projet

Notre projet contient 3 composants :

• Le microcontrôleur qui exécute le programme. Nous utilisons un PIC16F877A qui possède les

liens I2C requis sur le port C.

o RC3, broche 18 : SCL

o RC4, broche 23 : SDA

• L’afficheur LCD 2 lignes de 16 caractères qui sera relié au port B du microcontrôleur.

• La mémoire 24C02, d’une capacité de 256 octets (2k bits). L’adresse I2C de ce composant est

0xA2 – voir la notice technique du composant.

Note : Afin de ne pas surcharger notre schéma électronique, nous ne câblerons pas l’oscillateur

externe du microcontrôleur. Ceci n’est pas gênant pour la simulation car la vitesse de simulation est

indiquée dans la boîte de dialogue du composant PIC.

Page 6 sur 13

Multipower - Proteus/Flowcode - BUS I2C

6

4 L’algorigramme

Initalisation

Ecriture EEPROM

LCD

I2C

Adresse 5

Valeur = compteur de la boucle

Lecture EEPROM

Adresse 5

Valeur lue

Affichage LCD

Visualiser valeur lue

Boucle

10 fois

compteur = 77

compteur = compteur + 1

Principe du programme

Le programme commence par initialiser les périphériques LCD et EEPROM. Ensuite il fait 10 fois la

même action. Il écrit une valeur à l’adresse 5 de l’EEPROM, puis vient lire le contenu de la même

adresse pour l’afficher. A chaque boucle la valeur écrite est incrémentée de 1.

Nous avons choisi une valeur initiale de 77, ce qui correspond à la lettre M de la table ASCII.

Notre afficheur doit afficher la suite des caractères MNOPQRSTUV

Le programme comporte une partie principale et trois macros :

• L’initialisation du LCD et de l’I2C

• L’écriture I2C à l’adresse 5 de la valeur transmise en paramètre

• La lecture I2C de l’adresse 5, immédiatement affichée sur le LCD

Note : La simulation dans Flowcode de l’algorigramme fournit n’est pas probante. Par contre le

fonctionnement dans Proteus se révèle correct.

Page 7 sur 13

Multipower - Proteus/Flowcode - BUS I2C

7

Initialisation du LCD et du bus I2C

Initialisation du compteur de boucle avec la

valeur 77 (lettre M)

Tant que mode < 87

Ecrire la valeur du compteur (77 à 87) à

l’adresse 5 de l’EEPROM

Lire l’adresse 5 et afficher

Incrémenter le compteur de boucle

Fin après 10 itérations

Algorigramme Flowcode : fonction principale

Page 8 sur 13

Multipower - Proteus/Flowcode - BUS I2C

8

Début de la trame I2C, le start.

Indiquer l’adresse du composant 0xA2 plus bit

d’écriture (LSB à 0), soit 0xA2

Ecrire à l’adresse 5 de l’EEPROM

Ecrire la valeur transmise en paramètre

Fin de la trame I2C, le stop

Macro Ecrit_I2C (valeur)