Emisor de IR (Infrarrojos) para ROOMBA con PIC16F84
Desde hace algunos meses dispongo de uno de esos aspiradores autonomos (robotizados) ROOMBA. Como he visto que no hay mucha información en internet sobre el protocolo que se usa para transmitir los comandos IR a este aspirador, y aprovechando que estoy con un proyecto sobre éste, pongo aqui unas rutinas que he creado para enviar esos comandos IR con un PIC16F84.
El protocolo que usa para la emisión de estos comandos Infrarrojos (IR) es el siguiente:
Portadora de Frecuencia = 38 KHz (T = 26,31usg = Ton + Toff)
1 Lógico = 3 msg de envío de la portadora (ON) + 1 msg de OFF
0 Lógico = 1 msg de envío de la portadora (ON) + 3 msg de OFF
Por lo tanto, para enviar un “1 lógico” se deben enviar: 3msg/T = 114 pulsos (Ton+Toff) (3msg/26,31usg=114) y 1 msg a OFF.
Por lo tanto, para enviar un “0 lógico” se deben enviar: 3msg/T = 38 pulsos (Ton+Toff) (1msg/26,31usg=38) y 3 msg a OFF.
El comando CLEAR (comienza a aspirar) es el código 136 = “10001000”
Aquí va el programa que he creado para enviar el comando CLEAR y que el aspirador se ponga a funcionar.
program Envio_Comandos_ROOMBA ' Envios de comandos IR a ROOMBA ' ******************************************************************************* ' (c) Autor: ZackY - zackyzgz@yahoo.es ' '-HARDWARE: ' MCU: PIC 16F84A ' Cristal: 4 Mhz ' Diodo IR conectado a PORTA.1 (salida) ' Pulsador conectado a PORTB.0 (entrada) ' ******************************************************************************* Dim pulsado as byte 'Sub-rutina para generar un 1 logico de trama IR Sub procedure Env_Uno() Dim i as byte For i=1 to 114 ' 3msg/26umg= 114 pulsos on-off Setbit(PORTA,1) Delay_us(12) ' Ajuste: Debería ser 13usg, pero observando el osciloscipio Clearbit(PORTA,1) ' ese valor se ajusta mejor Delay_us(2) ' Ajuste: Debería ser 13usg, pero observando el osciloscipio next i ' ese valor se ajusta mejor Clearbit(PORTA,1) ' 1msg a OFF Delay_ms(1) End sub 'Sub-rutina para generar un 0 logico de trama IR Sub procedure Env_Cero Dim i as byte For i=1 to 38 ' 1msg/26umg= 38 pulsos on-off Setbit(PORTA,1) Delay_us(12) Clearbit(PORTA,1) Delay_us(2) next i Clearbit(PORTA,1) ' 3msg a OFF Delay_ms(3) End sub Main: TRISA = 0 ' PORTA.1 como Salida TRISB = 1 ' PORTB.0 como Entrada PORTA.1 = 0 ' Inicializo PORTA - Apago led PORTB.0 = 1 ' Inicializo PORTB - Entrada OFF pulsado = 0 Inicio: While true If PORTB.0 = 0 then ' Envio comando CLEAR Env_Uno 'Envia 1 Env_Cero 'Envia 0 Env_Cero 'Envia 0 Env_Cero 'Envia 0 Env_Uno 'Envia 1 Env_Cero 'Envia 0 Env_Cero 'Envia 0 Env_Cero 'Envia 0 Delay_ms(32) end if Wend End.
Fuente: http://foros.zackyfiles.com/showthread.php?t=570461
Tuitear 2.300 Veces leído 0 comentarios |
26 junio 2011 en Electronica | tags: Electronica |