Go Down

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

Whandall

Auf der Platine befindet sich zwar eine "Antenne", dieser würde ich aber nicht
vertrauen.
Die entspricht in der Regel 100%ig den "PCB layout examples" von Nordic.
Wenn du dem nicht vertrauen kannst, dann auch dem ganzen Chip nicht.

Es gibt auch Module mit Keramikantenne und/oder Anschluss für eine externe "richtige" Antenne.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Entrax

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...
Nein, leider noch nicht. Das ist das erste mal. Das einzigste was ich habe war ein i2c lcd display.

printDetails() noch nicht getestet, mache ich noch gleich/nachher.

IDE? Hardware bedingt nehme ich Energia. Wenn du das meints.
SPI Library ist in der Energie software enthalten.
Daher gehe ich von aus dass es die richtige ist.

Whandall

Ist bei Energia ein Beispiel für eine SPI Benutzung (RFID, SD, Ethernet, TFT, ...) dabei?

Vielleicht braucht man ein paar Zaubersprüche oder eine besondere Initialisierung?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Entrax

#18
Apr 24, 2017, 12:20 pm Last Edit: Apr 24, 2017, 12:36 pm by Entrax
Code: [Select]
/*
  Digital Pot Control
 
  This example controls an Analog Devices AD5206 digital potentiometer.
  The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
  A - connect this to voltage
  W - this is the pot's wiper, which changes when you set it
  B - connect this to ground.
 
 The AD5206 is SPI-compatible,and to command it, you send two bytes,
 one with the channel number (0 - 5) and one with the resistance value for the
 channel (0 - 255). 
 
 The circuit:
  * All A pins  of AD5206 connected to +5V
  * All B pins of AD5206 connected to ground
  * An LED and a 220-ohm resisor in series connected from each W pin to ground
  * CS - to digital pin 8  (SS pin) P2.0
  * SDI - to digital pin 14/15 (MOSI pin USI/USCI) P1.6/P1.7
  * CLK - to digital pin 7 (SCK pin) P1.5
 
 created 10 Aug 2010
 by Tom Igoe
 
 modified 2 May 2012 - changed SS pin
 by Rick Kimball
 
 Thanks to Heather Dewey-Hagborg for the original tutorial, 2005
 
*/


// include the SPI library:
#include <SPI.h>

// set pin 8 as the slave select for the digital pot:
const int slaveSelectPin = PB_5;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode (slaveSelectPin, OUTPUT);
  // initialize SPI:
  SPI.begin();
}

void loop() {
  // go through the six channels of the digital pot:
  for (int channel = 0; channel < 6; channel++) {
    // change the resistance on this channel from min to max:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, level);
      delay(10);
    }
    // wait a second at the top:
    delay(100);
    // change the resistance on this channel from max to min:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, 255 - level);
      delay(10);
    }
  }

}

int digitalPotWrite(int address, int value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin,LOW);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin,HIGH);
}


Das ist der denn Energia drin hat.
Ich habe im anderen auch direkt SPI.begin(); eingefügt hat trotzdem nichts gebracht :/

PS. Ich habe auch eine andere Libirary gefunden wo bezug auf Texas und Energia genommen wurde:

Enrf24_TXdemo
Code: [Select]
/*
#include <Enrf24.h>
#include <nRF24L01.h>
#include <string.h>
#include <SPI.h>

Enrf24 radio(P2_0, P2_1, P2_2);  // P2.0=CE, P2.1=CSN, P2.2=IRQ
const uint8_t txaddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x01 };

const char *str_on = "ON";
const char *str_off = "OFF";

void dump_radio_status_to_serialport(uint8_t);

void setup() {
  Serial.begin(9600);

  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);

  radio.begin();  // Defaults 1Mbps, channel 0, max TX power
  dump_radio_status_to_serialport(radio.radioState());

  radio.setTXaddress((void*)txaddr);
}

void loop() {
  Serial.print("Sending packet: ");
  Serial.println(str_on);
  radio.print(str_on);
  radio.flush();  // Force transmit (don't wait for any more data)
  dump_radio_status_to_serialport(radio.radioState());  // Should report IDLE
  delay(1000);

  Serial.print("Sending packet: ");
  Serial.println(str_off);
  radio.print(str_off);
  radio.flush();  //
  dump_radio_status_to_serialport(radio.radioState());  // Should report IDLE
  delay(1000);
}

void dump_radio_status_to_serialport(uint8_t status)
{
  Serial.print("Enrf24 radio transceiver status: ");
  switch (status) {
    case ENRF24_STATE_NOTPRESENT:
      Serial.println("NO TRANSCEIVER PRESENT");
      break;

    case ENRF24_STATE_DEEPSLEEP:
      Serial.println("DEEP SLEEP <1uA power consumption");
      break;

    case ENRF24_STATE_IDLE:
      Serial.println("IDLE module powered up w/ oscillators running");
      break;

    case ENRF24_STATE_PTX:
      Serial.println("Actively Transmitting");
      break;

    case ENRF24_STATE_PRX:
      Serial.println("Receive Mode");
      break;

    default:
      Serial.println("UNKNOWN STATUS CODE");
  }
}


Enrf24_RXdemo
Code: [Select]
/*
#include <Enrf24.h>
#include <nRF24L01.h>
#include <string.h>
#include <SPI.h>

Enrf24 radio(P2_0, P2_1, P2_2);
const uint8_t rxaddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x01 };

const char *str_on = "ON";
const char *str_off = "OFF";

void dump_radio_status_to_serialport(uint8_t);

void setup() {
  Serial.begin(9600);

  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);
 
  radio.begin();  // Defaults 1Mbps, channel 0, max TX power
  dump_radio_status_to_serialport(radio.radioState());

  radio.setRXaddress((void*)rxaddr);
 
 
  radio.enableRX();  // Start listening
}

void loop() {
  char inbuf[33];
 
  dump_radio_status_to_serialport(radio.radioState());  // Should show Receive Mode

  while (!radio.available(true))
    ;
  if (radio.read(inbuf)) {
    Serial.print("Received packet: ");
    Serial.println(inbuf);

    if (!strcmp(inbuf, str_on))
      Serial.println("HIGH");
    if (!strcmp(inbuf, str_off))
      Serial.println("LOW");
  }
}

void dump_radio_status_to_serialport(uint8_t status)
{
  Serial.print("Enrf24 radio transceiver status: ");
  switch (status) {
    case ENRF24_STATE_NOTPRESENT:
      Serial.println("NO TRANSCEIVER PRESENT");
      break;

    case ENRF24_STATE_DEEPSLEEP:
      Serial.println("DEEP SLEEP <1uA power consumption");
      break;

    case ENRF24_STATE_IDLE:
      Serial.println("IDLE module powered up w/ oscillators running");
      break;

    case ENRF24_STATE_PTX:
      Serial.println("Actively Transmitting");
      break;

    case ENRF24_STATE_PRX:
      Serial.println("Receive Mode");
      break;

    default:
      Serial.println("UNKNOWN STATUS CODE");
  }
}


Natürlich muss man vor bei Enrf24 radio(P2_0, P2_1, P2_2);  // P2.0=CE, P2.1=CSN, P2.2=IRQ
die richtigen Pins eingeben.

Jedoch hängt er auch dort:

Sender:
Sending packet: ON/OFF
Enrf24 radio transceiver status: NO TRANSCEIVER PRESENT

Empfänger:
Enrf24 radio transceiver status: NO TRANSCEIVER PRESENT

Whandall

Das sieht ja völlig normal aus.

Womit speist du denn die NRFs?
Die brauchen schon etwas Strom, normalerweise äußert sich ein Mangel dort
aber in Kommunikations- und nicht Betriebsstörungen.

Versuch dich mal an den printDetails, dafür brauchst du
Code: [Select]
#include <printf.h>
setup(){
 Serial.begin(115200);
 printf_begin();
 ...
}


Das gilt für ManiacBug und TMRh20 Libraries.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Entrax

Das sieht ja völlig normal aus.

Womit speist du denn die NRFs?
Die brauchen schon etwas Strom, normalerweise äußert sich ein Mangel dort
aber in Kommunikations- und nicht Betriebsstörungen.

Versuch dich mal an den printDetails, dafür brauchst du
Code: [Select]
#include <printf.h>
setup(){
 Serial.begin(115200);
 printf_begin();
 ...
}


Das gilt für ManiacBug und TMRh20 Libraries.
Einspeisen tuh ich über den Mikro.


printDetails(); geht nicht kommt immer : 'printDetails' was not declared in this scope
Code: [Select]

#include <printf.h>
void setup() {
  Serial.begin(9600);
  printf_begin();
}

void loop() {
printDetails();
}


Ich habe festgestellt die Library habe ich so nicht, sie ist nur bei dem RF24 von github mit drin =/.
Ich glaube das was ich runter geladen habe bzw was hier rein gestellt habe geht nur mit Arduino...


KUCKY

Ich kann nur aus der Arduinowelt evtl. helfen. Diese Seite wurde schon erwähnt.

https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

Da steht alles was Du brauchst. Der Kondensator ist sehr wichtig. Ohne den ging bei mir auch nix. Bei Get_Started muss man den Arduinos eine Rolle zuweisen. Hast Du das gemacht? Ob man dann 'T' oder 'R' drückt ist meist egal. Mein QuadroCopter fliegt zwar immer noch nicht optimal, aber die Funkstrecke ist einwandfrei.

Gruß Willi

Whandall

Einspeisen tuh ich über den Mikro.
Das ist so aussagekräftig wie "ich versorge das Gerät mit Strom".

Kann die 3.3V Leitung des Mikros 100mA liefern?

Ich habe festgestellt die Library habe ich so nicht, sie ist nur bei dem RF24 von github mit drin =/.
Ich glaube das was ich runter geladen habe bzw was hier rein gestellt habe geht nur mit Arduino...
Aber du benutzt doch das Beispiel dieser Library...

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
*/


printDetails(); geht nicht kommt immer : 'printDetails' was not declared in this scope
Code: [Select]

#include <printf.h>
void setup() {
  Serial.begin(9600);
  printf_begin();
}

void loop() {
printDetails();
}


Dass es radio.printDetails(); heissen muss konntest du dir nicht denken?
Und dass du das in den Aussgangssketch einbauen solltest in dem radio definiert ist ist auch naheliegend, oder?

Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Entrax

#23
Apr 24, 2017, 04:51 pm Last Edit: Apr 24, 2017, 04:56 pm by Entrax
Das ist so aussagekräftig wie "ich versorge das Gerät mit Strom".

Kann die 3.3V Leitung des Mikros 100mA liefern?

Aber du benutzt doch das Beispiel dieser Library...

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
*/


Dass es radio.printDetails(); heissen muss konntest du dir nicht denken?
Und dass du das in den Aussgangssketch einbauen solltest in dem radio definiert ist ist auch naheliegend, oder?
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"
#include <printf.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_7,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);
  radio.begin();
  printf_begin();
  Serial.println(F("RF24/examples/GettingStarted"));
  Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
  radio.printDetails();

  // 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);


Endschuldige ich hatte das falsche kopiert, ich hatte es natürlich im Ausgangssketch drin gehabt.
Ich habe mal nur den teil kopiert was ich geändert habe. Jedoch hatte er mir nichts angezeigt nur wieder drücke T und weiter zu machen halt. Auch radio.printDetails(); im Loop hat nichts gebracht.
Mikrocontroller: 3.3 VDC (300 mA max)
5.0 VDC (depends on 3.3 VDC usage, 23 mA to 323
mA)

Ich kann nur aus der Arduinowelt evtl. helfen. Diese Seite wurde schon erwähnt.

https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

Da steht alles was Du brauchst. Der Kondensator ist sehr wichtig. Ohne den ging bei mir auch nix. Bei Get_Started muss man den Arduinos eine Rolle zuweisen. Hast Du das gemacht? Ob man dann 'T' oder 'R' drückt ist meist egal. Mein QuadroCopter fliegt zwar immer noch nicht optimal, aber die Funkstrecke ist einwandfrei.

Gruß Willi

Rolle zu gewissen alles gemacht schon nur halt mit Kondensator nicht weil die erst noch kommen, sind bestellt.

Entrax

Habe jetzt auch wie in diversen Anleitung kondensatoren (100nF + 10uF) eingebaut, ohne erfolg.

Schuppeste

Ich hatte schonmal klone, die miso mosi vertauscht hatten.. Und auch mal 2 bei denen man die leiste nachlöten müsste.. Bei einem anderen hat der Kondensator nur unmittelbar auf die Modul Lötpunkte gelötet funktioniert.



Entrax

Ich hatte schonmal klone, die miso mosi vertauscht hatten.. Und auch mal 2 bei denen man die leiste nachlöten müsste.. Bei einem anderen hat der Kondensator nur unmittelbar auf die Modul Lötpunkte gelötet funktioniert.
Ich habe MISO und MOSI mal getauscht, auch kein Erfolg.
Mit Kondensator ran löten wäre noch eine Idee. Ich habe ihn momentan in die Buchse von der Leitung mit rein gedrückt.

Go Up