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.
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 imagen
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?
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í:
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/uX15MO
que 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.
pericintion
sweber
Suraj Bhawal
roger c
Suraj Bhawal
roger c
sweber
Majenko
Suraj Bhawal
MBaz
Suraj Bhawal