ETUDE DE LA CARTE I2C SUR PORT PARALLELE

Partie Logicielle

 

Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

2.ETUDE LOGICIELLE:

2.1.Programme de test de la connection au port parallèle

Ce programme permet d'activer et de désactiver de manière statique les signaux SDA et SCL afin de vérifier le bon fonctionnement à l'oscilloscope ( ou au multimètre )...Il s'agit d'un premier programme pilotant le port parallèle.

2.1.1 Version LabView5.10

Les nombreux essais effectués sur les fonctions de gestion du port série (si si série !) avec les numéro de port: 10 pour LPT1, 11 pour LPT2 n'ayant rien donnés (surtout en lecture), il convient de se tourner vers une autre solution. La solution retenue est la programmation directe des registres du port parallèle grâce aux fonction IN et OUT de LabVIEW (uniquement LabVIEW pour Windows):

Il faut donc recherche l'adresse du port utilisé (grâce au panneau de configration de Windows, icône système, onglet gestionnaire de périphérique) généralement 378 en hexa pour LPT1).

note: concernant la programmation du PP, il y a tout ce qu'il faut sur: http://www.beyondlogic.org/spp/parallel.htm ou par le site de Xavier COTTON.

Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

A l'adresse de base (378h), se trouve le registre de donnée et à l'adresse de base+1 se trouve le regitre d'état qui contient le bit select in. Le programme de test est donc constitué d'une séquence comportant 4 phases: 1 out(378h, 3) pour tenter d'activer D0 et D1 broche 2 et 3 du port parallèle, 1 in(378h+1) pour relir l'état de select (broche 13), un deuxième out avec la valeur 0 pour désactiver D0,D1 et enfin un dernier in(378h+1) pour relire l'état de select.

Ci-dessous, les 3 autres phases de la séquence:

 

 

 

 

La face avant est des plus simple:

Pour récupérer ce VI rendez-vous à la Page de téléchargement.

Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

2.1.2. Version Visual Basic

Qaund j'aurai le temps...

2.2.Etude du protocole: les fonctions élémentaires, puis les fonctions de base.

Tous ces modules sont disponibles gratuitement biensûr sur la page de téléchargement de cette étude.

Le principe retenu pour développer toutes les fonctions élémentaires est de piloter directement les signaux SCL et SDA grâce à des instructions out_port.

L'étude d'une trame I2C permet de constater que 6 fonctions élémentaires sont nécessaire à savoir:

  • un module pour générer la condition de strart sur le bus
  • un autre pour écrire un octet
  • un pour lire l'acqusé de réception provenant du destinatiare
  • un pour recevoir un octet
  • un pour émetter un acqusé de réception
  • enfin un pour générer la condition de stop

    Viennent ensuite les fonctions de bases d'un niveau légèrement plus élevés et fondées sur les fonctions ci-dessus. Il s'agit de:

  • Construction de l'octet adresse/commande
  • Emission d'une trame complète

Voici la description de des fonctions élémentaires puis des fonctions de bases:

2.2.1. Version LabVIEW5.0

Préambule: pour développer tous les modules suivants, la fonction LabVIEW out_port a été modifiée (une sortie register address out a été ajouté). Mais plutôt que de modifier l'original de ce vi, j'ai créé un niveau supplémentaire, ce qui permet de ne pas perdre la modif en cas de nouvel installation ou de changement de plateforme... Cette modification permet de créer des chaînages séquentiels qui auraient nécessité à chaque fois une boîte de séquence, ce qui aurait diminué la clarté des diagrammes.

 

2.2.1.1. Emmettre un START

A noter: la présence de la sortie param_I2C_out parallèle. Ceci permet de chaîner les VI du bus I2C qui seront tous construit sur ce model.
Ce paramètre est une structure qui contient l'adresse du port parrallèle et une tempo expliquée plus loin.

Ce module est des plus simple: il est constitué de 3 instructions de sortie vers le port parallèle. il faut toute fois bien garder à l'esprit que l'interface électrique, créé dans la partie matérielle de cette étude, inverse les signaux.

2.2.1.2 Ecrire un octet

Ce module est légèrement plus complexe. En effet, il est constitué d'une boucle FOR. Cette boucle parcourt tous les bits du tableau créé à partir de l'octet d'entrée:

Ce groupe de commandes crée un tableau de bits qui permet d'indexé automatiquement la boucle FOR (une des fonctionnalité très puissance de LabVIEW).

 

Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

Pour développé ce module, 2 sous fonctions on été créées: Set Bit et Reset Bit qui comme leurs noms le laisse deviner permettent respectivement de mettre un bit à 1 et à 0 dans un octet sans toucher aux autres bits bien sûr. Non décrite ici mais malgés tout disponible gratuitement sur la page de téléchargement du projet dans la bibliothéque I2c_de_base.llb.

En phase de mise au point à l'oscilloscope, il a été ajouté une boucle FOR de 500 pas pour ralentir un peu le PC car la spécification I2C (disponible sur le site de Phillips semiconducteur ) prévoit un temps haut minimum de 4,7us ce qui n'était pas le cas.
Cette tempo peut être réglé grâce au paramètre tempo_bit de la structure param_i2c_in.

La face avant du module n'est pas présentée ici car présentant peut d'intérêt.

2.2.1.3.Lire un octet

Ce module utlise également une boucle FOR pour lire les 8 bits, mais cette fois l'autoindexation n'est plus utlisée en entrée de la boucle mais en sorti pour générer automatiquement un tableau de bouleén (trop fort ce LabVIEW ! )

 

 

 

Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

Toujours une petite boucle FOR pour ralentir un peu.

2.2.1.4. Emmettre un Acknolodge

Ce module permet comme son nom l'indique de générer un acqusé de réception.

Là encore une boucle for est nécessaire afin de prolonger l'état haut.

2.2.1.5.Recevoir un Acknoledge

Ce module est très similaire au précédent à ceci près que l'état de la ligne SDA est lu.

 

2.2.1.6.Emmettre un STOP

Ce module ne mérite aucun commentaire !

 
 
Vers page d'accueil
Vers la mienne
Vers page des pro
Vers pages des momes
Vers page photo
Mon bookmark
Vers plan du site
Page précédente

2.2.1.7.Construction de l'octet adresse/commande

L'étude des datasheet de composants I2C montre que souvent l'adresse 7bits d'un composnats I2C se compose de 2 champs. Le premier contient 4 bits et est un champ fixe qui est propre à chaque type composants ( exemple 0100 pour le PCF8574 et 0111 pour le PCF8574A) suivi d'un champ variable de 3 bits représentant l'adresse physique du composant sur le bus et correspondant souvent à l'état de 3 broches du composants.
Le module présenté ici assemble ces 2 éléments ainsi que le bit de commande à savoir lecture ou ecriture en un octet transmissible sur le bus I2C.

 

2.2.1.8.Emission d'une trame complète

Attention ce module utilisant le module ci-dessus toute les applications l'utilisant doivent être "4+3+1" compliant en ce qui concerne l'octet de commande (4 bits pour le type, 3 bits pour l'adresse physique et 1 bit de commande ecriture/lecture). Dans le cas contraire ce module sera à personnaliser pour le composant étudié.

Ce diagramme appelle quelques commentaires:
Le module reçoit la trame a transmettre sous la forme d'un tableau de chaînes. Chaque élément du tableau contient un des mots clé suivant: envoyer_start, envoyer_octet, envoyer_ack, recevoir_ack, recevoir_octet, envoyer_stop.
Le tableau est entré dans une boulce FOR autoindexée. Dans la boucle FOR, l'élément est analyser afin de le reconnaître ce qui permet de sélectionner une des 6 étapes de la structure séquence. Cette structure appelle respectivement un des 6 modules décrit ci dessus. Voici une les 3 étapes principales:

 

2.2.2. Version VisualBasic

Toujours pas en vue.

 

  Retour à la table des matière du projet I2C ou continuer avec l'étude de la bibliothèque du PCF8574