Test RC5
Ce test permet d'afficher sur l'écran du PC la valeur des
codes correspondants aux touches de la télécommande.
La télécommande utilisée
Il s'agit d'une télécommande universelle (One for All), configurée pour émuler
une PHILIPS

L'écran du terminal PC
J'ai utilisé l'émulateur de terminal Kermit. On peut aussi utiliser l'hyperterminal
de Windows.
Les codes sont affichés sur 2 octets en hexa. Cela correspond au mot de 13 bits
reçu. Les 3 bits de poids fort ne sont pas significatifs.

Le schéma
Pour les besoins d'affichage des codes sur l'écran du PC, j'ai rajouté un
MAX232 relié a un connecteur 9 points.
IRBOT est rélié au PC par un câble droit sur COM1.

Le programme
Quelques explications:
Le programme boucle en attente du bit de start. A réception de start, on se
positionne au milieu du premier niveau d'un bit (sachant qu'un bit doit
obligatoirement avoir 2 niveaux). Et on capture les bits au fil de l'eau, on les
pousse dans le buffer vers la gauche.
On vérifie qu'il y a bien un changement de niveau à chaque bit, sinon erreur.
//***************************************************
// CCS Compiler
// telecom - Télécommande ir
//
// Auteur : HEILIG Yves
//***************************************************
#include <16f84.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=115200, xmit=PIN_B6, rcv=PIN_B7)
#define REC_IR PIN_B6 // récepteur ir
//**********************
// Programme principal
//**********************
main() {
int1 bit;
int i, nbit, erreur;
byte buffer[2];
printf ("Test Telecommande IR : PHILIPS\r\n\n");
while (TRUE) {
buffer[0]=0;
buffer[1]=0;
erreur=0;
nbit=0;
i=0;
while ( i++ != 4) { // Test si REC_IR au repos prolongé
if (REC_IR == 0) i=0;
delay_us (889);
}
while (input(REC_IR)==1); // Attend bit de START
delay_us(444); // on se positionne au milieu
while ((nbit++ != 13) && (erreur == 0)) {
delay_us (889);
if (input(REC_IR)==0) {
delay_us (889);
if (input(REC_IR) != 1) erreur=1;
bit=0; // c'est un 0
}
else {
delay_us (889);
if (input(REC_IR) != 0) erreur=1;
bit=1;
}
shift_left(buffer,2,bit); // et on le pousse dans le buffer
}
if (erreur) printf ("Erreur\n\r");
else {
printf ("%x %x Touche %d\n\r",buffer[1],buffer[0],buffer[0]);
}
}
}
Tous les codes de la
télécommande