 | Photo du module I2C à base de PIC16C84 |
Descriprion du montageCe 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 | 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.
 | 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 modulePour écrire un registre du PIC | 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 | 0 | Ecriture de l'octet de donné vers le registre pointé par b0 b1 b2 | 1 | Ecriture de l'octet de donné vers tous les registres reg0 à reg1 | 2 | Sauvegarde le registre pointé par b0 b1 b2 dans l'EEPROM | 3 | Sauvegarde tous les registres reg0 à reg7 dans l'EEPROM | 4 | Restaure le registre pointé par b0 b1 b2 à partir de l'EEPROM | 5 | Restaure tous les registres reg0 à reg7 à partir de l'EEPROM | 6 | Si 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 | 7 | Cette fonction n'est pas utilisée et reste libre pour l'utilisateur |
Tableau des fonctions disponibles |
Pour lire un registre du pic | 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 projetsL'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.
 | 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.
NomenclatureCondensateurs
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.
|
LogicielsLe 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 )
 | 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 18469 fois
Prévisualiser la page
Imprimer la page
|