Autor Tema: Control remoto IR/RF  (Leído 3666 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Control remoto IR/RF
« en: 08 de Mayo de 2006, 13:44:32 »
He pensado hacer un control remoto que sirva tanto para pequeños robots, pequeño electrodomestico o algun tipo de equipo con pocas necesidades.
Usaria el protocolo que se usa en los mandos a distancia por IR, protocolo RC5, ya que este es fiable y se puede implementar directamente tanto en un receptor IR y un mando a distancia RC5, o a mas distancia con pic usando un transmisor RF con pic codificador y  un receptor RF con otro PIC de decodificacion. Lo unico que cambiaria es el medio de transmision, por lo que seria muy versatil.
El problema es que no encuentro nada sobre RC5 en C, todo lo que encuentro esta en ensamblador.
Alguien ha visto rutinas de codificacion y decodificacion RC5 o de algun tipo de mando a distancia IR en C?
¿Donde puedo encontrarlas?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Control remoto IR/RF
« Respuesta #1 en: 08 de Mayo de 2006, 16:06:10 »
Yo te las busco en el saco del disco duro. Mañana te las pongo, ahora me voy a cenar.

Un saludo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Control remoto IR/RF
« Respuesta #2 en: 09 de Mayo de 2006, 02:29:48 »
Por fin lo encontré.

Esta rutina creo recordar que a Radon no le funcionaba, sin embargo yo la probé y sí que funciona.

Código:

Código: C
  1. //***************************************************
  2. // CCS Compiler
  3. // Receptor IR (código RC5 de Philips)
  4. //
  5. // Autor : HEILIG Yves ; Editado por RaDoN
  6. //***************************************************
  7.  
  8. #include <16F876.h>
  9. #fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
  10. #use delay(clock=4000000)
  11. #include <lcd_c.c>
  12.  
  13. #define REC_IR PIN_B0
  14.  
  15. main()
  16. {
  17.         int1 bit;
  18.         int i, nbit, error;
  19.         byte buffer[2];
  20.  
  21.         lcd_init();
  22.         printf(lcd_putc,"\fReceptor IR:");                              // El sensor receptor invierte el código
  23.                                                                                                         // RC5 del emisor (mando a distancia)
  24.         lcd_gotoxy(1,2);
  25.         printf(lcd_putc,"RC5 de PHILIPS\n");   
  26.         delay_ms(2000);
  27.  
  28.         while(1)
  29.         {
  30.                 buffer[0]=0;
  31.                 buffer[1]=0;
  32.                 error=0;
  33.                 nbit=0;
  34.                 i=0;
  35.                
  36. // Sin este trozo de programa va igual         
  37. /*
  38.                 while( i++ != 4)
  39.                 {                                                                                       // Test si REC_IR au repos prolongé
  40.                         if(REC_IR == 0) i=0;
  41.                         delay_us (889);
  42.                 }
  43. */
  44.                 while(input(REC_IR)==1);                        // Espera al 1er bit de START (flanco de bajada)
  45.                 delay_us(444);                                                          // Se posiciona en el medio
  46.  
  47.                 while((nbit++ != 13) && (error == 0))           // 2º bit de START + 1 bit TOGGLE +
  48.                 {                                                                                       // 5 bits DIR + 6 bits COMANDO
  49.                                                                                                         // nbit varía de 0 a 12 = 13 bits
  50.                                                                                                        
  51.                         delay_us (889);                                                 // Mide en el primer semiperiodo del
  52.                                                                                                         // bit, para que invierta el código y
  53.                                                                                                         // dé el original RC5 del emisor
  54.  
  55.                         if(input(REC_IR)==0)
  56.                         {
  57.                                 delay_us (889);
  58.                                 if(input(REC_IR) != 1) error=1;
  59.                                 bit=0;                                                          // Es un 0
  60.                         }
  61.  
  62.                         else
  63.                         {
  64.                                 delay_us(889);
  65.                                 if (input(REC_IR) != 0) error=1;
  66.                                 bit=1;                                                          // Es un 1
  67.                         }
  68.  
  69.                         shift_left(buffer,2,bit);       // buffer=buffer[0], 2·8=16bits, bit=0 ó 1
  70.                 }
  71.  
  72.                 if(error)
  73.                         printf(lcd_putc,"\fError\n");
  74.                 else
  75.                         printf(lcd_putc,"\f%x %x Comando %d\n",buffer[1],buffer[0],buffer[0]);
  76.         }
  77. }

Un saludo

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Control remoto IR/RF
« Respuesta #3 en: 09 de Mayo de 2006, 08:40:14 »
Potcher como siempre en mi ayuda, mil gracias tio, las busque por entre las piedras y no la encontraba. Ya comentare si funciona o no.


 

anything