Pages: [1]   Go Down
Author Topic: [GELÖST] RFM12b wie kann ich ACK ausschalten (brauche Halbduplex)  (Read 777 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

für meine zwei Arduinos habe ich zwei RFM12B Module gekauft.
Ich habe die Module ans laufen gebracht und die Arduinos Kommunizieren miteinander, leider nicht ganz wie ich es will.

Ich kriege das nicht hin, dass beide Arduinos als Transmitter UND Receiver funktionieren (Halbduplex).
Ein Arduino funktioniert als Transmitter und das andere als Receiver - nur so funktioniert das bei mir.

Ich habe gelesen, dass ich lediglich ACK ausschalten muss um das Halbduplex-Modus ans laufen zu bringen.
Leider weiß ich nicht wie ich das machen soll! Ich benutze die JeeLib Bibliothek.

Danke für Eure Hilfe!
« Last Edit: March 14, 2013, 03:38:41 am by windman » Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sollte eigentlich kein Problem sein, in der JeeLib Bibliothek sind einige Beispiele dabei wo Senden und Empfangen zwischen zwei Arduino in beide Richtungen funktioniert.
Eigentlich ist dabei auch gar nichts besonderes zu beachten. Was macht den Dein Testprogramm. Wird eventuell permanent gesendet?
Du must eines bedenken: Halbduplex in dem Sinne gibt es nicht. Jedes Modul kann Senden und Empfangen, aber nicht gleichzeitig. Wenn also eine Seite permanent sendet, hat die andere Seite keine Chance.
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du must eines bedenken: Halbduplex in dem Sinne gibt es nicht. Jedes Modul kann Senden und Empfangen, aber nicht gleichzeitig. Wenn also eine Seite permanent sendet, hat die andere Seite keine Chance.
Und genau deswegen habe ich Halbduplex und nicht Vollduplex/Fullduplex geschrieben.
Ich habe schon die Empfang-Sende Beispiele getestet... leider immer das gleiche... alle drei Sekunden ein Arduino (das erste) sendet Testdaten, das andere (zweite) empfängt die Daten ohne Probleme.
Leider wenn das andere (zweite) versendet Daten, das erste Arduino empfängt nichts.
Ich habe auch dieses Skript ausprobiert: http://jeelabs.org/2011/05/07/rf12-skeleton-sketch/
« Last Edit: March 12, 2013, 06:35:20 am by windman » Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek-blue Uuups, da hatte ich wohl grad einen geistigen Hänger. Klar, mit Halfduplex meintest Du ja schon das Richtige.
Jetzt auf die Schnelle hätte ich auch keine Lösung parat. Wenn sich bis dahin noch nichts ergeben hat, kann ichs heute Abend ja mal mit meinen Modulen testen.
« Last Edit: March 12, 2013, 08:10:19 am by MaFu » Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn sich bis dahin noch nichts ergeben hat, kann ichs heute Abend ja mal mit meinen Modulten testen.
Na da wäre ja prima, danke!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn sich bis dahin noch nichts ergeben hat, kann ichs heute Abend ja mal mit meinen Modulen testen.
@MaFu: ich wollte nur fragen ob du das schon ausprobiert hast ... ?
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, habe ich.

Ich hab mir ein kleines Testprogramm geschrieben und auf zwei Arduinos geladen. Diese haben sich dann immer gegenseitig ein Byte zugesendet. Wichtig bei dem Beispielprogramm ist, dass für den einen Arduino die Konstante FIRST (siehe Anfang des Codes) gesetzt ist, bei dem anderen Arduino muss sie auskommentiert werden. Der Arduino mit der FIRST Konstante startet im Sendemodus, der Andere im Empfangsmodus. Da im Beispiel erst nach einem Datenempfang in den Sendemodus umgeschaltet wird, muss zwingend der sendende Arduino als letzter gestartet werden.
Ist jetzt nur ein schnell zusammengeschustertes Beispiel. Aber man sieht, dass es geht, und kann darauf aufbauen.
Code:
#include <JeeLib.h>

#define FIRST

byte outData;
bool sendMode;

void setup()
{
    Serial.begin(38400);
    Serial.println("Start");

    outData = 0;

#ifdef FIRST
    rf12_initialize('T', RF12_433MHZ);
    sendMode = true;
#else
    rf12_initialize('R', RF12_433MHZ);
    sendMode = false;
#endif
}

void loop()
{
    if (sendMode)
    {
        delay(100);

        rf12_recvDone();

        ++outData;

        if (rf12_canSend())
        {
            Serial.print("Sende ");
            Serial.println(outData);

#ifdef FIRST
            rf12_sendStart('R', &outData, sizeof outData);
#else
            rf12_sendStart('T', &outData, sizeof outData);
#endif
            rf12_sendWait(0);
        }
        else
            Serial.println("Kann nicht senden!");

        sendMode = false;
    }
    else
    {
        if (rf12_recvDone() && rf12_crc == 0 && rf12_len == 1)
        {
            Serial.print("Empfangen: ");
            Serial.println(rf12_data[0]);

            sendMode = true;
        }
    }
}
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, habe ich.

Ich hab mir ein kleines Testprogramm geschrieben ...
Danke für Deine Hilfe, ich werde das heute Abend ausprobieren...
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Problem wurde gelöst.
Ich habe meine Module mit einem Arduino-UNO und einem Arduino-Ethernet getestet.
Bei dem zweiten gibt es Probleme mit SPI... die RFM12-Lib muss entsprechend angepasst werden, mehr Info:
http://thebillplease.net/play/fixing-arduino-ethernet-rfm12-communication/

Danke für Eure Hilfe!
Logged

Pages: [1]   Go Up
Jump to: