* *
* *
Electronique
+ Arduino
 -  Bus I2C
+ Divers
+ Game Boy Advance
+ Robotique
+ Z80
Informatique
+ Commande numérique
+ Les DLL
+ Mon Guppy
+ divers
Mathématiques
Astronomie
Webmaster - Infos
Ecrire à Grosse Christophe  Webmestre
Ajouter aux favoris  Favoris
Recommander ce site à un ami  Recommander
Version mobile   Version mobile
Recherche




Préférences

 Nombre de membres 30 membres


Utilisateurs en ligne

( personne )
Interface I2C pour microcontrolleur PIC16F84


 ppic.gif
Photo du module I2C à base de PIC16C84

Descriprion du montage

Ce module se connecte sur l'interface i2c universelle pour PC décrite sur ce site grace a un cable muni de connecteurs 6P/4C. Une fois connecté sur le bus et alimenté via celui-ci ( aucune alimentation externe n'est requise ! ),le PIC16C84 se comporte comme un composant I2C possédant 8 registres internes 8 bits reg0 à reg7 accessible individuellement en lecture et en écriture.D'autre part , il est possible de stocker ces registres dans l'EEPROM du PIC qui assure la rétention des données même en cas de coupure de l'alimentation. Les données stockés dans l'EEPROM peuvent être rechargés dans les registres de manière automatique lors des prochaines mises sous tension ! Ce module est une base solide pour d'autre projets nécessitant un controle à partir du bus I2C.

Schéma

pici2c.gif
Schéma du module I2C à base de PIC16C84

Les lignes SDA et SCL sont directement reliées aux broches bidirectionnels RB0/RB1. L'utilisation de RB0/INT permet de déclencher une interruption logicielle du PIC16C84 lors de l'arrivé d'une trame I2C.Les broches RB4,RB5 et RB6 sont des entrées qui possède des résistances de pull-up vers le +5V. Un dip-switch à 3 interrupteur permet de forcer celles-ci à l'état bas.Il est ainsi possible de personaliser l'adresse I2C de la platine ( même lorque le montage est alimenté ! ).L'adresse de base étant 24. Un oscillateur à quartz cadencé à 2Mhz est connecté sur les entrés OSC1 et OSC2.L'alimentation du montage se fait directement à partir du bus I2C. Le condensateur C3 assure un découplage correct de l'alimentation du PIC.

conecb.gif
Brochage du module vu de dessus


Les deux modular jack ont un brochage différent repéré par les symboles comme sur la photo ci-dessus. Pour avoir plus de précision sur la connection de ce module à l'interface allez voir sur la page de cette dernière.

Communication avec le module

  • Pour écrire un registre du PIC

    prot1.gif
    Le diagramme de la communication
    Afin d'accéder à une fonction du PIC , le PC envoie le diagramme ci-dessus.Une condition de start permet de prendre le controle du bus. Le PC envoie l'adresse du module : celle-ci est composée de l'adresse de base 24 et d'une partie a0 a1 a2 configurable à l'aide des dip-switch du module.Le bit DIR mis à 0 permet de spécifier le sens de la communication ( PC vers PIC ). Après un aquittement ( celui-ci permet de tester ci le composant est présent sur le bus ... ) , le PC envoie l'octet de commande. Les bits c0 c1 c2 permettent de spécifier la fonction voulue ( voir le tableau ci-dessous ). Les bits b0 b1 b2 permettent de préciser le numéro du registre concerné ( reg0 à reg7 ).Le bit D est utilisé avec la fonction N°6 ( voir tableau ci-dessous ). Après un nouvel acquittement , l'ordinateur envoie l'octet de donné et libère le bus par une condition de stop.

    N° de fonction
    c0 c1 c2
    Description de la fonction
    0Ecriture de l'octet de donné vers le registre pointé par b0 b1 b2
    1Ecriture de l'octet de donné vers tous les registres reg0 à reg1
    2Sauvegarde le registre pointé par b0 b1 b2 dans l'EEPROM
    3Sauvegarde tous les registres reg0 à reg7 dans l'EEPROM
    4Restaure le registre pointé par b0 b1 b2 à partir de l'EEPROM
    5Restaure tous les registres reg0 à reg7 à partir de l'EEPROM
    6Si d = 0 alors Les valeurs sauvegardées dans l'EEPROM ne sont pas restaurées automatiquement lors de la mise sous tension.
    Si d = 1 alors tous les registres sont automatiquement restaurés à partir de l'EEPROM à la mise sous tension
    7Cette fonction n'est pas utilisée et reste libre pour l'utilisateur
    Tableau des fonctions disponibles
  • Pour lire un registre du pic

    prot2.gif
    Le diagramme de la communication
    Comme pour l'écriture le PC envoie l'adresse du module.Mais pour indiquer que nous voulons lire les registres du PIC il faut que DIR soit à 1. Il suffit ensuite d'envoyer le n°du registre à lire ( 0 à 7 ) à l'aide de b0 b1 b2 puis de lire la donnée correspondante.
    Il y a une execption : la mise à un du bit Id provoque l'envoie de la chaine d'identification du PIC. Cette chaine est composée de 8 caractêres répartit en deux groupes. Les 5 premiers donne le nom de l'application , les 3 derniers donne le numéro de version du programme.Par défault le PIC renvoie les informations suivantes :

    Chaine d'identification = Base
    Numéro de version = 1.0


    Cette chaine d'identification permettra de tester automatiquement la présence , l'adresse et la nature des modules qui sont connectés à l'interface ( Une sorte de Plug and Play ... ).

  • Adaptation du programme a vos projets

    L'utilisation des interruptions du PIC permet une gestion transparente du bus i2c.Ainsi , l'arrivé d'une trame I2c sur l'entrée SDA et SCL du PIC provoque une interruption vers une routine de traitement des messages I2C. Une fois la trame I2C décodée , la main est rendue au programme principal ( écrit par l'utilisateur ) qui peut utiliser ou modifier les valeurs contenues dans les registres reg0 à reg7. De même toute action sur les dip-switch pour changer l'adresse du module entraine une interruption logicielle pour prendre en compte la nouvelle adresse.

    main.gif
    Le programme du PIC s'adapte facilement à tous vos projets

    Votre routine assembleur devra être écrite après le label main: dans la partie boucle principale du programme I2C.ASM.Sur l'exemple ci-dessus , la routine principal ne fait rien ! Si vous voulez un exemple concret d'utilisation de ce module allez voir les réalisations suivantes ( la commande de servo-moteur par exemple ). L'accès aux registres reg0 à reg7 se fait au travers des variables globales du même nom. Libre à vous de créer de nouvelles applications ayant toutes une interface I2C commune.

Nomenclature

Condensateurs

C1,C2 : 20pF
C3 : 100nF

Circuits Intégrés

IC1 : PIC16C84

Divers :

Un quartz 2Mhz
Un interrupteur 3 dip-switch
Un porte circuit 6 broches
Un porte circuit 18 broches
Deux connecteur modular jack 6P/4C à souder sur CI.
Le cordon de laison 6P/4C.

Logiciels

Le source I2C.ASM devra être compilé par l'assembleur MPASM de MICROCHIP.Le résultat obtenu est le fichier I2C.HEX qui servira a programmer le PIC16C84.
Une unité écrite en Turbo Pascal permet de gérer ces modules.Vous pouvez librement télécharger le source ( PIC.PAS ) de cette unité , ou directement l'unité compilée ( PIC.TPU ) a intégrer dans vos projets futurs. Le listing étant documenté , je ne m'attarderais pas sur le fonctionnement de cette unité.

Une DLL ( 16 bits ) sera bientot disponible pour ceux qui désirerait programmer sous windows.

A titre d'exemple, le programme TESTPIC.EXE permet de tester ce module. Vous pouvez également télécharger le source TESTPIC.PAS ( nécessite les fichiers BUSI2C.TPU et PIC.TPU )

tpic.gif
Illustration du programme de test



Date de création : 28/10/2005 @ 16:56
Dernière modification : 31/01/2008 @ 07:37
Catégorie : Bus I2C
Page lue 14408 fois


Prévisualiser la page Prévisualiser la page     Imprimer la page Imprimer la page

react.gifRéactions à cet article


Personne n'a encore laissé de commentaire.
Soyez donc le premier !


^ Haut ^

GuppY - http://www.freeguppy.org/    Site créé avec GuppY v4.5.8 © 2004-2005 - Licence Libre CeCILL   GuppY - http://www.freeguppy.org/

Document généré en 0.26 seconde