Go Down

Topic: NRF24L01+ probleme (Read 1 time) previous topic - next topic

Entrax

Apr 23, 2017, 03:04 pm Last Edit: Apr 23, 2017, 05:44 pm by Entrax
Hallo
Ich habe Probleme eine Funkstrecke zum laufen zu bekommen.
Ich habe bedingt durch die Schule (Schulprojekt) leider zwei Texas Instrument tm4c123gxl hier.
Ich wollte mal mein glück versuchen (ja ich weis es ist arduino hier) ob jemand mir helfen kann den Fehler einzugrenzen.
Im Notfall kann ich auch auf Arduino wechseln meinte unser Lehrer.

Pins 1. Tm4c123gxl (RX): PC_6 (CE),  PD_2 (MISO),  PD_3 (MOSI),  PD_1 (CS),  PD_0 (SCK),  PE_1 (IRQ)

Pins 2. Tm4c123gxl (TX): PC_7 (CE),  PD_2 (MISO),  PD_3 (MOSI),  PD_1 (CS),  PD_0 (SCK),  PE_1 (IRQ)

Habe diverse Bibliotheken ausprobiert: Enrf24_v1_8 und RF24 von github.
Bei der letztern habe ich mit gettingStarted etwas auf den Serial.monitor angezeigt bekommen.

Beim Sender steht im Monitor: RF24/examples/GettingStarted *** PRESS 'T' to begin transmitting to the other node    Drück ich T passiert nix.

Beim Empfänger steht im Monitor: RF24/examples/GettingStarted *** PRESS 'T' to begin transmitting to the other node
jedoch fängt er sofort an irgend was zu empfangen z.b Sent response 4294901760 usw.

Schließe ich aber nur den Empfänger an zeigt er mir das trotzdem an.
Habe auch schon Sender und Empfänger getauscht, also Hardware mäßig vom Bauteil A in Bauteil B und umgekehrt.

PS: Ich habe auch versucht für Texas was zu finden so gut wie unmöglich :(

SkobyMobil

Hallo,
hier sitzen die Jung´s die Du brauchst.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Entrax


SkobyMobil

#3
Apr 23, 2017, 03:24 pm Last Edit: Apr 23, 2017, 03:25 pm by SkobyMobil
Hallo,
"Im Notfall kann ich auch auf Arduino wechseln meinte unser Lehrer."

Wenn Du da nicht weiter kommst, dann zum Lehrer- dann wieder hier her.
Dann Deinen Sketch in CodeTags (Editor </>) einfügen. Kein Sketch, keine Hilfe.
Glaskugeln sind noch in den OsterFerien.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Entrax

Der Lehrer hat keine Ahnung, wir sollen einfach ein Projekt machen und uns selber alles beibringen so zusagen.

Code: [Select]

/*
* Getting Started example sketch for nRF24L01+ radios
* This is a very basic example of how to send data from one node to another
* Updated: Dec 2014 by TMRh20
*/

#include <SPI.h>
#include "RF24.h"

/****************** User Config ***************************/
/***      Set this radio as radio number 0 or 1         ***/
bool radioNumber = 0;

/* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 */
RF24 radio(PC_6,PD_1);
/**********************************************************/

byte addresses[][6] = {"1Node","2Node"};

// Used to control whether this node is sending or receiving
bool role = 0;

void setup() {
  Serial.begin(115200);
  Serial.println(F("RF24/examples/GettingStarted"));
  Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
  
  radio.begin();

  // Set the PA Level low to prevent power supply related issues since this is a
 // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
  radio.setPALevel(RF24_PA_LOW);
  
  // Open a writing and reading pipe on each radio, with opposite addresses
  if(radioNumber){
    radio.openWritingPipe(addresses[1]);
    radio.openReadingPipe(1,addresses[0]);
  }else{
    radio.openWritingPipe(addresses[0]);
    radio.openReadingPipe(1,addresses[1]);
  }
  
  // Start the radio listening for data
  radio.startListening();
}

void loop() {
  
  
/****************** Ping Out Role ***************************/  
if (role == 1)  {
    
    radio.stopListening();                                    // First, stop listening so we can talk.
    
    
    Serial.println(F("Now sending"));

    unsigned long time = micros();                             // Take the time, and send it.  This will block until complete
     if (!radio.write( &time, sizeof(unsigned long) )){
       Serial.println(F("failed"));
     }
        
    radio.startListening();                                    // Now, continue listening
    
    unsigned long started_waiting_at = micros();               // Set up a timeout period, get the current microseconds
    boolean timeout = false;                                   // Set up a variable to indicate if a response was received or not
    
    while ( ! radio.available() ){                             // While nothing is received
      if (micros() - started_waiting_at > 200000 ){            // If waited longer than 200ms, indicate timeout and exit while loop
          timeout = true;
          break;
      }      
    }
        
    if ( timeout ){                                             // Describe the results
        Serial.println(F("Failed, response timed out."));
    }else{
        unsigned long got_time;                                 // Grab the response, compare, and send to debugging spew
        radio.read( &got_time, sizeof(unsigned long) );
        unsigned long time = micros();
        
        // Spew it
        Serial.print(F("Sent "));
        Serial.print(time);
        Serial.print(F(", Got response "));
        Serial.print(got_time);
        Serial.print(F(", Round-trip delay "));
        Serial.print(time-got_time);
        Serial.println(F(" microseconds"));
    }

    // Try again 1s later
    delay(1000);
  }



/****************** Pong Back Role ***************************/

  if ( role == 0 )
  {
    unsigned long got_time;
    
    if( radio.available()){
                                                                    // Variable for the received timestamp
      while (radio.available()) {                                   // While there is data ready
        radio.read( &got_time, sizeof(unsigned long) );             // Get the payload
      }
    
      radio.stopListening();                                        // First, stop listening so we can talk  
      radio.write( &got_time, sizeof(unsigned long) );              // Send the final one back.      
      radio.startListening();                                       // Now, resume listening so we catch the next packets.    
      Serial.print(F("Sent response "));
      Serial.println(got_time);  
   }
 }




/****************** Change Roles via Serial Commands ***************************/

  if ( Serial.available() )
  {
    char c = toupper(Serial.read());
    if ( c == 'T' && role == 0 ){      
      Serial.println(F("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK"));
      role = 1;                  // Become the primary transmitter (ping out)
    
   }else
    if ( c == 'R' && role == 1 ){
      Serial.println(F("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK"));      
       role = 0;                // Become the primary receiver (pong back)
       radio.startListening();
      
    }
  }


} // Loop



Die werden angepasst, je nach dem auf welches Board ich spiele.

Sender:
bool radioNumber = 1;
RF24 radio(PC_7,PD_1);
bool role = 1;

Empfänger:
bool radioNumber = 0;
RF24 radio(PC_6,PD_1);
bool role = 0;


und dann wird mir das angezeigt, was ich als erstes geschrieben hatte. Hoffe es hilft mehr :)

SkobyMobil

die zweite Maus bekommt den Speck...

Entrax

ja, bis auf die kondensatoren alles.
Kondensatoren sind bestellt.
Das problem ist beim Sender steht:

RF24/examples/GettingStarted
*** PRESS 'T' to begin transmitting to the other node

Ich kann jedoch so viel T drücken wie ich will, es passiert nicht.

Beim Empfänger:

RF24/examples/GettingStarted
*** PRESS 'T' to begin transmitting to the other node

Es steht auch da aber er fängt sofort sowas anzuzeigen ohne das ich T oder R gedrückt habe: Sent response 523511232

Ich habe viele Anleitungen / Tutorials mir angeguckt bzw gesehen und dann jedes mal nach gemacht (z.b RF24). Leider waren alle für Arduino nicht direkt für Texas. Deswegen versuche ich mein glück.

Was ich noch mal testen werde, mit Kondensatoren, bloß die kommen die Tage erst. Es könnte ja sein das es auch an was anderen liegt noch.



Whandall

Ich kann jedoch so viel T drücken wie ich will, es passiert nicht.
Du hast auch auf Senden gedrückt, bzw Enter/Return eingegeben?

Beim Empfänger:

RF24/examples/GettingStarted
*** PRESS 'T' to begin transmitting to the other node

Es steht auch da aber er fängt sofort sowas anzuzeigen ohne das ich T oder R gedrückt habe: Sent response 523511232
Das sieht mir nach einem Kommunikationsproblem auf SPI aus. Ist die Verdrahtung in Ordnung?
Passt sie zum Sketch?

Warum hast du die Module eigentlich unterschiedlich verdrahtet?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

SkobyMobil

Hallo,
wenn es Funk ist, dann braucht es eine "richtige" Antenne. Ist die vorhanden?
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Entrax

Du hast auch auf Senden gedrückt, bzw Enter/Return eingegeben?

Das sieht mir nach einem Kommunikationsproblem auf SPI aus. Ist die Verdrahtung in Ordnung?
Passt sie zum Sketch?

Warum hast du die Module eigentlich unterschiedlich verdrahtet?
1. Ja habe ich.
2. Verdrahtung mehrfach kontrolliert also in Ordnung. SPI kommunikationsproblem habe ich mir auch schon
    gedacht bzw raus gelesen. Ich habe auch gelesen man soll Kondensatoren zwischen VCC und GND
    schalten(ist auch bestellt), hilft es gegen das SPI Problem? =/
3. Sketch dem entsprechen angepasst also RF24 radio(PC_7,PD_1); //CE, CS immer angepasst.
4. Weil (davon bin ich ausgegangen) ich nach der Pin Map von Texas verdrahtetet habe und dort stehen RX
    und TX mit Pins dahinter und deswegen ist es unterschiedlich vom 1. und 2. Mikrocontroller.

Hallo,
wenn es Funk ist, dann braucht es eine "richtige" Antenne. Ist die vorhanden?
Gruß und Spaß
Andreas
1. Also eine richtige Antenne (externe) ist nicht dabei nur die beiden Module, da ich auch (bis jetzt) keine
   größen Distanzen überbrücken muss bzw will. nur sehr kurze. In diversen Anleitungen sind auch keine
   extra Antennen mit vorgeführt.

Whandall

wenn es Funk ist, dann braucht es eine "richtige" Antenne.
Bitte definiere richtig.

Ansonsten ist das eher eine amerikanische Sicht, die hatten immer die schönen
ausziehbaren Antennen an drahtlosen Festnetztelefonen, lange nachdem das noch nötig war.

Auch Handys für den amerikanischen Markt hatten oft einen Antennenstummel.

4. Weil (davon bin ich ausgegangen) ich nach der Pin Map von Texas verdrahtetet habe und dort stehen RX
    und TX mit Pins dahinter und deswegen ist es unterschiedlich vom 1. und 2. Mikrocontroller.
Wohl nur wenn man die Pins als serielle Schnittstelle nutzt, als Steuersignal sollte das egal sein.

Kannst du mit einem Logicanalyzer den SPI Bus ansehen?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Whandall

Beide gleich zu verdrahten hätten den Vorteil, dass du nur einen Sketch hast,
keine Chance einen falschen zu brennen.

Beide Knoten (anfangs sind es beide Receiver) zeigen unterschiedliches Verhalten.

Der Transmitter scheint sich wegzuhängen (keine Ausgabe bei 'T'),
der Receiver liest anscheinend Schrott.

Was macht der Receiver wenn du ein 'T' eingibst?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Entrax

Beide gleich zu verdrahten hätten den Vorteil, dass du nur einen Sketch hast,
keine Chance einen falschen zu brennen.

Beide Knoten (anfangs sind es beide Receiver) zeigen unterschiedliches Verhalten.

Der Transmitter scheint sich wegzuhängen (keine Ausgabe bei 'T'),
der Receiver liest anscheinend Schrott.

Was macht der Receiver wenn du ein 'T' eingibst?
Ok, dass wusste ich nicht, dann kann ich sie selbst verständlich gleich verdrahten denn CE.
Ich habe beim (Empfänger) T eingeben:

*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
Now sending
failed
Sent 5293566, Got response 0, Round-trip delay 5293566 microseconds
Now sending
failed
Sent 6305612, Got response 0, Round-trip delay 6305612 microseconds
Now sending
failed
Sent 7317679, Got response 0, Round-trip delay 7317679 microseconds
Now sending
failed

das kam dabei raus.

Habe im dann auch noch mal meinen  eigentlich Sender getestet und dort konnte ich nichts mit R oder T machen. Natürlich eingeben und bestätigt.

Logicanalyzer: Sowas habe ich leider nicht zu hause, ich bin relativ neu auf den gebiet. :)

SkobyMobil

Hallo,
mit "richtiger" Antenne meinte ich eine Antenne die seinem Betriebsband
entspricht. z.B. Antenne

Oder wenigstens einen Kupferdraht mit der richtigen Länge.
Auf der Platine befindet sich zwar eine "Antenne", dieser würde ich aber nicht
vertrauen. Bei "Funk" muß alles stimmen- sonst gibt es nur Probleme damit.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Whandall

Hast du schon mal SPI Devices erfolgreich mit dem Chip betrieben?

Im Arduino Umfeld kannst du mit printDetails() die meisten Register ausgeben
und damit die SPI Kommunikation testen.

Bisher hast du nicht einmal erwähnt welche IDE du benutzt oder welche SPI Library...
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Go Up