12.07.2015 Views

Interface USB/I2C – I2C for ever...

Interface USB/I2C – I2C for ever...

Interface USB/I2C – I2C for ever...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C1100nK16RJ-1154321<strong>I2C</strong>+5VR1 R210k10kIC2 16IC1 813INTP04LSDA 3 SX LX 2 SDAP1515SDA P266 SY LY 714SCL P37LSCLSCLP491A0P5104P82B715PN2A1P6113A2P7128 PCF8574040334 - 13Figure 4. Vous pouvez réaliser ce circuit auxiliaire pour tester l’interface.D1D2D3D4D5D6D7D8L’installation est simple. On commencepar y brancher un adaptateur secteur,le montage étant ensuite relié au PCpar le biais d’un câble <strong>USB</strong>. Windows(à compter de 98SE) reconnaît immédiatementun périphérique HID etaprès quelques « tours de pistes » dudisque dur Windows signale que lepériphérique est prêt à être utilisé sousWindows.Nous n’en sommes cependant pasencore à la fin de nos peines. Il fautencore écrire un programme pour fairefonctionner l’interface. Son contenudépend bien entendu des modulesconnectés au système et de ce quevous voulez leur faire faire. Nous sommesbien conscients que le pilotaged’un périphérique HID n’est pas unesinécure pour n’importe quel programmeur,raison pour laquelle nous vousproposons une DLL écrite spécialementpour le pilotage de notre interface<strong>USB</strong>.Il est recommandé de placer cette DLLdans le dossier C:\Windows\System32.Le système d’exploitation peut ainsitoujours retrouver cette DLL et il nevous est pas nécessaire de la placerdans le même dossier que celui desapplications qui y font appel !Cette DLL est utilisable avec tout langagede programmation qui supportel’utilisation de DLL externes, tels queVisual Basic, Visual C++, Delphi etBorland C++ Builder.l’absence de tout court-circuit résiduel.Nous venons de terminer l’opération laplus délicate.Vous pourrez découvrir, dans l’article« I 2 C-homebus » un module connectableà cette interface.Si vous préférez utiliser le bus I 2 C sansexpanseur de bus I 2 C, vous pourrezprocéder aux modifications suivantes :Ne pas implanter IC5, R11 et R12.Interconnecter les broches 2 et 3 deIC5. Faire de même pour les broches 6et 7. Il suffit pour cela d’implanter2 petits morceaux de conducteur auxemplacements correspondants du support.Les modules connectés à l’interfacepeuvent alors relier directementles lignes SCL et SDA aux lignes I 2 C deleurs propres circuits intégrés.Si vous avez bien monté l’expanseurd’E/S sur la platine, il faudra que tousles modules connectés soient dotés dela circuiterie d’entrée représentée enfigure 2.Installation et DLL2 approchesL’appel d’une DLL depuis votre applicationpeut se faire de 2 manières. Lorsde l’écriture de la DLL il nous parutlogique de demander à l’application defournir une matrice d’octets danslaquelle la DLL place les octets reçusou lors de l’écriture d’où elle peut lireles octets à envoyer.Pour la plupart des langages de programmationla mise en oeuvre dematrices en tant qu’argument d’unefonction DLL ne pose pas de problème.Il en va un peu différemment dans lecas de Visual BASIC. Il est vrai qu’il estégalement possible de procéder ainsiavec ce langage, mais c’est sensiblementplus complexe pour le programmeuren Visual BASIC débutant. C’estpourquoi nous avons ajouté quelquesfonctions et procédures additionnellespermettant la mise en oeuvre facile decette interface sous Visual BASIC.Pour vous mettre sur la voie nous vousproposons 2 exemples très simples enVisual BASIC et en Delphi servant à lacommande d’un expanseur d’E/S I 2 Cclassique. Ces exemples illustrent2 manières d’utiliser la DLL.Le schéma du module nécessaire à ceteffet est donné en figure 4. De par sasimplicité il pourra être réalisé sur unmorceau de platine d’expérimentationà pastilles.Figure 5. Exemple de programmation sous MS-Word.Word à contributionDans le numéro de juin 2004 d’Elektor,page 64, nous vous avons montré commentutiliser Word, le programme detraitement de texte, pour écrire sespropres programmes. Comme la plupartdes utilisateurs de Windows utilisentce traitement de texte il nous asemblé intéressant de proposer un20elektor - 12/2004


code-source est très compact, de sorteque la totalité des communicationsavec l’interface se fait par le biaisd’une seule procédure, Timer1Timer.Cette procédure a également pourfonction la détection et l’ouverture del’interface. Immédiatement après on alecture du et écriture vers le PCF8574,que vous avez bien entendu déjàconnecté au bus I 2 C!Nous voudrions insister sur le fait qu’iln’y a pas de problème, dans votre programme,à ouvrir l’interface dès que leprogramme est lancé et à la fermerlorsque vous quittez le programme.Nous l’avons fait ici dans une routinede temporisation à laquelle il est faitappel toutes les demi-secondes. Vouspouvez ainsi connecter et déconnecterl’interface <strong>USB</strong> à loisir pendant l’utilisationdu programme.SuiteDans ce même numéro nous vous proposonsune application de cette interfacepermettant, par le biais d’un PC,de mettre en et hors-fonction différentspériphériques (I 2 C-homebus).Rien ne vous interdit non plus deconcevoir vos propres modules et deles piloter par le biais de cette interface.Il vous faut cependant un minimumd’expérience quant à la programmationsous Windows.(040334-1)Utiliser la DLLsans matricesGénéralités :<strong>I2C</strong>_<strong>USB</strong>_Open L’appeler pour obtenir l’accès à l’interface.Cette fonction fournit la valeur « vraie » si l’accès est acquis.Lecture d’une puce I 2 C:<strong>I2C</strong>_<strong>USB</strong>_ClearReadPointer A utiliser pour traiter unenouvelle instruction de lecture.<strong>I2C</strong>_<strong>USB</strong>_ReadWithBuffer Se charge ensuite de la lecturedes octets par le biais du bus <strong>I2C</strong>. Cette fonction attend enoutre une paire d’arguments. Le premier est l’adresse <strong>I2C</strong> dela puce où doit se faire la lecture. Le second argument spécifiele nombre d’octets (255 au maximum) à lire. Cette fonctionrenvoie un « vrai » lorsque la lecture s’est faite correctement.La fonction <strong>I2C</strong>_<strong>USB</strong>_GetBuffer permet d’accéder séquentiellement(l’un après l’autre) aux octets lus.Écriture vers une puce <strong>I2C</strong> :Pour l’écriture nous commençons par appeler la procédure<strong>I2C</strong>_<strong>USB</strong>_ClearWriteBuffer. Cette procédure permet dedémarrer au clair.Nous pouvons ensuite envoyer à la DLL, octet par octet lesoctets à envoyer, par le biais de la procédure<strong>I2C</strong>_<strong>USB</strong>_FillBuffer. L’argument accompagnateur prend la<strong>for</strong>me d’un octet à envoyer. Une fois que tous les octets àenvoyer ont été envoyés à la DLL, il suffit d’un appel à lafonction <strong>I2C</strong>_<strong>USB</strong>_WriteWithBuffer pour envoyer lesoctets vers la puce I 2 C requise par le biais du bus I 2 C. Leseul argument requis par cette dernière fonction est l’adresseI 2 C de la puce destinataire.avec matricesGénéralités :(Cf. également Utilisation de la DLL sans matrices)Lecture d’une puce I 2 C:La lecture de données en provenance d’une puce I 2 C nerequiert qu’une fonction, à savoir <strong>I2C</strong>_<strong>USB</strong>_Read. Il faut àcette fonction 3 arguments. Le premier spécifie l’adresse I 2 Cde la puce avec laquelle il faut communiquer. Le seconddonne le nombre d’octets à lire. Le dernier argument prendla <strong>for</strong>me d’un tampon dans lequel peuvent être stockés lesoctets lus. Cette fonction fournir un résultat « vrai » lorsque lacommunication s’est faite sans erreur.Écriture vers une puce I 2 C:Cette fonction aussi ne requiert qu’un unique appel de notreDLL. La fonction <strong>I2C</strong>_<strong>USB</strong>_Write remplit cette tâche. Pourcette fonction aussi, c’est la première adresse qui spécifie l’adresseI 2 C. Le second argument donne le nombre d’octets àenvoyer. Enfin, cette fonction requiert un tampon dans lequelse trouvent les octets à envoyer. À l’image de la fonction précédente,nous pouvons savoir, par la valeur retour de cettefonction si la communication s’est faite correctement.N.B. : Il ne faudra pas oublier que c’est à votre propre programmede faire en sorte que le tampon ait la taille suffisantepour stocker toutes les données.Publicité22elektor - 12/2004

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!