Autor Tema: Bot Controlado por RF  (Leído 66894 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Bot Controlado por RF
« Respuesta #15 en: 11 de Mayo de 2006, 13:12:12 »
Yo ya he trabajado con modulos aureal transmitiendo datos.
Tengo dos juegos Emisor/receptor y es necesario para seguridad implementar codigo de envio porque con comunicacion serie se pierden datos.
Por eso lo del protocolo RC5 y ademas serviria para varios equipos ya que lleva ademas del comando la direccion incluida.
Yo de todas formas probare esta solucion, programada en C y ya os dejare noticias de como va.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Bot Controlado por RF
« Respuesta #16 en: 11 de Mayo de 2006, 13:31:18 »
Hola:

Lo siento Algec, no lei tu post anterior, lo que comento es en base a experiencia y pues para esa aplicacion no tuve problemas de transmicion, pero la idea del protocolo RC5 es buena, ya cada uno iremos contando los resultados, para el lunes o martes espero ya subir algo de codigo y un videito  :mrgreen:

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Bot Controlado por RF
« Respuesta #17 en: 11 de Mayo de 2006, 13:47:11 »
Lordlafebre, si tengo un pic con usart, el 18F2550, pero la verdad ni idea de como usarlo  :? :?

De principio pienso hacerlo con un 16F84 para manejarlo bien, luego subire al 18F.

Te agradeceria si me pudieras pasar alguna info de transmision de datos serial para ir avanzando.

Gracias, saludos.

P.D. Acabo de recordar que tengo un 16F628 que tambien tiene usart y es similar al 16F648, asi que tambien lo podre usart  :D :D



« Última modificación: 11 de Mayo de 2006, 14:06:24 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Bot Controlado por RF
« Respuesta #18 en: 11 de Mayo de 2006, 14:27:47 »
Hola:

El 628 iria bien, con respecto a lo de la informacion, pues no tengo nada a mano, lo siento, como comente en Basic solo utilizo las funciones  SEROUT y SERIN para enviar y resivir datos respectivamente.
« Última modificación: 11 de Mayo de 2006, 14:44:11 por LordLafebre »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Bot Controlado por RF
« Respuesta #19 en: 11 de Mayo de 2006, 16:19:51 »
Hola vequepic por el momento no tengo un código listo para controlar motores por rf (estoy trabajando en el), pero si quieres mira este soft, que comanda dos placas cada una con 4 entradas y cuatro salidas, en este caso es comunicación bidireccional, y con protocolo de comunicaciones preparado para trabajar en red de placas inalámbricas y con acuse de recibo ok.... es lo que tengo operativo por el momento, es mas de lo necesario para esta aplicación pero puedes mirar a ver si sacas algo en claro…

http://www.mytempdir.com/659042
Saludos desde Granada, España.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Bot Controlado por RF
« Respuesta #20 en: 11 de Mayo de 2006, 23:43:19 »
Te agradezco la pronta respuesta Lordlafebre pues me has animado a investigar esto de los modulos.

Gracias Dogflu66 por el archivo, lo he revisado y si mal no recuerdo me parece lenguaje C?

Pues yo tratare de hacerlos funcionar con asembler, espero.

Saludos

“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Bot Controlado por RF
« Respuesta #21 en: 12 de Mayo de 2006, 03:18:58 »
Es basic veguepic, un tanto peculiar pero basic.

Algec no observe nunca perdidas de datos en las tramas, para que el protocolo de repetición de trama errónea se activara tuve que provocar yo el error...

Siempre la primera trama llega bien, por supuesto con protocolo de detección de inicio de trama, identificación de la red, nombre envía, nombre al que se envía, nombre de la trama, comando, datos, datos, datos, datos y checsum…
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Bot Controlado por RF
« Respuesta #22 en: 12 de Mayo de 2006, 03:25:12 »
y por supuesto la respuesta del comando generico "OK" a esa trama en concreto para validarla...
Saludos desde Granada, España.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Bot Controlado por RF
« Respuesta #23 en: 12 de Mayo de 2006, 04:42:05 »
Yo si tuve problemas y supongo que son de interferencias de radio porque en Ir me funcionaba bien el mismo protocolo.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Bot Controlado por RF
« Respuesta #24 en: 12 de Mayo de 2006, 12:14:41 »
VEamos, he comenzado a tratar de evr el protocolo que tiene el mando que tengo libre y uso el siguiente programa que andaba por aqui por el foro, que creo que es de Potcher(mucha ayuda me presto antes en otras cosas)
 
Código: [Seleccionar]
//***************************************************
// CCS Compiler// Receptor IR (código RC5 de Philips)
//***************************************************



#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT  // Los Fuses de siempre
#use delay(clock=4000000)                     // Oscilador a 4 Mhz


// Ojo a la libreria de LCD

#include <lcd1.c>

// selecciona la entrada del sensor IR

#define REC_IR PIN_B0

// ojo hay que ver donde se conecta el LCD

main(){

   // define un bit
   int1 bit;

   // define enteros de 8 bits

   int i, nbit, error;

   byte buffer[2];


   set_tris_c(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas

   // inicializa el lcd y pone un mensaje
   lcd_init();
   printf(lcd_putc,"\fReceptor IR:");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"RC5 de PHILIPS\n");

   delay_ms(2000);

   // El sensor receptor invierte el código
   // RC5 del emisor (mando a distancia)

   // bucle de trabajo

   while(1)
      {
      buffer[0]=0;  // pone a cero el primer Byte
      buffer[1]=0;  // pone a cero el segundo Byte
      error=0;
      nbit=0;
      i=0;


      while(input(REC_IR)==1);

         // Espera al 1er bit de START (flanco de bajada) del receptor IR

            delay_us(444);

         // Se posiciona en el medio
         // el codigo son 13 Bits ( 2 de start + 5 direccion + 6 comando)

      while((nbit++ != 13) && (error == 0)) // 2º bit de START + 1 bit TOGGLE
            {

            // 5 bits DIR + 6 bits COMANDO
            // nbit varía de 0 a 12 = 13 bits

            delay_us (889);

            // Mide en el primer semiperiodo del
            // bit, para que invierta el código y
            // dé el original RC5 del emisor

            if(input(REC_IR)==0)
               {
               delay_us (889);
               if(input(REC_IR) != 1)
                  error=1;
        bit=0;   // Es un 0
               }
        else
               {
               delay_us(889);
        if (input(REC_IR) != 0)
                     error=1;
               bit=1;   // Es un 1
               }
            shift_left(buffer,2,bit);            //    buffer=buffer[0], 2·8=16bits, bit=0 ó 1
            }

            if(error) printf(lcd_putc,"\fError\n");
            else printf(lcd_putc,"\f%x %x Comando %d\n",buffer[1],buffer[0],buffer[0]);
        }
    }








[end code]

Esto no me funciona y no se porque, no me lee nada en el LCD, ningun dato del IR, aunque los pulsos llegan bien, lo he comprobado sacandolos por otro pin del pic segun llegan y con el osciloscopio



Desconectado angelmoi123

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 298
    • Construccion de Maquinas CNC
Re: Bot Controlado por RF
« Respuesta #25 en: 12 de Mayo de 2006, 12:59:00 »
SALUDOS AMIGOS

YO HE UTILIZADO, LOS MODULOS LPRS Y ME PARECEN FANTASTICOS, TRABAJAN HASTA 38.400 bps POR LO QUE PARA UN PROYECTO DE ROBOTICA TELEDIRIGIDO ES SUFICIENTE.

ANGELMOI123  

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Bot Controlado por RF
« Respuesta #26 en: 13 de Mayo de 2006, 15:51:28 »
Hola amigos , bueno tarde pero les comento; asi como les decia en el foro de picbasic pues uso los mismos modulos de rf, y me han funcionado muy bien para varias cosas, asi pues tambien controle la vibora que viene en el libro de mcgrawhill el de Amphibionics esa viborilla que todos conocemos le anexe una rutina para poder ser controlada via rf con esos modulos y desarme el mando analogico del play (la palanquita). y le deje la rutina que viene con el robot.

en realidad fue muy sencillo ya que el control es analogo usando el adc del 877 cree rutinas para los valores que me daban de izquierda de derecha arriba y abajo y cuando se combinaban. Por ejemplo: para la izquierda los valores analogos me oscilaban entre 50 y 120 y si mi variable estaba en eso se movia  ala izquierda y asi para todos mandando via serial a los modulos con sus datos de sincronia y pues la viborilla se movia muy bien.

claro antes de encender el animalejo con un switch escogia si seria manual o automatico, para el circuito transmisor y receptor utilice el 16f877. y lenguaje PBP.

ahora lo que quiero que haga esa viborilla es que en modo automatico me describa el terreno por donde paso en un lcd como el juego de la viborita que siga derecho y qu me indique las vueltas que da, claro para esto tendria que ocupar otro par de modulos y seria bueno utilizar los decodificadores de holtek ya que podria direccionar ambos pares y asi no interferir en las señales ya que manejarian diferentes canales, ademas de que el control remoto seria ya mas sencillo utilizando una cruzeta como la del playstation.

saludoss
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Bot Controlado por RF
« Respuesta #27 en: 14 de Mayo de 2006, 11:02:22 »
Pues vamos todos palante y vemos lo que sacamos...

Algec, estuve mirando tu código, y no le veo fallo, de todas formas pienso que esta rutina tendría que estar implementada por interrupciones, ya que según crezca el programa, puede que tengas que repetir varias veces la trama para que los bit sean leídos correctamente... de todas formas yo no soy un experto en C, a ver lo que te comenta algún otro compañero...
« Última modificación: 14 de Mayo de 2006, 11:05:25 por dogflu66 »
Saludos desde Granada, España.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Bot Controlado por RF
« Respuesta #28 en: 14 de Mayo de 2006, 13:18:01 »
Gracias por responder. Por cierto ese codigo no es mio.
Me he centrado primero en la emision IR en codigo RC5 y ya esta el primer programita de pruebas, que funciona al menos en proteus, lo pego por si alguien quiere probarlo.
Mañana seguire con la recepcion a ver si tengo tiempo.
Código: [Seleccionar]
// Explicacion del Protocolo RC5
// 1 = 899 Us salida a 0 y 899 useg salida a 1
// (un flanco de subida a mitad de un pulso de 1778 useg de duracion es un 1)
// 0 = 899 Us salida a 1 y 899 useg salida a 0
// (un flanco de bajada a mitad de un pulso de 1778 useg de duranciones un 0)
// Como el receptor IR necesita una modulacion de 38 Khz se usa el PWM para generar la modulacion


#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)

int duty       =  12;   // ajusta el ciclo del oscilador
int tempo      =  25;   // ajusta la frecuencia del oscilador, subir el valor baja la frecuencia


// FUNCION DE ENVIO DE PULSOS
// Genera los pulsos del protocolo RC5 para cada bit a enviar
// Genera los pulsos de longitud determinada al protocolo RC5
// y los flancos de subida o bajada correspondientes

void enviaIR(int1 bit)   // envia un bit en el protocolo RC5
{
   if(bit==1)                   // envia un 1
      {
      setup_ccp2(CCP_OFF);      // Desactivo CCP2 (38 Khz)
      delay_us(889);            // espera 889 useg
      setup_ccp2(CCP_PWM);      // Activo  CCP2 (38 khz)
      delay_us(889);            // espera 889 useg
      }
   else                         // envia un 0
      {
      setup_ccp2(CCP_PWM);      // Desactivo CCP2 (38 khz)
      delay_us(889);            // espera 889 useg
      setup_ccp2(CCP_OFF);      // Activo CCP2 (38 khz)
      delay_us(889);            // espera 889 useg
      }
}


void main()
   {
   int x;   // variable auxiliar

   // Hay que ajustar estos valores al codigo de RC5
   // y sincronizarlo con el receptor que debe tener la misma address
   // y actuar segun los mismos commands
   //         PROTOCOLO RC5
   // dos bits de start a 1 y uno mas 0
   // + cinco bits de address
   // + seis bits de command
   // los restantes se ignoran, pero el ultimo debe ser 0 para dejar desactivado
   // el oscilador al finalizar el comando

   // La direccion 00001 es la direccion de TV2
   // el comando 000001 corresponde a la tecla 1 del mando a distancia RC5
   // el comando 000010 corresponde a la tecla 2 del mando a distancia RC5
   // el comando 000011 corresponde a la tecla 3 del mando a distancia RC5
   // el comando 000100 corresponde a la tecla 4 del mando a distancia RC5
   // el comando 000101 corresponde a la tecla 5 del mando a distancia RC5

   char comando0 =0b1100000100000100;
   char comando1 =0b1100000100001000;
   char comando2= 0b1100000100001100;
   char comando3= 0b1100000100010000;
   char comando4= 0b1100000100010100;

   setup_ccp2(CCP_PWM);                // Configura CCP2 como PWM
   setup_timer_2(T2_DIV_BY_1,tempo,1); // f=38KHz (t = 26us)
   set_pwm2_duty(duty);                // Determina tiempo en alto


   // Se puede anular la siguiente linea de codigo si
   // se quiere comprobar la frecuencia del oscilador
   // ya que este estara oscilando fijo a 38 Khz
   // hasta que se pulse la primera tecla

   setup_ccp2(CCP_OFF);   // desactiva inicialmente el oscilador de 38 Khz


   do
      {

      // transmision del dato correspondiente al pulsador activado
      // activaria RTCC segun comando RC5

      if(!input(PIN_A0))
         for(x=0;x<14;x++)    // solo usas 13 bits por comando RC5
            enviaIR(bit_test(comando0,x));

      if(!input(PIN_A1))
         for(x=0;x<14;x++)
            enviaIR(bit_test(comando1,x));

      if(!input(PIN_A2))
         for(x=0;x<14;x++)
            enviaIR(bit_test(comando2,x));

      if(!input(PIN_A3))
         for(x=0;x<14;x++)
            enviaIR(bit_test(comando3,x));

      if(!input(PIN_A4))
         for(x=0;x<14;x++)
            enviaIR(bit_test(comando4,x));

      delay_ms(10);    // retardo entre el envio de un comando y el siguiente
                       // si se deja pulsado un pulsador fijo

      }while (TRUE);
   }

Ya me direis como va, si alguien quiere el proteus de esto que me lo diga y como subirlo y lo pego.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Bot Controlado por RF
« Respuesta #29 en: 14 de Mayo de 2006, 15:27:52 »
Trabajando sobre el receptor he detectado un fallo en el programa emisor que pegue antes y paso a clarificar cual es
Los comandos estan mal configurados porque he colocado los bits de mas peso como bits de inicio y al reves
es decir hay que ponerlos asi

lo que es ahora 0d1100000100000100
deberia ser       0d0010000010000011
Perdon por el error


 

anything