¿Comunicación Pic to Pic con módulo inalámbrico de 434 mhz?

Quiero transmitir datos de un Pic18f2550 a otro usando un módulo inalámbrico barato de 434 mhz. pero no funciona en absoluto.

Los siguientes son los circuitos para Tx y Rx respectivamente.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

el código para la parte Tx se proporciona a continuación. escrito en MikroC v8.2

void tx_data(char);

#define FREQ 20000000
#define baud 9600
#define spbrg_value (((FREQ/64)/baud)-1)    // Refer to the formula for Baud rate calculation in Description tab


void main()
{
    SPBRG=spbrg_value;      // Fill the SPBRG register to set the Baud Rate
    RCSTA.SPEN=1;           // To activate Serial port (TX and RX pins)
    TXSTA.TXEN=1;           // To enable transmission
    RCSTA.CREN=1;           // To enable continuous reception
    TRISA=0;
    TRISB=255;

    while(1)
    {
        tx_data(PORTB);
        delay_ms(100);
        LATA.LATA4=1;
        delay_ms(100);
        LATA.LATA4=0;
    }
}


void tx_data(char data1)
{
    TXREG=data1;                                     // Store data in Transmit register
    while(PIR1.TXIF==0);                             // Wait until TXIF gets low
}

y el código Rx

unsigned char rx_data(void);

#define FREQ 20000000
#define baud 9600
#define spbrg_value (((FREQ/64)/baud)-1)    


void main()
{
    unsigned int state;
    SPBRG=spbrg_value;      // Fill the SPBRG register to set the Baud Rate
    RCSTA.SPEN=1;           // To activate Serial port (TX and RX pins)
    TXSTA.TXEN=1;           // To enable transmission
    RCSTA.CREN=1;           // To enable continuous reception
    TRISB=0;

    while(1)
    {
       state=rx_data();
       PORTB=state;
    } //main loop while(1)!!
} //end main()


unsigned char rx_data(void)
{
    while(PIR1.RCIF==0);                           // Wait until RCIF gets low
    return RCREG;                                 // Retrieve data from reception register
}

¿Pero esta configuración no transmitirá/recibirá datos? Lo intenté reemplazando el módulo inalámbrico con cables... entonces funciona perfectamente... tal vez el módulo de RF esté defectuoso... pero eso es muy improbable porque lo he intentado con 10 pares diferentes de módulos de RF.

Entonces, ¿hay algún problema con el circuito o si se supone que el módulo de RF está defectuoso, hay alguna forma de verificar que funcione?

ACTUALIZAR:

como se me preguntó, he adjuntado la imagen del módulo de RF que estoy usando... no, no sé el número de pieza. pero se parece a la siguiente imageningrese la descripción de la imagen aquí

También intenté conectar el receptor de RF en la placa USB-TTL para ver si se transmiten datos... pero no... no se transmite nada. ¿alguna ayuda?

Los módulos RF tx/rx no son reemplazos mágicos de los cables. Son sistemas complejos. Hacer que funcionen, incluso los baratos, especialmente los baratos, es una tarea complicada. Ni siquiera nos ha dado un número de pieza para el módulo RF.
Mi primer intento sería no usar RX/TX, sino solo entrada/salida digital. Alterne la salida lentamente y verifique si recibe algo. Puede ser que la señal recibida esté distorsionada y el PIC no la reconozca. Pero para verificar esto, necesita un alcance. Por cierto: ¿límite máximo en Vusb, pero no en Vdd en PIC/7805/inalámbrico? Esto puede funcionar, ¡pero realmente no es recomendable!
@pericynthion He actualizado la pregunta, por favor, eche un vistazo.
Es posible que tenga un problema con el transmisor, con el receptor o con ambos. Así que debes dividir el problema. Primero intentaría ver si el transmisor realmente está transmitiendo utilizando un analizador de espectro, un detector de intensidad de campo de RF o incluso un contador de frecuencia.
@RogerC. Lo siento, no tengo esos equipos sofisticados para probar... todo lo que puedo hacer es probar con otro módulo (que hice con 10 módulos diferentes sin ningún éxito). ¿Puede haber algún problema con la parte del software? Estoy usando una tasa de baudios de 9600 bps para transmitir datos. ¿Tiene alguna información si ese transmisor Rf puede transmitir a esa tasa de baudios?
Sin hoja de datos no se puede decir con certeza. Muy a menudo, UART en módulos inalámbricos funciona a 9600 bps o a 19200 bps. ¡Pero quién sabe! ¿Puede agregar en su pregunta el nombre que está escrito en el PCB para cada pin?
No estoy seguro de que estos dispositivos tengan alguna lógica en su interior. Los transmisores muy baratos no son más que un "cable inalámbrico", es decir, el nivel lógico en la entrada TX sale de la salida RX. El resto tiene que ser implementado por la electrónica circundante, por ejemplo, el PIC. Otra pregunta: ¿Dónde está la antena? Suelen ser bobinas como en esta imagen: homecontrol4.me/de/images/sendeempf.png
Noto una falta definitiva de condensadores en esos esquemas. ¿Dónde están los condensadores para el 7805 que se requieren ? ¿Dónde están los capacitores de desacoplamiento para la potencia del PIC que se requieren ? Los módulos de RF son una potencia WRT increíblemente ruidosa: me da miedo pensar qué está sucediendo dentro de sus chips PIC sin ningún desacoplamiento o tapas reguladoras...
Los condensadores de @Majenko no se muestran en el diagrama del circuito, pero he usado correctamente los condensadores en 7805 y donde sea necesario... Pero, incluso si no hay límites y dice que genera ruido, el receptor aún debería recibir algunos datos basura... pero el problema es que no se transmite nada..
Solo una nota rápida para señalar que 434 MHz no es una banda sin licencia en muchas partes del mundo. Es más seguro usar la banda de 900 MHz, que no tiene licencia en la mayoría, si no en todo, el mundo.
@MBaz En mi país (India), 434 mhz no tiene licencia ... e incluso si no fuera del gobierno. no tengo tiempo de la corrupción para interferir en estas cosas (¡bromea! no te lo tomes en serio).

Respuestas (1)

ACTUALIZAR :

En primer lugar para todos los que no conocen estos módulos. Estos son módulos de comunicación inalámbrica, uno es Transmisor y otro es Receptor. Estos módulos usan radiofrecuencia (RF) para transmitir/recibir datos usando ASK.

Estos fueron fabricados originalmente por (tal vez) SUMMIT Technology Co., Ltd. . Sin embargo, hay muchos módulos genéricos baratos presentes en el mercado (local), uno de los cuales es utilizado por OP.

El transmisor se conoce como ST-TX01-ASK y el receptor se conoce como ST-RX04-ASK .

La hoja de datos de ambos módulos se puede encontrar aquí:

Módulo transmisor ST-TX01-ASK

Módulo receptor ST-RX04-ASK

Ahora sobre la parte (no tan) divertida.

Hahah, sí, tiene razón. Los codificadores/decodificadores no se usan para reducir el ruido, pero se usan para proteger los datos del ruido (además de codificar/decodificar datos y en esta aplicación). Explicaré "Cómo" más adelante. Los módulos Bluetooth están fácilmente disponibles desde INR 300 o más en el mercado indio, por lo que son casi tan baratos como los módulos de RF y mucho más confiables que estos módulos de RF de imitación (en su aplicación).

Antes de hablar más, me gustaría que leyera las respuestas a esta pregunta, http://goo.gl/uX15MOque es exactamente la misma pregunta que la suya (si lo entiende).

Como saben, estos son módulos muy baratos y básicos y "no tienen un protocolo integrado sofisticado para transmitir/recibir datos". Ahora, lo que Encoder específicamente HT12E hace aquí es codificar, que es "codificación de Manchester". Esto no solo ayuda a enviar/recibir datos a través de un mayor ruido, sino que también encaja en el rango de frecuencia/ancho de banda de estos módulos.

Entonces, otra mejor solución sería usar Codificación/Descodificación dentro del microcontrolador. La mejor codificación en este momento para usted es la misma que utilizan estos codificadores "Codificación de Manchester". Pero incluso después de usar esta codificación con una transmisión de datos adecuada, no hace que su aplicación sea completamente confiable/redundante. También hay una gran noticia para usted, ya que usa el compilador MikroC, la biblioteca para la codificación de Manchester ya está presente en él, por lo que no necesita implementarlo desde cero. Otra biblioteca popular es VirtualWire, pero desafortunadamente es para arduino, sí, puede transferirla.

El problema con UART al principio es que es muy sensible al ruido, donde también podemos implementar la codificación Manchester con tolerancia. En segundo lugar, su velocidad de transmisión es alta (9600) y está fuera del alcance de estos módulos de RF.

Descanso mi caso y espero que lo entiendas. Avísame si todavía necesitas/quieres saber algo.

Respuesta original:

Su enfoque parece correcto en teoría, pero en la práctica no es muy confiable. Permítanme explicar, U(S)ART es un protocolo muy sensible al ruido, incluso no funcionará con cables largos, por lo que se debe tener mucho cuidado al usarlo. En segundo lugar, la comunicación RF en sí misma es muy propensa al ruido y una mayor distancia lo empeora. Es por eso que los codificadores y decodificadores se utilizan en general con este tipo de módulo de RF.

Lo que puede hacer ahora es tratar de reducir la velocidad en baudios al mínimo, como 600 o 1200. Agregue un condensador donde sea necesario e intente hacer que el código sea más redundante.

Incluso después de la improvisación anterior, no creo que el sistema sea confiable, por lo que me gustaría recomendarle que use Encoder & Decoder con este módulo de RF e implemente el software de esta manera.

De lo contrario, puede usar un mejor método de comunicación inalámbrica como Bluetooth, Zigbee o WiFi. Este sistema se adaptará bien a sus necesidades.

El codificador / decodificador no se usa para reducir el ruido... pero se usa para enviar datos de 4 bits junto con la dirección de 8 bits... Ese comportamiento se puede lograr fácilmente usando un microcontrolador pic... También bluetooth zigbee, etc. será más confiable... Lo sé.. Pero no es muy barato, ¿verdad?