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

Datasheet LPC12

Adressage du LPC12_3 en RD avec adresse I2C 71h

SCL
SDA

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.