TP3 - CNAM - Réalisation des modules
du Bus I2C
Didier Brunel.
Cette séance a pour objectif la réalisation d'un module I2C.
Le module confié pour l'assemblage est un afficheur I2C à 4 digits. Il utilise un circuit SAA 1064.
Pour ce circuit le décodage de l'adresse fait appel à une entrée analogique. La tension imposée sur cette
entrée est imposée par un diviseur de tension.
La commande se fait par multiplexage sur deux blocs de 2 deux afficheurs.
Le montage n'a pas posé de problèmes hormis les connecteurs RJ11 dont l'écartement des broches ne correspondait
pas au trous du circuit imprimé. Un simple élargissement a permis de régler le problème.
Question 1:
L'adresse est codée sur 8 bits dont une partie est fixée par construction et l'autre laisséeau choix de l'utilisateur.
Le format pour ce module est : 01110 A1 A0 R/W
La séquence 01110 est fixe dans le circuit lui-même. Les bits A1 et A0 dépendent du diviseur de tension constitué
par les résistances R1 et R2 sur le montage sur lequel le user peut jouer en fonction des composants (résistances)
qu'il soudera. L'attribution binaire qui en découle est la suivante:
R1 |
R2 |
A1 |
A0 |
inf |
0 |
1 |
1 |
5/8 |
3/8 |
1 |
0 |
3/8 |
5/8 |
0 |
1 |
0 |
inf |
0 |
0 |
On a donc le choix entre 4 adresses. Une adresse peut être par exemple : 0111 000 R/W. En héxa ca donne donc 70h pour écrire
ou 70h pour lire.
Rappel: Le bit R/W sert à indiquer si on fait une opération de lecture ou d'écriture.
Question 2 :
On peut commander l'allumage des segments au moyen d'une matrice de codage hexadécimale qui permet de générer 128
motifs distincts. Au total c'est 256 motifs qui peuvent être affichés avec le point décimal. Cette matrice inclut bien évidemment
les caractères classiques (1, 2, 3, …) . Une fonction de test est incluse. Pour simplifier, l'allumage d'un motif se résume à écrire
à une adresse donnée un octet de commande et a une autre adresse les données nécessaires pour l'écriture des motifs que l'on veut écrire.
Un octet d'instruction) sert à choisir un des 8 registres internes du circuit au moyen de 3 bits SC SB et SA.
L'attribution des registres est:
SC SB SA
0 0 0 registre de commande
0 0 1 afficheur 1
0 1 0 afficheur 2
0 1 1 afficheur 3
1 0 0 afficheur 4
les 3 dernières adresses sont réservées.
Ce module permet enfin plusieurs modes de fonctionnement (statique, dynamique) suivant que l'on veut une visualisation continue
des afficheurs 1 et 2 ou une visu alternée des digits 1+3 et 2+4. On peut éteindre ou allumer les afficheurs par bloc de 2. Ce type
de module est donc très souple d'emploi.
L'opération de lecture du circuit qui retourne un octet d'état qui permet de voir si le flag de reset a été activé. C'est le cas au démarrage
Ce qui a pour effet de vider les registres et d'éteindre les afficheurs.
Question 3:
Ce type de module permet par exemple d'afficher l'heure que l'on peut récupérer depuis le module timer,
d'afficher une température prise par un capteur de température, de visualiser en fait toute information qui peut être
ramenée sur un tel type d'afficheur. Il est possible de faire alterner les informations affichées. Un point décimal déplaçable
permet d'afficher des décimales par exemple pour les températures. On peut aussi afficher des informations binaires (0 ou 1)
pour par exemple donner l'état d'ouverture de 4 portes. Les possibilités sont très nombreuses vu la richesse des motifs qu'on
peut afficher.
Question 4:
Test pour voir si le module marche. Une des possibilités est d'utiliser le bit de test de l'octet de commande. Quand ce bit est actif
tous les segments sont allumés.
Pseudo programme (on suppose que les bits A0 et A1 de l'adresse sont câblés à 0 0:
1 Lit l'adresse 71h, on recupere l'octet de status.
2 On affiche le premier bit PR.
3 Si bit PR=1 le module a bien ete resette va en 5
4 Si bit PR=! 1 le module n'a pas ete resette, on sort
5 On ecrit sur l'adresse 70h sequentiellement les octets :
00h: definit l'adresse du registre de contrôle
78h: on ecrit le motif 0111 1111 dans le registre de contrôle. Les effets sont donc: +3mA, +6mA, +12mA, Test actif,
Digits 2 et 4 ON, Digits 1 et 3 ON, Mode dynamique
FFh: digit 1 on force tout allume
FFh: idem
FFh: idem
FFh: idem
6 on eteint tout en ecrivant sequentiellement a l'adresse 70h:
00h
77h: en binaire 0111 0111: Puissance a fond, test inactif, mode dynamique, digits sur on
00h, 00h, 00h, 00h: les 4 digits n'affichent plus rien.
Test pour voir les diverses fonctions. Ceci se fait en jouant en fait sur le registre de contrôle.
Pour tester cela on peut donc faire afficher le même motif par exemple tous les segments allumés avec
le point mais en faisant défiler tous les bits du registre de contrôle, par exemple on écrit séquentiellement à l'adresse 70h :
00h, 07h, FFh, FFh, FFh, FFh on joue sur les bits C4 C5 et C6
00h, 17h, FFh, FFh, FFh, FFh
00h, 27h, FFh, FFh, FFh, FFh
00h, 37h, FFh, FFh, FFh, FFh
00h, 47h, FFh, FFh, FFh, FFh
00h, 57h, FFh, FFh, FFh, FFh
00h, 67h, FFh, FFh, FFh, FFh
00h, 77h, FFh, FFh, FFh, FFh
La séquence ci-dessus va afficher 4 chiffres 8 avec leurs points decimaux et une intensite lumineuse progressive avec
les digits actifs en mode dynamique.
Si on veut une mode statique il suffit de remplacer les octets du type x7h par x6h (on joue sur le bit C0), par exemple:
00h, 06h, FFh, FFh, FFh, FFh
00h, 16h, FFh, FFh, FFh, FFh
00h, 26h, FFh, FFh, FFh, FFh
00h, 36h, FFh, FFh, FFh, FFh, etc,
Comme questions je voudrais savoir si l'affichage est maintenu apres l'envoi d'une commande ou s'il faut faire un "latch"
logiciel des données qu'on envoit sur le module ?
Pour d'autres éventuelles questions j'attend d'avoir utiliser concretement le module.