Ich möchte Daten von einem Pic18f2550 zu einem anderen übertragen, indem ich ein billiges 434-MHz-Funkmodul verwende. aber es funktioniert überhaupt nicht.
Es folgen die Schaltungen für Tx bzw. Rx.
Der Code für den Tx-Teil ist unten angegeben. geschrieben in 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
}
und der Rx-Code
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
}
Aber dieses Setup sendet/empfängt keine Daten? Ich habe versucht, das Funkmodul durch Drähte zu ersetzen. Dann funktioniert es perfekt ... Vielleicht ist das HF-Modul fehlerhaft ... aber das ist höchst unwahrscheinlich, da ich es mit 10 verschiedenen Paaren von HF-Modulen versucht habe.
Gibt es also ein Problem mit der Schaltung oder wenn das HF-Modul defekt sein soll, kann man trotzdem überprüfen, ob es funktioniert?
AKTUALISIEREN:
Wie gefragt, habe ich das Bild des HF-Moduls beigefügt, das ich verwende ... nein, ich kenne die Teilenummer nicht. aber es sieht aus wie auf dem folgenden Bild
Ich habe auch versucht, den HF-Empfänger an die USB-TTL-Karte anzuschließen, um zu sehen, ob Daten übertragen werden ... aber nein ... es wird nichts übertragen. irgendeine Hilfe?
AKTUALISIEREN :
Zunächst einmal für alle, die diese Module noch nicht kennen. Dies sind drahtlose Kommunikationsmodule, eines ist Sender und das andere ist Empfänger. Diese Module verwenden Hochfrequenz (RF) zum Senden/Empfangen von Daten mit ASK.
Diese werden ursprünglich von (vielleicht) SUMMIT Technology Co., Ltd. hergestellt . Es gibt jedoch viele billige generische Module auf dem (lokalen) Markt, von denen eines von OP verwendet wird.
Der Sender ist als ST-TX01-ASK bekannt und der Empfänger ist als ST-RX04-ASK bekannt .
Das Datenblatt beider Module finden Sie hier:
Nun zum (nicht so) lustigen Teil.
Hahah, ja, Sie haben Recht Encoder/Decoder werden nicht verwendet, um Rauschen zu reduzieren, aber sie werden verwendet, um Daten vor Rauschen zu schützen (neben dem Codieren/Decodieren von Daten und in dieser Anwendung). Ich werde das „Wie“ später erklären. Bluetooth-Module sind auf dem indischen Markt leicht ab INR 300 erhältlich, daher sind sie fast so billig wie HF-Module und viel, viel zuverlässiger als diese gefälschten HF-Module (in Ihrer Anwendung).
Bevor ich weiter rede, möchte ich Sie bitten, Antworten auf diese Frage zu lesen, http://goo.gl/uX15MO
die genau dieselbe Frage ist wie Ihre (wenn Sie verstehen).
Wie Sie wissen, sind dies sehr billige und einfache Module und "sie haben kein ausgeklügeltes On-Board-Protokoll zum Senden / Empfangen von Daten". Nun, was Encoder speziell HT12E hier tut, ist Codierung, die "Manchester-Codierung" ist. Dies hilft nicht nur beim Senden/Empfangen von Daten durch größeres Rauschen, sondern passt auch in den Frequenz-/Bandbreitenbereich dieser Module.
Eine andere beste Lösung wäre also die Verwendung von Encoding/Decoding innerhalb des Mikrocontrollers. Die derzeit beste Kodierung für Sie ist die gleiche, die von diesen Kodierern "Manchester-Kodierung" verwendet wird. Aber selbst nach Verwendung dieser Verschlüsselung mit geeigneter Datenübertragung wird Ihre Anwendung nicht vollständig zuverlässig/redundant. Außerdem gibt es eine großartige Nachricht für Sie, da Sie den MikroC-Compiler verwenden. Die Bibliothek für die Manchester-Codierung ist bereits darin vorhanden, sodass Sie sie nicht von Grund auf neu implementieren müssen. Eine weitere beliebte Bibliothek ist VirtualWire, aber leider ist sie für Arduino, ja, Sie können sie portieren.
Das Problem mit UART ist zunächst, dass es sehr rauschempfindlich ist, da wir Manchester-Codierung auch mit Toleranz implementieren können. Zweitens ist seine Übertragungsrate hoch (9600) und außerhalb der Reichweite dieser HF-Module.
Ich beruhige meinen Fall und hoffe, dass Sie verstehen. Lassen Sie mich wissen, wenn Sie noch etwas wissen müssen/möchten.
Ursprüngliche Antwort:
Ihr Ansatz scheint theoretisch richtig zu sein, aber praktisch ist er nicht sehr zuverlässig. Lassen Sie mich erklären, U(S)ART ist ein sehr rauschempfindliches Protokoll, es funktioniert nicht einmal mit langen Kabeln, daher ist bei der Verwendung viel Sorgfalt geboten. Zweitens ist die HF-Kommunikation selbst sehr anfällig für Rauschen und eine größere Entfernung macht sie am schlimmsten. Aus diesem Grund werden bei dieser Art von HF-Modulen im Allgemeinen Encoder & Decoder verwendet.
Was Sie jetzt tun können, ist zu versuchen, die Baudrate auf den niedrigsten Wert wie 600 oder 1200 zu reduzieren. Fügen Sie Kondensatoren hinzu, wo immer sie benötigt werden, und versuchen Sie, den Code redundanter zu machen.
Auch nach obiger Improvisation glaube ich nicht, dass das System zuverlässig sein wird, daher möchte ich Ihnen raten, Encoder & Decoder mit diesem HF-Modul zu verwenden und die Software auf diese Weise zu implementieren.
Andernfalls können Sie eine bessere drahtlose Kommunikationsmethode wie Bluetooth, Zigbee oder WiFi verwenden. Dieses System wird Ihren Bedürfnissen gut entsprechen.
Pericynthion
schweber
Suraj Bhawal
Roger C.
Suraj Bhawal
Roger C.
schweber
Majenko
Suraj Bhawal
MBaz
Suraj Bhawal