On m'a donné un petit clavier sans fils infra-rouge, model RC-KB2, à l'origine destiné
à être utilisé avec un système de sons de marque Kenwood. Dès que je l'ai eu en main,
j'ai eu envie de comprendre le format de transmission qu'il utilisait. Ainsi, je pourrais
construire un récepteur qui permettrait d'utiliser le claiver sur un port clavier PS/2 de PC.
Deux ans plus tard, j'ai finalement trouvé (ou pris?) le temps de le faire. Cette page a pour but de documenter le
projet. Qui sait, peut-être ne suis-je pas le seul à vouloir utiliser ce clavier sur un PC? Sinon,
la partie décodant les signaux infra-rouges peut être réécrite pour d'autres modèles de clavier et même
pour des télécommandes ordinaires.
Photos
Photos du clavier Kenwood RC-KB2:
Led infra-rouge
Le clavier
encore le clavier
Photo prises durant le développement:
Montage pour le développement
Vue de près du récepteur infra-rouge. Un tsop1238.
Détails techniques
Lorsque le clavier émet des infra-rouges, ce n'est pas en continue. C'est en fait une onde
de fréquence entre 35 et 38 khz car un petit récepteur infra-rouge standard (récupéré d'un magnétoscope)
arrive à détecter la présence du signal (Je n'ai pas pris la peine de mesurer la fréquence exacte).
Après avoir observé le signal sortant du récepteur à l'aide d'un oscilloscope digital, j'ai
compris comment les donnés étaient transmises. Notez que mon récepteur IR a une sortie 'active low',
donc dans les diagrammes qui suivent, un niveau logique bas correspond à la présence d'une onde.
Lorsque le clavier souhaite émettre un évènement de touche appuyée, il
commence par générer un signal que j'ai nommé 'Attention':
4.5ms
----+ +----
|________|
9.1ms
Immédiatement après, le clavier transmet les bits de donnés. Le niveau logique 1 ou 0 est déterminé selon le
temps qui s'écoule entre les pulsations actives (560us). J'ai décidé qu'une
longue durée (environ 1640us) correspondrait à un 1 et une courte durée (environ 560us)
correspondrait à un 0.
Le clavier envoi un total de 32 bits de donnés, donc 4 octets. Voici la signification de chaque
octet:
Octet
Signification
Premier
Identification du périphérique. Toujours la même valeur.
Deuxième
Octet de poids fort du code de touche
Troisième
Octet de poids faible du code de touche
Quatrième
Inverse binaire de l'octet de poids faible. L'addition du troisième et
du quatrième octet doit donc toujours donner 255. Utile pour détecter les erreurs.
J'ai compilé une liste des codes envoyés pour chaque touche. La combinaison Shift + [Touche] ne fonctionne
pas pour tout les touches. Les touches 'Room B' agissent comme les touche 'Shift', mais ne fonctionne
pas avec les même touches. Les touches du clavier n'étant pas étiquetés n'émettent aucun signal. keycodes_rc-kb2.txt
Keymap
Le clavier
Ce clavier a été conçu pour un usage spécifique. Il est par conséquant très différent
d'un clavier de PC conventionel. Pas de touches ctrl, alt, F1-F12, Home,
End, Page up, Page down, Insert, Delete... Aussi, il y a des
touches qui n'existent tout simplement pas sur les claviers ordinaires. Par exemple,
Disc Sel, Sub out monit., User file name, Room B...
Mais le plus gros obstacle pour que le clavier soit vraiment utilisable est le fait qu'il est possible de
faire seulement certaines combinaisons de touches. Et lorsqu'on fait une combinaison, disons shift + a,
on reçoit un code de touche différent. Ceci est très différent d'un clavier PC qui transmettrait les événements
'Touche shift appuyée' suivi de 'Touche A appuyée'...
Voici un résumé des combinaisons de touches possibles. Voir
keycodes_rc-kb2.txt pour plus de détails.
Les boutons Shift peuvent être combinés avec les Lettres, les chiffres, et les charactères ;',./-+
Les boutons Room B peuvent être combinés avec certaines touches spécifiques au système
de son: Confirm, Repeat, Random, Display, +10, +100, les chiffres 0-9, set, disc skip down, disc skip up et les touches
stop/play/prev/next/rew/ff
Dans ces conditions, comment pouvons nous faire CTRL + C ou ALT+F1 ? Shift Page-up? Impossible. Pour contourner
ce problème, voici comment je traduis événements de touches du claiver IR en événements PS/2:
Lorsque la touche CONT PLAY a été appuyée, la prochaine touche appuyée est transmise au PC entre les
événements CTRL appuyé et CTRL relaché
Lorsque la touche Sub Out Monit. a été appuyée, la prochaine touche appuyée est transmise au PC entre les
événements ALT appuyé et ALT relaché
Il est possible d'appuyer sur CONT PLAY suivi de Sub Out Monit. pour obtenir l'équivalent de CTRL + ALT + qqch
Voici maintenant un tableau décrivant quelle touche du clavier correspond à quelle touche(s) envoyée(s) au PC.
Les touches évidentes, comme les chiffres, lettres et signes de ponctuation sont omises de ce tableau.
Bien sur, il manque quelques touches. Mais je ne penses pas utiliser le clavier pour programmer,
ni pour jouer à des jeux alors ça devrait aller. Je pourrai toujours implémenter de nouvelles
combinaisons si nécéssaire.
Kenwood key
PS/2 Key
Commentaires
Power
ESC
Confirm à +100
F1 à F9
Delete
Backspace
La touche delete est réellement là ou la touche Backspace est normalement placée
Disc.Sel.
Tab
P.mode
\
Check
insert
Clear
Delete
Set
Home
Mode
End
Cursor L
Flèche Gauche
Indispensables!
Cursor R
Flèche Droite
Charac. Srch. Down
Flèche Bas
Charac. Srch. Up
Flèche Haut
Disk Skip Down
Page Down
Disk Skip Up
Page Up
Room B + Disc skip Down
Shift + Page down
Parfait pour scroller dans les terminaux et la console de Linux
Room B + Disc skip Up
Shift + Page up
Cont Play
Ctrl + ????
Touche magique pour que la prochaine touche soit combinée avec CTRL du point de vue du PC
Sub Out Monit.
Alt + ????
Touche magique pour que la prochaine touche soit combinée avec ALT du point de vue du PC
Schéma
Note: Le circuit est alimenté par le port PS/2.
Logiciel
Voici le fichier hex qu'il faut programmer dans l'Atmega8:
ir2ps2.hex
Les fuses bytes pour ce projet sont: high_byte=0xc9 low_byte=0x9f.
Pour de l'information sur la programmation d'un AVR,
visitez ma page sur la programmation
d'AVR
Code source:
Le code source est rendu publique sous la license
GPL. Consultez
le fichier COPYING présent dans le tar pour plus d'informations. ir2ps2-1.0.tar.gz
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.