Ce circuit
I2C assure la gestion d'un clavier matricel 12 touches et permet le transfert
du code ascii de la touche activée vers un microcontroleur ou un PC via
un simple bus I2C à 2 fils (SCL,SDA).
Le PC ou le circuit I2C maître peut scruter ce circuit,toutefois il est
préférable de générer une interruption sur le master
à l'aide de la broche INT du LPC12 qui passe à 0 au relâchement
de la touche,la lecture I2C provoquant le retour à 1 de cette broche.
Si /INT n'est pas relié au master, ce dernier devra lancer régulièrement
une lecture I2C du LPC12 :si une touche a été pressée,le
circuit retournera le code ascii de la touche,sinon FFH.
Le LPC12
est un composant programmé sur un microcontrôleur OTP P87LPC760
de Philips présentant l'avantage d'intégrer son circuit de reset
et d'horloge et dont le bus I2c est utilisable jusqu'à 100 khz.
Le
circuit (hors accès I2C ou appui d'une touche) est en mode idle optimisant
la consommation à 6mA sous 5V (tension d'alimentation de 2,7 à 5V).
La broche BUZOUT pilote un buzzer signalant l'appui sur une touche.
La broche A0 permet de coder deux adresses I2C permettant de raccorder deux
boitiers I2C en 7Xh.
Sur le schéma, le LPC12 répondra à l'adresse 71h émise
par le master.
Voit le datasheet pour le détail de la trame I2C.
_____________________________________________________________________________________
Egalement disponible, le LPC12_3 qui
permet de lire et retourner 3 caractères frappés successivement au clavier.
La broche INT passe à 0 à la réception du premier caractère.A
cet instant,si aucune lecture I2C est lancée, le LPC12_3 peut encore
stocker 2 autres caractères
dans son
buffer.Si aucune lecture I2C a été effectuée à l'arrivée
d'un quatrième caractère,
ce dernier (et les suivants) seront perdus.
La lecture de ce circuit est différente car il faut lire à minima 2 octets
par lecture I2C.
En effet, le LPC12_3 retourne systématiquement:
-L'octet 'nombre de caractères reçus'
Puis
-Valeur ASCII du premier octet
-
Valeur ASCII du second octet (si car frappé au clavier)
-
Valeur ASCII du troisième octet (si car frappé au clavier)
Dans tous les cas, le nombre d'octets à lire est 1+(nb)
Exemple:le premier octet reçu lors d'une lecture I2C est 02 ->il faut
lire 2 autres octets (correspondant à 2 caractères frappés au clavier), soit
3 octets dans ce cas.
Comme le LPC12, le LPC12_3 fonctionne pour une tension d'alimentation de 3
à 5V
Adressage du LPC12_3 en RD avec adresse I2C 71h SCL |
Important:
Le LPC12_3 comporte un dispositif de stretching
interne qui tire le signal SCL à l'état bas en cas d'occupation
interne du circuit.
C'est le cas dans le graphique précédent pour le bit 6 de SCL de
l'adresse (2° pulse de syncro en partant de la gauche après le start).On
constate que l'état bas entre le premier et le deuxième pulse est
plus large que les états bas entre les autres pulses).
Voir spécifications du bus I2C page 13 8.3
Conséquence
pour la routine master I2C qui envoie l'octet sur le bus:
La routine
master qui vient de fixer SCL à l'état
haut doit venir tester si SCL=1,attendre si nécessaire que cette condition
soit vérifiée et fixer l'état haut à 5 µS
max avec SCL=1 (100khz).
Toute routine I2C master doit traiter le signal de cette manière
afin de garantir la compatibilité avec tous les circuits I2C et répondre
aux spécifications.