Vous êtes sur la page 1sur 8

12F675 Receptor IR Rx Descripcin

Este trabajo est basado en un control remoto de la TV de mi casa, para controlar un PIC 12F675. Es un trabajo didctico, para experimentar controlando un PIC. Solo se pretende leer el cdigo y sacarlo por un puerto serie sof, al Hyperterminal del Windows XP. Por ser didctico, el Firmware ocupa mucha memoria de programa y RAM, que no es necesaria en una aplicacin real, como por ejemplo prender y apagar un foco de iluminacin. El control remoto emite un tren de pulsos de iluminacin infrarroja, que consta de una serie de pulsos de onda cuadrada, montada sobre una onda portadora de 36 Khz. El receptor que se ve en el esquema, recibe el tren con portadora y lo convierte en un tren de ondas cuadradas, que es recibido por el PIC, y la decodifica a cuatro variables: 1) Codigo, que es el valor de todo el cdigo emitido y recibido, que se divide en tres partes. 2) Toggle, es el valor de los primeros tres BIT recibidos. 3) Sistema, es el valor de los cinco BIT siguientes. 4) Numero, es el valor de los ltimos cinco BIT recibidos. Se calculan y muestran esta cuatro variables, que en una aplicacin, tal vez con la ltima alcance y sobre. Este trabajo est basado en el anterior: Lector de Cdigos de Control Remoto Infrarrojo. Consideramos que es importante que lo bajen y lean, pues hay muchos detalles grficos sobre los trenes de pulsos, que aqu no repetiremos. Bajarlo al documento.

Esta es la norma usada mas o menos, por mi control remoto, con diferencia en el nmero de BIT. Aqu son 3/5/6 y en mi control son 3/5/5. Los tiempos tambin varan un poquito. Si el control de Ustedes fuera algo distinto, es poco lo que hay que adaptar para corregirlo. Ya vern.

Esquema

Foto del Montaje

Todo el montaje est hecho sobre plaquetas existentes, que se bajan de esta pgina WEB, sin soldaduras. Es el sistema que uso normalmente para desarrollos.

Firmware
Est hecho y compilado en C de CCS y es lo que llev mas trabajo resolver. Primero comenc con interrupciones de dos tipos, pero ninguna trabajaba con estabilidad, sin cometer errores. Les muestro el tren de pulsos que es la base del Firmware:

La tensin normal es 1 (+5 Volt) y se mantiene mientras no llega seal. Cuando se pone a cero, comienza el ciclo de lectura. while(Puerto4 == 1) {set_timer1(0);} // Espera hasta que llegue la seal de tecla pulsada mientras mantiene en cero el timmer1. t1=0;Num = 13;Orden = 1;Toggle = 0;Sistema = 0;Numero = 0; Cod=0; // Valores iniciales //////////////////////////////////////////////////////////////////////////////// Se queda esperando el cero, mientras mantiene en cero el Timer1. Luego comienza el ciclo de lectura por el estado cero, el que al finalizar pasa al uno. Esto corresponde al primer BIT. Como pasa de estado cero a uno, el valor del BIT es 1, segn se ve en la tablita del esquema. Esta es la base de la decodificacin del tren de pulsos que se repite hasta pasar los 13 BIT. while(Num>0) { while(Puerto4 == 0); puerto. Tiempo = get_timer1(); if ((Tiempo-t1) > T) { Cero();;Num-=1; } // Espera hasta que suba el estado del // Num-=1; es Num = Num -1; // Valor ledo // Registra el Bit si es = 0.

if ((Tiempo-t1) < T && Orden == 2) { Cero();;Bandera = 1; Num-=1;}// Registra el Bit si es = 0. if ((Tiempo-t1) < T && Orden == 1) {Orden = 2; } If (Bandera==1) {Orden = 1;Bandera = 0;} t1 = Tiempo; while(Puerto4 == 1); puerto. Tiempo = get_timer1(); if ((Tiempo-t1) > T) = 1. if ((Tiempo-t1) < T && Orden == 1) {Orden = 2; } If (Bandera==1) {Orden = 1;Bandera = 0;} // No registra Bit si orden = 1. {Uno(); Num-=1; } // Cambia el valor del Timer anterior // Espera hasta que baje el estado del // El valor es ledo. // Registra el Bit si es = 1. // No registra Bit si orden = 1.

if ((Tiempo-t1) < T && Orden == 2) {Uno(); Bandera = 1;Num-=1;}// Registra el Bit si es

t1= Tiempo; } // Fin del while Num

// Cambia el valor del Timer anterior

Las dos subrutinas (Cero() y Uno(), cargan el valor del BIT en la variable correspondiente. Aqu usamos 4 variables con fines didcticos, pero en una aplicacin, puede que se use una sola, y en ese caso no se usan subrutinas, sino que se cargan los valores directamente. Void Cero(void) { bit_clear(Cod, Num-1); if (Num <= 13 && Num >= 11) {bit_clear(Toggle, Num-11);} // el signo && es AND if (Num <= 10 && Num >= 6) {bit_clear(Sistema,Num-6) ;} if (Num <= 5 && Num >= 1) {bit_clear(Numero, Num -1);} } Void Uno(void) { bit_set(Cod, Num-1); if (Num <= 13 && Num >= 11) {bit_set(Toggle, Num-11);} if (Num <= 10 && Num >= 6) {bit_set(Sistema,Num-6) ;} if (Num <= 5 && Num >= 1) {bit_set(Numero, Num-1) ;} } Los comandos bit_clear y bit_set, son del CCS, y cargan en las variables el valor del BIT, si es cero o uno. Luego con printf se muestra las variables con el formato en que fue definida sea int8 o int16. Tambin se usan en ese formato, no como binarias. // Arma las 4 variables finales // Arma las 4 variables finales

Salida del HyperTerminal

Se ve la salida del nmero 3, con los dos Toggles y el nmero 9. Observar que siempre coincide el Toggle con el primer dgito izquierdo del Cdigo.

Variable OSCAL del PIC

En la posicin de memoria 3FFF, el valor es 0x3448, o sea 48 (sacando el 34) o sea 0b01001000, para marcar el PIC. (Ver nmero 59 de www.arossini.com.ar ) Hay que poner 0x3448 en el Firmware. #rom 0x3ff = {0x3448}

Esto es para este PIC. Cada uno debe leer el suyo y escribirlo en el programa. Este programa calcula los valores e indica como marcar el PIC. Bajarlo.

Vous aimerez peut-être aussi