Bild-zu-Bild-Kommunikation mit 434-MHz-Funkmodul?

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.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

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 BildGeben Sie hier die Bildbeschreibung ein

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?

HF-Sende-/Empfangsmodule sind kein magischer Ersatz für Kabel. Sie sind komplexe Systeme. Sie zum Laufen zu bringen – sogar die billigen, besonders die billigen – ist ein kompliziertes Unterfangen. Sie haben uns nicht einmal eine Teilenummer für das HF-Modul gegeben.
Mein erster Versuch wäre, RX/TX nicht zu verwenden, sondern nur Digital In/Out. Schalten Sie die Ausgabe langsam um und prüfen Sie, ob Sie etwas erhalten. Möglicherweise ist das empfangene Signal verzerrt und der PIC erkennt es nicht. Um dies zu überprüfen, benötigen Sie jedoch ein Oszilloskop. BTW: Bulk Cap bei Vusb, aber nicht bei Vdd bei PIC/7805/wireless? Das kann funktionieren, ist aber wirklich nicht zu empfehlen!
@pericynthion Ich habe die Frage aktualisiert, bitte schau sie dir an.
Möglicherweise liegt ein Problem mit dem Sender, dem Empfänger oder mit beiden vor. Sie müssen das Problem also aufteilen. Ich würde zuerst versuchen, mit einem Spektrumanalysator oder einem HF-Feldstärkedetektor oder sogar einem Frequenzzähler zu sehen, ob der Sender wirklich sendet.
@RogerC. Tut mir leid, ich habe diese schicken Geräte nicht zum Testen. Ich kann es nur mit einem anderen Modul versuchen (was ich mit 10 verschiedenen Modulen ohne Erfolg gemacht habe). Kann es ein Problem mit dem Softwareteil geben? Ich verwende eine Baudrate von 9600 bps, um Daten zu übertragen. Haben Sie Informationen, ob dieser Rf-Sender mit dieser Baudrate senden kann?
Ohne Datenblatt kann man das nicht sicher sagen. Sehr oft arbeitet UART in drahtlosen Modulen entweder mit 9600 bps oder mit 19200 bps. Aber wer weiß! Können Sie Ihrer Frage den Namen hinzufügen, der für jeden Pin auf der Platine steht?
Ich bin mir nicht sicher, ob diese Geräte irgendeine Logik im Inneren haben. Die ganz billigen Sender sind wirklich nicht mehr als ein "Funkdraht", dh der Logikpegel am TX-Eingang kommt aus dem RX-Ausgang. Den Rest muss die umgebende Elektronik, zB der PIC, umsetzen. Andere Frage: Wo ist die Antenne? Das sind normalerweise Spulen wie auf diesem Bild: homecontrol4.me/de/images/sendeempf.png
Ich bemerke einen definitiven Mangel an Kondensatoren in diesen Schaltplänen. Wo sind die Kondensatoren für den 7805, die benötigt werden ? Wo sind die Entkopplungskondensatoren für die PIC-Leistung, die benötigt werden ? HF-Module sind unglaublich rauschende WRT-Leistung - ich fürchte, mir vorzustellen, was in Ihren PIC-Chips ohne Entkopplung oder Reglerkappen passiert ...
@Majenko-Kondensatoren werden im Schaltplan nicht angezeigt, aber ich habe Kondensatoren auf 7805 und wo immer erforderlich richtig verwendet ... Aber selbst wenn es keine Kappen gibt und sagen, dass es Rauschen erzeugt, sollte der Empfänger immer noch einige Junk-Daten erhalten ... aber Das Problem ist, dass nichts übertragen wird.
Nur eine kurze Anmerkung, um darauf hinzuweisen, dass 434 MHz in vielen Teilen der Welt kein unlizenziertes Band ist. Es ist sicherer, das 900-MHz-Band zu verwenden, das in den meisten, wenn nicht allen Teilen der Welt nicht lizenziert ist.
@MBaz In meinem Land (Indien) sind 434 MHz nicht lizenziert ... und selbst wenn es keine Regierung war. keine Zeit wegen Korruption, sich in diese Dinge einzumischen (Scherz! nicht ernst nehmen).

Antworten (1)

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:

Sendemodul ST-TX01-ASK

Empfängermodul ST-RX04-ASK

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/uX15MOdie 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.

Encoder / Decoder werden nicht verwendet, um Rauschen zu reduzieren ... Aber sie werden verwendet, um 4-Bit-Daten zusammen mit der 8-Bit-Adresse zu senden. Dieses Verhalten kann leicht durch Verwendung eines Pic-Mikrocontrollers erreicht werden ... Auch Bluetooth Zigbee usw. wird zuverlässiger sein ... Ich weiß das.. Aber es ist nicht sehr billig, oder?