Forum: Mikrocontroller und Digitale Elektronik 2x NRF24L01+ | 2x Texas Instrument tm4c123gxl | Keine Funkverbindung


von Kevin F. (entrax)


Angehängte Dateien:

Lesenswert?

Hallo
Ich bekomme keine Funktstrecke aufgebaut.
Ich habe wie im Foto direkt anklemmt und auch am Mikrocontroller direkt, 
bei beiden.

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)

Ich habe im 
http://forum.43oh.com/topic/3237-energia-library-nordic-nrf24l01-library/?page=11#comment-48805 
gesucht und dort die Enrf24_v1_8.zip Bibliothek herunter geladen

Enerf24_RXdemo
1
#include <Enrf24.h>
2
#include <nRF24L01.h>
3
#include <string.h>
4
#include <SPI.h>
5
6
Enrf24 radio(PC_6, PD_1, PE_1);
7
const uint8_t rxaddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x01 };
8
9
const char *str_on = "ON";
10
const char *str_off = "OFF";
11
12
void dump_radio_status_to_serialport(uint8_t);
13
14
void setup() {
15
  Serial.begin(9600);
16
17
  SPI.begin();
18
  SPI.setDataMode(SPI_MODE0);
19
  SPI.setBitOrder(MSBFIRST);
20
  
21
  radio.begin();  // Defaults 1Mbps, channel 0, max TX power
22
  dump_radio_status_to_serialport(radio.radioState());
23
24
  radio.setRXaddress((void*)rxaddr);
25
  
26
27
  
28
  radio.enableRX();  // Start listening
29
}
30
31
void loop() {
32
  char inbuf[33];
33
  
34
  dump_radio_status_to_serialport(radio.radioState());  // Should show Receive Mode
35
36
  while (!radio.available(true))
37
    ;
38
  if (radio.read(inbuf)) {
39
    Serial.print("Received packet: ");
40
    Serial.println(inbuf);
41
42
    if (!strcmp(inbuf, str_on))
43
      Serial.println("HIGH");
44
    if (!strcmp(inbuf, str_off))
45
      Serial.println("LOW");
46
  }
47
}
48
49
void dump_radio_status_to_serialport(uint8_t status)
50
{
51
  Serial.print("Enrf24 radio transceiver status: ");
52
  switch (status) {
53
    case ENRF24_STATE_NOTPRESENT:
54
      Serial.println("NO TRANSCEIVER PRESENT");
55
      break;
56
57
    case ENRF24_STATE_DEEPSLEEP:
58
      Serial.println("DEEP SLEEP <1uA power consumption");
59
      break;
60
61
    case ENRF24_STATE_IDLE:
62
      Serial.println("IDLE module powered up w/ oscillators running");
63
      break;
64
65
    case ENRF24_STATE_PTX:
66
      Serial.println("Actively Transmitting");
67
      break;
68
69
    case ENRF24_STATE_PRX:
70
      Serial.println("Receive Mode");
71
      break;
72
73
    default:
74
      Serial.println("UNKNOWN STATUS CODE");
75
  }
76
}

Enrf24_TXdemo
1
#include <Enrf24.h>
2
#include <nRF24L01.h>
3
#include <string.h>
4
#include <SPI.h>
5
6
Enrf24 radio(PC_7, PD_1, PE_1);  // CE, CSN, IRQ
7
const uint8_t txaddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x01 };
8
9
const char *str_on = "ON";
10
const char *str_off = "OFF";
11
12
void dump_radio_status_to_serialport(uint8_t);
13
14
void setup() {
15
  Serial.begin(9600);
16
17
  SPI.begin();
18
  SPI.setDataMode(SPI_MODE0);
19
  SPI.setBitOrder(MSBFIRST);
20
21
  radio.begin();  // Defaults 1Mbps, channel 0, max TX power
22
  dump_radio_status_to_serialport(radio.radioState());
23
24
  radio.setTXaddress((void*)txaddr);
25
}
26
27
void loop() {
28
  Serial.print("Sending packet: ");
29
  Serial.println(str_on);
30
  radio.print(str_on);
31
  radio.flush();  // Force transmit (don't wait for any more data)
32
  dump_radio_status_to_serialport(radio.radioState());  // Should report IDLE
33
  delay(1000);
34
35
  Serial.print("Sending packet: ");
36
  Serial.println(str_off);
37
  radio.print(str_off);
38
  radio.flush();  //
39
  dump_radio_status_to_serialport(radio.radioState());  // Should report IDLE
40
  delay(1000);
41
}
42
43
void dump_radio_status_to_serialport(uint8_t status)
44
{
45
  Serial.print("Enrf24 radio transceiver status: ");
46
  switch (status) {
47
    case ENRF24_STATE_NOTPRESENT:
48
      Serial.println("NO TRANSCEIVER PRESENT");
49
      break;
50
51
    case ENRF24_STATE_DEEPSLEEP:
52
      Serial.println("DEEP SLEEP <1uA power consumption");
53
      break;
54
55
    case ENRF24_STATE_IDLE:
56
      Serial.println("IDLE module powered up w/ oscillators running");
57
      break;
58
59
    case ENRF24_STATE_PTX:
60
      Serial.println("Actively Transmitting");
61
      break;
62
63
    case ENRF24_STATE_PRX:
64
      Serial.println("Receive Mode");
65
      break;
66
67
    default:
68
      Serial.println("UNKNOWN STATUS CODE");
69
  }
70
}

Er zeigt nur an; Sender: Enrf24 radio transceiver status NO TRANSCEIVER 
PRESENT mit Sending packet: On und beim Empfänger: Enrf24 radio 
transceiver status NO TRANSCEIVER PRESENT. Ich muss jedes mal reset 
drücken, er arbeitet auch den Loop nicht durch. Ich hoffe
ihr könnt mir helfen :)

PS: 10 µF Kondensator habe ich bestellt, weil ich das schon hier im 
Forum gelesen haben, aber vielleicht gibt es trotzdem noch probleme.

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

Kevin F. schrieb:
> Enrf24 radio transceiver status NO TRANSCEIVER PRESENT

... weist darauf hin dass die SPI Verbindung schon nicht
klappt. Dein Prozessor kann also keine Register am NRF24
lesen oder schreiben.

Also alle Leitungen prüfen (NRF24 von oben oder unten?
Ein oft gemachter Fehler...) und dem NRF24 nur 3.3V
Versorgung geben, und einen keramischen und einen
elektrolytischen Abblock-Kondensator (100nf + 10uF).

So wie hier:

Beitrag "NRF24L01+ test program for Arduino Uno"

von Kevin F. (entrax)


Angehängte Dateien:

Lesenswert?

Arduinoquäler schrieb:
> Kevin F. schrieb:
>> Enrf24 radio transceiver status NO TRANSCEIVER PRESENT
>
> ... weist darauf hin dass die SPI Verbindung schon nicht
> klappt. Dein Prozessor kann also keine Register am NRF24
> lesen oder schreiben.
>
> Also alle Leitungen prüfen (NRF24 von oben oder unten?
> Ein oft gemachter Fehler...) und dem NRF24 nur 3.3V
> Versorgung geben, und einen keramischen und einen
> elektrolytischen Abblock-Kondensator (100nf + 10uF).
>
> So wie hier:
>
> Beitrag "NRF24L01+ test program for Arduino Uno"

Bezüglich Leitung: Ich habe die geprüft sie gehen direkt vom 
Mikrocontroller an die NRF24L01+

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)

Bis auf VCC (3,3V) und GND die gehen über ein Breadboard, da ich für 
meine anderen Bauteile ebenfalls 3,3V und GND brauche. Das NRF24L01+ 
soll in einem selbst gebauten Auto und in einer Fernbedienung platz 
finden später.

Kondensatoren: Es sind beide bestellt, kommen die Tage. Hatte ich 
bereits gelesen.

NRF24L01+: Angeklemmt wie auf dem Foto.

von Arduinoquäler (Gast)


Lesenswert?

Kevin F. schrieb:
> NRF24L01+: Angeklemmt wie auf dem Foto.

Zeig deinen gesamten Aufbau im Detail.
(wie der NRF24 aussieht wir schon ...)

von Kevin F. (entrax)


Angehängte Dateien:

Lesenswert?

Da ich nicht genau weis, warum der restliche Aufbau jetzt wichtig ist, 
da ich ja erst mal nur NRF24L01 benutzten möchte und nicht den Rest. Ich 
habe es trotzdem mal gezeichnet per Hand, ein Verdrahtungsplan. Wenn du 
das meinst.

Ich habe nur den Sender (Fernbedienung) gezeichnet, weil er zum 
vergleich weniger Bauteile hat und dadurch einfacher ist. Die punkte 
also die kreise befinden sich auf ein Breadboard (VCC 3,3V und VBUS 5V 
und GND 0V). Der Rest ist alles direkt angeschlossen keine Abgriffe 
zwischen, so genau habe ich es auch beim Empfänger (Auto) gemacht.

LLC = Logik-Level-Converter.

Diese Pins sind benutzt in den Programmen:

Sender:
1
const byte xAxis = 29; //Pin PE_3
2
const byte yAxis = 28; //Pin PE_2
3
const byte LCD[2] = {9, 10}; //Pins PA_6, PA_7 (SCL, SDA)
4
const byte nRF24L01[6] = {34, 25, 26, 24, 23, 27}; //Pins PC_7, PD_2, PD_3, PD_1, PD_0, PE_1 (CE, MISO, MOSI, CS, SCK, IRQ)

Empfänger:
1
const byte IR[3] = {40, 39, 38}; //Pins PF_2, PF_3, PB_3 (Left, Center, Right)
2
const byte motor_A_B[4] = {36, 13, 34, 33}; //Pins PC_5, PA_4, PC_7, PD_6 (aLeft,  aRight, bLeft, bRight)
3
const byte pwm_A_B[2] = {32, 19}; //Pins PD_7, PB_2 (pwmA, pwmB)
4
const byte servo = 18; //Pin PE_0
5
const byte push1 = 31; //Pins PF_4
6
const byte ultrasonic[2] = {15, 14}; //Pins PB_7, PB_6 (trigger, echo)
7
const byte automaticSwitch = 28; //Pin PE_2
8
const byte nRF24L01[6] = {35, 25, 26, 24, 23, 27}; //Pins PC_6, PD_2, PD_3, PD_1, PD_0, PE_1 (CE, MISO, MOSI, CS, SCK, IRQ)

Wie gesagt beim Empfänger ist es das selbe, alle sind direkt miteinander 
Verbunden (Mikrocontroller zum Bauteil), bis auf VCC(3,3V), VBUS(5V) und 
GND(0V)die sind über ein Breadboard. Nur noch beim Ultraschallsensor ist 
wie beim LCD vom Sender ein LLC dazwischen da seine Signale 5V sind bzw 
benötigt.

Ich habe  mal screenshots vom programm gemacht, dieser ist bis jetzt 
grob.
Folgende bilder gehören zusammen
Sender: remote_control, Transmitter, X_Axis, Y_Axis.
Im Transmitter soll später der code für den NRF24L01 reinkommen.

Empfänger: Car, automatic, Initalation, Steering, Ultrasonic, 
Utilization.
Im automatic (Interrupt, für wechsel Handsteuerung oder Line Follower) 
soll später der Code für den NRF24L01 reinkommen.

Das Auto fährt bis jetzt eine Schwarze Linie entlang auf den Boden, mit 
einem Schalter soll später zwischen Line Follower oder steuerung über 
remote_control gewchselt werden.

Bis jetzt ist der code nur grob vorgeschrieben, funktion Teil 1 (Line 
Follower) funktioniert schon mal.

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

Sorry, das drumherum, also die Fahrzeugsteuerung, interessiert
erst mal nicht. Wenn du Sources postest, dann immer als *.c, *.cpp
oder als *.ino, keine Screenshots (--> Längeren Sourcecode nicht im
Text einfügen, sondern als Dateianhang).

Wenn ich Aufbau sage dann meine ich auch Aufbau (der Verbindung
zum NRF24), denn an der Physik scheitern auch viele Kommunikations-
versuche.

von Kevin F. (entrax)


Angehängte Dateien:

Lesenswert?

Arduinoquäler schrieb:
> Sorry, das drumherum, also die Fahrzeugsteuerung, interessiert
> erst mal nicht. Wenn du Sources postest, dann immer als *.c, *.cpp
> oder als *.ino, keine Screenshots (--> Längeren Sourcecode nicht im
> Text einfügen, sondern als Dateianhang).
>
> Wenn ich Aufbau sage dann meine ich auch Aufbau (der Verbindung
> zum NRF24), denn an der Physik scheitern auch viele Kommunikations-
> versuche.

Aso entschuldige.

Ich weis leider jetzt nicht genau was du mit der Verbindung meints.
Ich habe mal 3 Fotos hoch geladen wie er Verbunden ist.
Wie gesagt:
Direkt vom Mikro zum Modul (Buchse / Busche Leitung) und VCC 3,3V und 
GND über das Breadboard.

von Kevin F. (entrax)


Lesenswert?

Arduinoquäler schrieb:
> Kevin F. schrieb:
>> Enrf24 radio transceiver status NO TRANSCEIVER PRESENT
>
> ... weist darauf hin dass die SPI Verbindung schon nicht
> klappt. Dein Prozessor kann also keine Register am NRF24
> lesen oder schreiben.
>
> Also alle Leitungen prüfen (NRF24 von oben oder unten?
> Ein oft gemachter Fehler...) und dem NRF24 nur 3.3V
> Versorgung geben, und einen keramischen und einen
> elektrolytischen Abblock-Kondensator (100nf + 10uF).
>
> So wie hier:
>
> Beitrag "NRF24L01+ test program for Arduino Uno"

Habe heute die Kondensatoren dazwischen gebaut bzw rein gebaut und es 
steht immer noch das selbe da.
Hat also leider nichts gebracht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.