Autor Tema: Nuevo Enfoque para transmision de datos usando MODULOS RF  (Leído 8420 veces)

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

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Nuevo Enfoque para transmision de datos usando MODULOS RF
« en: 04 de Septiembre de 2007, 22:28:07 »
Bueno, ya desde hace tiempo he querido comunicar 2 pics utilizando los modulos de comunicacion RF que son tan comunes y de los cuales he visto bastantes proyectos todos ellos tratando de comunicarlos utilizando el puerto serial de los PIC's, sin embargo y como confirmaran los aventureros que se enbarcaron en la tarea, no todo es tan facil como tener lista la comunicacion serial utilizando cables, colocar en lugar de estos los modulos y listo (hubiera sido genial... no es cierto??).

Bueno, cuando hablamos de transmision por Radio Frecuencia, muchos conceptos deben ser tomados en cuenta, disciplinas enteras de la electronica ayudan a comprender y resolver los problemas que a cada uno de los aventureros se nos presentaron cuando quisimos utilizar estos modulos de la manera mas sencilla.

El proyecto y el nuevo enfoque que planteo a continuacion, sin embargo, sera aplicado sobre todo a proyectos que no incluyan transmision de datos, es decir, esta orientado a proyectos del tipo rele, este punto se hara mas claro cuando se explique el funcionamiento mas adelante.

Descubrimiento

De todas maneras quiero contarles como se me vino la idea, probablemente no sea la primera vez que se utiliza (no creo haber descubierto la polvora), y probablemente hasta tenga un nombre tecnico que desconozco, pero la forma de comunicacion a utilizar resulta bastante eficiente cuando se trata de este tipo de proyectos, y vale acotar que mis horas navegando y navegando por la red buscando algun antecedente sin resultado,  es el motivo por el cual deseo postear y compartir con ustedes mi experiencia.

Vamos al "descubrimiento"

Resulta que ni vien adquiridos los modulos que por cierto son los modelos CZ3 y FST3 de 433 y 315 MHz, (TX y RX ... es decir 2 parejas) teniamos que probarlos como era natural, para lo cual un compañero mio en el laboratorio de la universidad, se valio de fuentes dc (para el tx y rx), un generador de señales y un osciloscopio, colocamos el TX en un protoboard, lo alimentamos directamente con 5V y a la entrada de datos le pusimos la salida del generador de señales que estaba programado para generar un tren de pulsos de 5V de amplitud con una frecuencia de 25Hz; del otro lado lo mismo, el RX en un protoboard, alimentado directamente, y la salida de datos conectada al osciloscopio. Ni bien echamos todo a andar vimos como la comunicacion inalambrica se producia, el osciloscopio reproducia a la perfeccion la forma de onda, y sin antenas ni nada  ... eureka!! con esto podemos remplazar el cable de nuestra comunicacion serial ... y listo!!!!!

Bueno, una vez probados los modulos nos pusimos a desarrollar el proyecto, que en resumen (y para simplificar) se trataba de controlar las entradas de un pic desde el otro y visceversa (asi se escribe?? jeje), mas simple aun, en un PIC poner un bit a nivel alto, y en el otro que se prendiera un led; es decir una comunicacion FULL DUPLEX (es decir que ambos escuchan y escriben a la vez). Desarrollamos el proyecto en lenguaje C y utilizamos el proteus para simularlo, utilizamos como era obvio los modulos USART integrados y despues de algunas pruebas logramos exactamente lo que queriamos. Una vez terminada la simulacion pasamos a los protoboards nuevamente, en aquel tiempo teniamos los PICs 18F4550 a la mano, por lo cual decidimos utilizar estos, en la simulacion estabamos usando el 16F877, pero cambiar el codigo de uno a otro es bastante sencillo pues ambos son bastante parecidos.

Al probar la comunicacion en los protos utilizando el USART todo nos salio correctamente, estabamos muy contentos con los resultados, nuestros 2 cablecitos que unian ambos micros cumplian su funcion a la perfeccion, era hora de utilizar los modulos, y fue alli donde empezaron los problemas.

En resumen (y como muchos de ustedes saben) la comunicacion utilizando modulos, con el protocolo serial, fue ineficiente, por momentos funcionaba bien, por momentos no, y fue alli donde empezaron los problemas que varios de los que hemos intentado usar estos modulos maravillosos hemos tenido que soportar. Despues de varios intentos, codigos de proteccion, antenas, placas fabricadas, e incluso PIC's quemados (100 soles al agua), etc etc etc, nuestro proyecto seguia sin andar, y fue asi que lamentablemente en aquel semestre en la universidad nos jalaron en el curso por no haber podido concluir el trabajo satisfactoriamente, una pena infinita.

Muchos meses despues nuevamente a lidiar con el proyecto, pero esta vez el nuevo enfoque aplicado dio excelentes resultados.

Bueno, una noche de tantas probando los benditos modulos en el taller,  y sin oscilosocpio a la mano pero si con generador de funciones, recorde aquel experimento que hicimos en la universidad, y decidi hacer lo mismo para saber si los modulos estaban bien despues de tanto tiempo almacenados y tantos experimentos fallidos, pero como no tenia osciloscopio a la mano, utilice un multimetro Tektronic antiguo que me media frecuencia, y repeti el experimento anterior.

Fue entonces que se hizo el "desubrimiento",  con el modulo receptor ubicado a unos 5 metros de distancia y con el multimetro conectado a su salida de datos midiendo la frecuencia del tren de pulsos que enviaba mi generador conectado al modulo TX, pude notar que efectivamente los modulos trabajan de maravilla cuando de trenes de pulsos se trata y sin embargo son algo mas dificiles de usar cuando hablamos de comunicacion USART, y mas aun cuando esta es aleatoria, es decir, cuando solo transmites datos cada cierto tiempo o cuando depende de un evento externo (pulsar un boton por ejemplo)

Entonces, con trenes de pulsos funcionan genial, es mas, le puse una bateria al RX y me puse a caminar con el protoboard y el multimetro para ver hasta donde podia recibir la señal, (recuerden que estos modulos "EN TEORIA" deberian dar 1000m de alcance, yo con 50 hubiera estado feliz  :() y oh sorpresa, la comunicacion es bastante buena a 20m, 30m, 50m, ... 100m  :shock: ... y sin antenas ... y en protobard  :shock: con mi compañero en el laboratorio y comunicandonos por celular podia ver como la frecuencia medida en el multimetro variaba reproduciendo fielmente la aplicada al TX en el laboratorio 250m lejos de donde estaba parado. EUREKA!!!

La solucion amigos mios, y con esto termino tremendo preambulo, es transmitir la informacion en la frecuencia de los trenes de pulsos, en resumen, que un pic me genere un tren de pulsos de digamos ... 50 Hz cuando pulse un boton... 100 Hz cuando pulse otro... 150 Hz cuando pulse otro ... etc etc etc y del otro lado un PIC que mida la frecuencia, interprete el dato y haga encender un led , etc etc etc, y lo mejor de todo es que no tiene que ser necesariamente un frecuencimetro, simplemente tenemos que obtener un dato en funcion de la frecuencia capturada, en resumen:

Un generador de frecuencias, y un frecuencimetro.

Solucion que implementaremos en este apartado y que por cierto estan implementadas en el foro por los grandes maestros, sin los cuales hubiera demorado mucho mas para implementar estas 2 simples pero grandes funciones de los PICS.

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #1 en: 04 de Septiembre de 2007, 23:23:35 »
Hola alquimus !

Felicitaciones por el logro.
Cuando uno descubre por sí mismo las cosas, luego de mucho sacrificio, uno se siente realmente pleno de satisfacción.

..... y probablemente hasta tenga un nombre tecnico que desconozco ...

Modulación FSK

Saludos
Mario

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #2 en: 04 de Septiembre de 2007, 23:41:37 »
Hola Mario !!  :)

Que genial es el Foro, cuando aprendes y compartes, se cierra el circulo de la vida jejeje.

Bueno, investigando un poco sip, si vendria a ser una modulacion digital, solo que en este caso como los moduladores son AM, me parece que la modulacion vendria a ser ASK.
Como siempre gracias Mario.

Mañana continuo con esta pequeña experiencia que espero les ayude a los que como yo se han visto en figurillas para usar estos modulos.

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #3 en: 05 de Septiembre de 2007, 00:02:01 »
Bien ya que andaba investigando, avancemos un poco mas el articulo antes de que termine el dia.

Vamos por la primera parte, el generador de frecuencia que dara los datos a nuestro transmisor.

La idea es bastante sencilla y para aquellos que requieran una explicacion mas detallada, aqui les dejo el link del curso que el maestro RedPic publico para la generacion de nuestro tren de pulsos:

Generando un pulso. 1ª Parte. Onda simétrica con INTRTCC

Bien, el codigo que pongo a continuacion es una variacion muy basica de la explicacion del link.

La idea es que ni bien encendido el PIC, genere una frecuencia basica, la cual iremos dividiendo al accionar un switch, utilizaremos 4 switch y de esta manera generaremos 5 frecuencias, la basica, y las que corresponden a cada valor de los switchs.

El codigo:


Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #4 en: 05 de Septiembre de 2007, 00:04:45 »
Código: [Seleccionar]
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)

#define OUT     PIN_C6

// Atencion de la Interrupcion
#int_rtcc
void handle_rtcc_int(){
  Output_Toggle(OUT);               // Conmuto PIN de Salida;
  Set_timer0(138);
}

void main() {     ////////////////////////////////////////// INICIALIZACIONES GENERALES

    int8 entrada;       // Definimos una variable para almacenar el valor logico presente en el puerto A

    enable_interrupts(global);      // Habilitamos las interrupciones

    do {                // Este bucle se repetira constantemente

    entrada = input_a();      // Capturamos el valor del puerto A en nuestra variable


    switch(entrada) {

       case 0b00001111:  setup_timer_0(RTCC_DIV_256 | RTCC_8_BIT); enable_interrupts(int_rtcc);  break; // Si no hay ningun switch activado
       case 0b00001110:  setup_timer_0(RTCC_DIV_128 | RTCC_8_BIT); enable_interrupts(int_rtcc);  break; // Switch 0
       case 0b00001101:  setup_timer_0(RTCC_DIV_64 | RTCC_8_BIT);  enable_interrupts(int_rtcc);  break; // Switch 1
       case 0b00001011:  setup_timer_0(RTCC_DIV_32 | RTCC_8_BIT);  enable_interrupts(int_rtcc);  break; // Switch 2
       case 0b00000111:  setup_timer_0(RTCC_DIV_16 | RTCC_8_BIT);  enable_interrupts(int_rtcc);  break; // Switch 3
       default:          disable_interrupts(int_rtcc); break;
   }

    } while (TRUE);

}

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #5 en: 05 de Septiembre de 2007, 00:10:07 »
Realmente es mucha la gente que como en tu caso, ya se las ha visto en figurillas y otros que aún no y es bárbaro (al menos en mi criterio), cuando se hace como lo hiciste vós.
De forma clara, amena, con el ejemplo, y la vivencia momento a momento.
Sin problema a contar el primer intento fallido (hubiera sido muy fácil arrancar la historia desde la mitad y ocultar el tropezón inicial  8) ).

Por eso reitero mis felicitaciones y ojalá todos éstos ensayos que estás realizando, le sirvan a mucha gente.

Respecto a la modulación, es ASK cuando el bit (1) es portadora y el cero (0) no. Algo así cómo; "hay"/"no hay" .... "portadora"/"no portadora" (Amplitude Shift Keying)
En cambio a la transmisión de información por cambios de frecuencia se la conoce como Frecuency Shift Keying.

Y es cómo tú dices. Esos transmisores/receptores, deben venir para trabajar en modo ASK, pero eso no quita que puedas "modular" la portadora de 433 ó 315 Mhz. con tonos de 25, 50, 100, etc., para así gobernar distintas funciones en el receptor, que sin importar el tipo de modulación devolverá los tonos emitidos en origen.

Entonces, transmite portadora modulada con el tono a decodificar en el Rx, tomando éste hecho como un uno (1) y al dejar de transmitir queda como un cero (0)

Bárbaro alquimus !

Éxito mañana con las nuevas experiencias.
Saludos
Mario

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #6 en: 05 de Septiembre de 2007, 00:26:59 »
Pos yo quiero felicitar por compartir las experiencias con Todos, ese es el espíritu del Foro, Compartir experiencias y pos cada uno toma ese granito de arena y construye su Proyecto.
No como muchos otros que llegan solo a pedir y pedir, no aportan y ni siquiera se toman la molestia de leer.

Buena por esa alquimus  :-/

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #7 en: 05 de Septiembre de 2007, 00:28:16 »
Para la próxima, si quieres transmitir directamente RS232, si hay módulos que lo permiten y es el Xbee. Busca en el Foro y veras información de ellos.

Saludos!

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #8 en: 05 de Septiembre de 2007, 00:35:11 »
Hola Ernesto !!  :)

Acabo de investigarlo y si, impresionante el Xbee, pero este post esta enfocado para aquellos que como yo solo tenian acceso a estos modulos de transmision RF (que tambien hay infinitas varianes y fabricantes).

De todas maneras para la proxima Xbee corazon, tratare de importarlo o conseguirlo en el mercado Peruano.

Saludos   :)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #9 en: 05 de Septiembre de 2007, 05:47:34 »
Me vendrá bien tu experiencia porque quiero incorporar al Giroplay un receptor de RF. Para las pruebas he comprado los módulos de Aurel y los he probado a 2400bps con la usart sin problemas. Claro que no me he alejado ni los he puesto en movimiento. Supongo que luego vendrán los problemas.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #10 en: 05 de Septiembre de 2007, 06:07:59 »
Hice hace tiempo (ver los posts) una transmision RF con modulos Aurel. Use el protocolo del mando a distancia de TV RC5 de philiphs y funcionaba bien pero, dependiendo de donde a veces no va. Si hay interferencias da problemas pese al chequeo, por lo que me interesa tb lo tuyo.
Cuando puedas pegalo te estare agradecido

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #11 en: 08 de Septiembre de 2007, 02:11:42 »
Bien, continuemos con el post.

Veamos ahora la parte del receptor.

Recordemos que el receptor de RF nos entragara un tren de pulsos con frecuencia variable, las frecuencias que elejimos para el ejemplo eran de 50, 100, 200, 400 y 800 Hz, por lo tanto, el programa del PIC receptor sera basicamente un "frecuencimetro" que esperara hasta obtener el valor de las frecuencias ya mencionadas, y cuando encuentre una coincidencia, ejecutaremos alguna accion.

El "frecuencimetro" esta basado en la version del maestro RedPic de la utilizacion de la interrupcion externa; para mas detalle aqui el link:

Midiendo un pulso. 1ª Parte. Tiempo en Alto con INTEXT

Lo llamo frecuencimetro, pero en realidad no es un "frecuencimetro" en el estricto sentido, porque en realidad no nos interesa hallar la frecuencia propiamente dicha, mas bien el periodo de la señal recibida, despues de todo, solo necesitamos asociar un dato para cada señal que recibimos.

Veamos ahora el codigo del programa receptor.

Recordemos una vez mas que el objetivo de estos 2 programas es que el PIC TX (el que envia la señal) variara la frecuencia generada de acuerdo al estado logico en el nible bajo del puerto A, el PIC RX recibira los trenes de pulsos con frecuencias variables, interpretara la frecuencia (periodo en realidad) y encendera el led correspondiente en el nible bajo del puerto C (los primeros 4 bits).

Código: [Seleccionar]
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)

#define OUT     PIN_B7

int1  flag=0;                               // Flag para guardar el valor del timer en la variable apropiada
int16 t1=0x00,t2=0x00,leido=0x00;           // Variables para guardar estados del timer y el resultado final

#int_ext                                    // Atencion de la Interrupcion
void handle_ext_int(){

    if(flag==0){                            // He recibido Flanco 1
      t1=get_timer1();                      // Guardo en t1 el valor de TMR1 al Flanco 1
      flag=1;                               // Indico el siguiente flanco 2
      }
    else {                                  // He recibido Flanco 2
      t2=get_timer1();                      // Guardo en t2 el valor de TMR1 al Flanco 2
      flag=0;                               // Indico que el siguiente flanco será el 1
      set_timer1(0);                        // Reinicio TMR1
      leido = make8(t2-t1,1);
    }
}

void main() {     ////////////////////////////////////////// INICIALIZACIONES GENERALES

    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
    ext_int_edge(0,L_TO_H);                  // Configuro captura de flanco de subida
    enable_interrupts(int_ext);
    enable_interrupts(global);
    flag = 0;

   do {

       switch(leido) {

       case 236 :  output_high(pin_d0) ;  break;  // Cuando son 50 Hz (Ningun switch activado)
       case 118 :  output_c(0b00000001);  break;  // Cuando son 100 Hz
       case 59  :  output_c(0b00000010);  break;  // Cuando son 200 Hz
       case 29  :  output_c(0b00000100);  break;  // Cuando son 400 Hz
       case 15  :  output_c(0b00001000);  break;  // Cuando son 800 Hz
       default  :  output_c(0b00000000);  break;

       }

   } while (TRUE);
}

Una parte importante esta en la variable que se utiliza para guardar el dato obtenido segun la frecuencia de la señal; me explico:

Recordemos que el Timer1 es de 16 bits, por lo tanto necesitamos una variable de 2 bytes para almacenar tanto el valor correspondiente al primer flanco como para el segundo, obteniendo asi el periodo de la señal analizada en una variable de 16bits (recordemos que el valor obtenido al restar ambos valores el numero de tics transcurridos entre uno y otro evento; y que con algunos calculos mas podemos obtener el "PERIODO" propiamente dicho).

La gran variacion que se hace sobre las frecuencias generadas (50 , 100, 200, 400 y 800 Hz) nos hace notar que en realidad solo necesitamos trabajar con el Byte Mas significativo de la variable que almaceno nuestro periodo. Otra razon por la cual se hizo esto es que si bien es cierto las frecuencias son bastante precisas, el Byte Bajo que almacena nuestro periodo, tiende a oscilar constantemente, sobre todo en los bits menos significativos, lo cual en realidad no es algo critico, pero si vamos a comparar el valor obtenido con valores de una tabla, probablemente nos genere problemas, imagino que este problema se puede solucionar de varias maneras, pero decidi evitarme el problema y trabajar con el Byte Alto solamente.

Bien, de esta manera tenemos la comunicacion basica, en un lado el TX que envia trenes de pulsos que varian de frecuencia segun la entrada activada y del otro un RX con un "frecuencimetro" que activa la salida equivalente al switch activado en el TX y con eso tenemos "UN NUEVO ENFOQUE" para hacer la comunicacion serial, el cual me ha servido muchisimo y con el cual he obtenido mejores resultados que haciendo la comunicacion serial. Solo les queda probarlo y contarnos que tal les fue.

Saludos

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #12 en: 08 de Septiembre de 2007, 02:15:22 »
Les quiero adjuntar una simulcion con PROTEUS del sistema funcionando, pero no he logrado subir el archivo, si alguien puede ayudarme, se los agradeceria.

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #13 en: 08 de Septiembre de 2007, 02:26:19 »

Ademas del software y del algoritmo utilizado, quiero dejarles algunas vivencias mas, quizas les ayude.

Despues de hechas todas las pruebas sobre protoboards, pasamos a la fabricacion de las placas con el hardware necesario, trate de investigar algo mas a cerca de las antenas de los modulos, pero como veia que la cosa iva bien con los alambres cortados a lambda/4, y estamos hablando de 100 a 200m, deje ahi la cosa, las antenas irian montadas directamente sobre el PCB y solucionado el asunto, los modulos irian tambien directamente sobre el PCB y bueno cuando terminamos los PCB todo bien, incluso algo mejor que con los protoboards, la cosa iva sobre ruedas.

El problema vino cuando pusimos ambos PCB's en CASES, pues queriamos darle una mejor presentacion al trabajo, es algo que hasta ahora no logro explicar muy bien, porque cuando montamos las PCB's dentro de los cases, los PIC's simplemente ... se colgaban, incluso se nos malogro uno (cosa que habia pasado antes tambien) era frustrante, era algo que no nos explicabamos, y sin embargo logramos descubrir que el problema venia cuando la antena estaba puesta, porque sin la antena montada, la cosa iva bien, debido a esto fue que dejamos de lado los alambres de lambda/4 y pasamos a utilizar dipolos conectados sobre el PCB con cable coaxial de 50 ohms, ademas de eso, hicimos que la tierra de nuestro PCB, estuviera conectada al chasis del CASE, tanto el modulo RX como el Modulo TX fueron "ENCARCELADOS" en cajitas de aluminio que tambien estaban conectadas a tierra.  De esta manera logramos alcanzar un poco mas de distancia ( 350 a  400m con linea de vista y las antenas bien ubicadas) y proteger tambien los PIC's que tanto habian sido maltratados al ser expuestos a las radiaciones de las antenas.

Ahora, sobre este tema aun tengo muchas dudas,  pero en el tema estrictamente electronico, porque... es obvio que los campos generados por la antena del TX sobre todo, tenian un efecto nocivo sobre el PIC que estaba bastante cerca, y estando dentro de un CASE, tanto asi que logro malograrlo, lo que no me explico es .. que fue lo que le hizo al pic... bueno, quizas ustedes me puedan ayudar a contestar esas preguntas, estoy seguro que si, y con esta serie de experiencias espero haber puesto mi granito de arena y espero los ayude a darle otro enfoque a la utilizacion de los modulos de transmision por RF.

Saludos

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Nuevo Enfoque para transmision de datos usando MODULOS RF
« Respuesta #14 en: 08 de Septiembre de 2007, 02:27:37 »
En la brevedad posible les pondre algunas fotos de como quedaron los cacharros.

Saludos.


 

anything