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)