mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik NRF24L01 (SPI Problem) sendet nur Status


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Holger K. (holgerkraehe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich versuche hier ein NRF24L01+ mit einem ESP8266 ans laufen zu 
bekommen.
Dafür verwende ich die Arduino IDE (weils halt schneller geht).

Ich verwende befalls die RF24 Library.

Mein aktueller Code ist sehr rudimentär:
 if(radio.isChipConnected() == true)
    {
      Serial.println("Radio connected");
    }
    else
    {
      Serial.println("Radio not connected");
    }
    delay(1000);

Ich bekomme dauernd ein "Radio not connected".

Habe mal die SPI Leitungen direkt auf dem Modul angeschaut.
Sind also wirklick leitungen am Modul angelötet!

isChipConnected sieht so aus:
bool RF24::isChipConnected()
{
  uint8_t setup = read_register(SETUP_AW);
  if(setup >= 1 && setup <= 3)
  {
    return true;
  }

  return false;
}


Wie ihr sehen könnt, antwortet das Modul grundsätzlich schon.
Jedoch nur mit dem Statusbyte welches ja immer parallel zum command 
gesendet wird. Dannach kommt nichts mehr.
Es sendet immer 1C zurück. Beim Mikro kommt auch 1C an (habe ich 
geprüft!).

Im Anhang auch noch die definition des Status registers laut Datenblatt, 
sowie "1C" eingetragen.

Die Module sind von Aliexpress. Glaube jedoch noch nicht daran, dass 
diese Defekt sein sollen.

Hat eventuell jemand eine Idee, wo ich noch suchen könnte?
Danke!

Autor: Holger K. (holgerkraehe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal noch versuchsweise das Timing etwas eindeutiger gemacht 
(Daten anliegend vor steigendem Clock)

Leider ohne änderung.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Hat eventuell jemand eine Idee, wo ich noch suchen könnte?

Du hast mit ziemlicher Sicherheit Probleme bei der Stromversorgung
bzw der Spannungs-Entkopplung.

Zeige deinen Aufbau und den Schaltplan. Sonst kommen wir hier
nicht weiter.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Ich verwende befalls die RF24 Library.

Die Gretchenfrage ist: benutz du das Arduino Framwork oder
nutzt du nur den Compiler.

Holger K. schrieb:
> uint8_t setup = read_register(SETUP_AW);

... deuted darauf hin dass du keine Klassen-Programmierung
verwendest und daher auch nicht die Arduino-Lib. (?)

Holger K. schrieb:
> Mein aktueller Code ist sehr rudimentär:

... aber unvollständig. Damit kann man sich kein Bild machen
was du da treibst, und auch keine Fehler suchen/finden.
Dokumentiere sauber was du tust.

Ich suche mir jedenfalls nicht den Kram aus dem Internet
zusammen.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frickelfritze schrieb:
> Die Gretchenfrage ist: benutz du das Arduino Framwork oder
> nutzt du nur den Compiler.

Ich benutze das Arduino Framework für die IOs.

Frickelfritze schrieb:
> ... deuted darauf hin dass du keine Klassen-Programmierung
> verwendest und daher auch nicht die Arduino-Lib. (?)

Nunja nicht ganz. Ich verwende für erste Test eben nur diese eine 
Funktion der RF24 Library.

Frickelfritze schrieb:
> ... aber unvollständig. Damit kann man sich kein Bild machen
> was du da treibst, und auch keine Fehler suchen/finden.
> Dokumentiere sauber was du tust.
>
> Ich suche mir jedenfalls nicht den Kram aus dem Internet
> zusammen.

Versteh ich.

Was ich genau mache ist:

Ich initialisiere die IOs, und lese vom Register 03 (SETUP_WR), dies im 
Sekundentakt. Mehr macht mein Programm nicht. Der Logicanalyzer zeigt 
seht deutlich, was geschieht.

Meiner Meinung nach, müsste das Modul immer den Registerinhalt 
zurückliefern. Warum auch nicht?

Die Speisung ist inzwischen noch mit 4.7uF MLCC zusätzlich gestützt.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe neue erkentnisse.

Das erste Kommando, welches ich nach einem Powerup sende, wird korrekt 
beantwortet. Das Modul sendet mir den gewünschten registerinhalt.

Dann mache ich CS -> High und dann wieder Low.

Ab nun bekomme ich nur noch 0.

Das Statusregister war beim ersten Kommando 0x0E.
Bei jedem weiteren dann wieder immer 0x1C.

1C bedeutet, dass MAX_RT gesetzt ist.
"Maximum number of TX Transmit interrupt".

Muss dieses Bit gelöscht werden?

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Was ich genau mache ist:

So habe ich mir das vorgestellt mit der genauen Vorgehensweise.

Holger K. schrieb:
> Die Speisung ist inzwischen noch mit 4.7uF MLCC zusätzlich gestützt.

So habe ich mir das vorgestellt mit genauem "Aufbau und Schaltplan".

Holger K. schrieb:
> eine
> Funktion der RF24 Library.

Das versteht eben kein Schwein. Ist es jetz die Klasse aus
Arduino, oder ist das die "objekt-lose" Library.

Ein Mischmasch aus eigenen Libs ohne Klasse und Arduino
Framework führt unvermeidlich in den Dschungel ....

Autor: Holger K. (holgerkraehe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, anbei mein .ino
Ohne irgendwelche Abhängigkeiten etc.


Ich habe mir nun eine "Testumgebung" eingerichtet.
Mit diesem .ino kann ich nun einzelne Befehle per konsole senden.

Das Verhalten ist identisch.


Sorry, ich habe das schema vergessen.
Das Modul wird, entgegen dem Schema, mit 3.3V aus einem LDO versorgt.

: Bearbeitet durch User
Autor: Frickelfritze (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Holger K. schrieb:
> So, anbei mein .ino
> Ohne irgendwelche Abhängigkeiten etc.

Du redest Mist.

Holger K. schrieb:
> Ich verwende befalls die RF24 Library.

Na wo isse denn?

Holger K. schrieb:
> So, anbei mein .ino

Mit so einem Kauderwelsch wirst du noch in 2 Jahren daran
herumdoktern. Du bedienst weder CS noch CE, und ob deine
Kauderwelsch-spi_transfer-Routine so funktioniert will
ich mir gar nicht weiter anschauen.

Jedenfalls gibt es hier weit und breit keine RF24 Library.

Letzter heisser Tipp: das Datenblatt mal richtig lesen und
auch verstehen, nicht nur ein Kommando für's Register.

Ich bin dann mal weg.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Beispiel.

Ich starte mein Board neu (Speisung trennen, verbinden)
Nun gebe ich die kommandos in meine Konsole ein:

Man sieht, das ich zu Beginn, beim aller ersten Kommando,
Ein Status 0x0E vom Modul bekomme.
Danach sendet mir das Modul den Inhalt des Register 0A (RX_ADDR_P0) zu.
Dieser ist nach einem Reset: 0xE7E7E7E7E7
Scheint also ganz gut zu passen.

Wenn ich nun anch 5 Bytes die kommunikation mit CS = High beende, und 
kurz darauf ein neues Kommando einleite mit CS = Low und erneut 0A 
auslesen möchte, so sehe ich, dass der Status nun 0x1C ist und ich 
bekomme vom modul nur noch 0x00 zurück. Egal welches Register ich 
abfrage.

Dieses Verhalten konnte ich auch mit den Logicanalyzer verifizieren.
Es handelt sich also wohl kaum um ein Softwareproblem.
  -Received: CSH
  -Next Command...
  -Received: CSL
  -Next Command...
  -Received: 0A
SPI_Transfer...
Value: E
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: E7
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: E7
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: E7
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: E7
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: E7
  -Next Command...
  -Received: CSH
  -Next Command...
  -Received: CSL
  -Next Command...
  -Received: 0A
SPI_Transfer...
Value: 1C
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: 0
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: 0
  -Next Command...
  -Received: FF
SPI_Transfer...
Value: 0
  -Next Command...


Autor: bla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt denn der Logikanalysator bei den weiteren SPI-Transfers?

Autor: Holger K. (holgerkraehe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
bla schrieb:
> Was sagt denn der Logikanalysator bei den weiteren SPI-Transfers?

Anbei die beiden Screenshots.
Pulse2.png ist der erste Befehl nach dem power up.

pulse3.png ist der darauffolgende mit einer Pause von einigen Sekunden.
Dazwischen findet keinerlei kommunikation statt.

Hier noch die Konsolenausgabe:

  -Received: AUT
NRF SPI TX: 0x0A
--- SPI_Transfer ---
NRF SPI RX: 0xE
Now send 5 times 0xFF
--- SPI_Transfer ---
NRF SPI RX: 0xE7
--- SPI_Transfer ---
NRF SPI RX: 0xE7
--- SPI_Transfer ---
NRF SPI RX: 0xE7
--- SPI_Transfer ---
NRF SPI RX: 0xE7
--- SPI_Transfer ---
NRF SPI RX: 0xE7
  -Next Command...
  -Received: AUT
NRF SPI TX: 0x0A
--- SPI_Transfer ---
NRF SPI RX: 0x1C
Now send 5 times 0xFF
--- SPI_Transfer ---
NRF SPI RX: 0x0
--- SPI_Transfer ---
NRF SPI RX: 0x0
--- SPI_Transfer ---
NRF SPI RX: 0x0
--- SPI_Transfer ---
NRF SPI RX: 0x0
--- SPI_Transfer ---
NRF SPI RX: 0x0
  -Next Command...

Ich habe zudem noch die Spannugspegel geprüft.
Wenn CS high ist, liegen am CS-Pin des Moduls, saubere 3.3V an (3.27V)
Das selbe gilt für low. (~0.08V)

: Bearbeitet durch User
Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen.

Ich versuche mal einen push...


Danke

Autor: bla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ferndiagnostisch ist da nicht mehr viel zu sagen. Wenn der erste 
Transmit geht aber alle anderen nicht, scheint die Verkabelung zu 
stimmen. Zu schnell sendest du mit ca. 500Hz auch nicht. Und abgeblockt 
hast du ja schon.

Ich hatte neulich ein ähnliches Problem, da waren CE und CSN vertauscht. 
Das könnte erklären warum die erste Transaktion funktioniert, aber alle 
anderen nicht mehr. das erklärt aber nicht warum das Statusregister 
immer gesendet wird.

Der nächste Schritt wäre jetzt Komponenten tauschen bis es geht und 
dadurch isolieren ob und wo der Fehler in Hardware liegt. Z.B. Test mit 
nem anderen Mikrocontroller, oder organisiere dir Module von denen man 
weiß dass sie funktionieren. Itead hat z.B. angeblich echte nRFs von 
Nordic.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bla schrieb:
> Naja, ferndiagnostisch ist da nicht mehr viel zu sagen. Wenn der
> erste
> Transmit geht aber alle anderen nicht, scheint die Verkabelung zu
> stimmen. Zu schnell sendest du mit ca. 500Hz auch nicht. Und abgeblockt
> hast du ja schon.
>
> Ich hatte neulich ein ähnliches Problem, da waren CE und CSN vertauscht.
> Das könnte erklären warum die erste Transaktion funktioniert, aber alle
> anderen nicht mehr. das erklärt aber nicht warum das Statusregister
> immer gesendet wird.
>
> Der nächste Schritt wäre jetzt Komponenten tauschen bis es geht und
> dadurch isolieren ob und wo der Fehler in Hardware liegt. Z.B. Test mit
> nem anderen Mikrocontroller, oder organisiere dir Module von denen man
> weiß dass sie funktionieren. Itead hat z.B. angeblich echte nRFs von
> Nordic.

Vielen Dank für deine Antwort.
Ich könnte mir auch einfach einen einzelnen nRF24 Chip bestellen, und 
diesen auf dem Modul austauschen.

An die vertauschte CE / CS Leitung habe ich heute auch noch gedacht.
Kam dann aber auch zum schluss, dass dies dann nicht das Statusregister 
erklären würde. Dieses (habe ich geprüft) kommt nämlich wirklich nicht, 
wenn CS High ist. Macht ja auch sinn.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Holger K. schrieb:
> Ich versuche mal einen push...

Deine Schaltung und dein Aufbau sind ja perfekt (ja du bist
ein unbestrittener Meister deines Fachs), daher brauchst du
uns die ja nicht zu zeigen.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frickelfritze schrieb:
> Holger K. schrieb:
>> Ich versuche mal einen push...
>
> Deine Schaltung und dein Aufbau sind ja perfekt (ja du bist
> ein unbestrittener Meister deines Fachs), daher brauchst du
> uns die ja nicht zu zeigen.

Das Problem ist, dass das letzte Schema überhaupt nicht mehr mit dem 
jetzigen Aufbau übereinstimmt.

Den Aufbau kann ich schon zeigen. Kann erst am Abend ein Foto machen.
Meine Annahme war, dass wenn ich die Signale am Modul betrachte, dies 
grundsätzlich die höchste Aussagekraft hat.

Ich liefere heute Abend gerne noch Fotos des Aufbaus nach.

Bin aber weiterhin froh über jeden Kommentar zum Thema, wenn er denn 
konstruktiv ist.

: Bearbeitet durch User
Autor: Frickelfritze (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Holger K. schrieb:
> Bin aber weiterhin froh über jeden Kommentar zum Thema, wenn er denn
> konstruktiv ist.

Wenn du das hier

Beitrag "Re: NRF24L01 (SPI Problem) sendet nur Status"

als Schaltplan bezeichnest .... dann gute Nacht.

Zu einem Schaltplan gehört übrigens auch ein Netzteil,
also das Teil wo die Energie herkommt.

Wenn du das als nicht konstruktiv betrachtest dann lasse
es dir von jemand anders erklären.

"konstruktiv" von dir wäre es auf Fehler die du gepostet
hast einzugehen, wie z.B. der erste Sourcecode der keine
Betätigung des Chip Selects beinhaltet. Wir wissen also
immer noch nicht genau mit welchem Code die Symptome
aufgetreten sind.

"konstruktiv" von dir wäre es auch, alles in einem Guss zu
repräsentieren, also (kompletter, authentischer) Schaltplan,
Aufbau und aktueller Code bei dem du die entsprechenden
Symptome festgestellt hast. Von dem was du bisher gezeigt
hast kann man keine vernünftige Analyse betreiben.

Wenn du das vorangegangene Posting Chaos mal bereinigt
bzw klargestellt hast dann geht vielleicht was weiter.

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Frickelfritze schrieb:
> Wenn du das vorangegangene Posting Chaos mal bereinigt
> bzw klargestellt hast dann geht vielleicht was weiter.

Die Timingdiagramme des Logikanalysators sprechen für sich.
Was spielt der zugrundeliegende Code für eine Rolle?
Das entscheidenste sind die Signale beim Modul. Diese sind klar und 
deutlich dargestellt.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Die Timingdiagramme des Logikanalysators sprechen für sich.

Das wiederum zeigt deine Naivität bzw Unerfahrenheit.
Ein Logikanalysator zeigt keine analogen Signale, auch wenn
in beiden Worten "log" vorkommt. Der hilft nur was wenn man
sich seiner Schaltungstechnik absolut sicher ist. Ich sage
mal für dich dass du das nicht bist. Vermutlich wirst du
nicht einmal wissen was du mit analoger Messtechnik machen
bzw erreichen könntest.

Dein Aufbau ist wohl nicht herzeigbar sonst hätten wir ihn
schon längst gesehen.

Aber mach nur weiter so, irgendwie wurschtelst du dich schon
durch.

Autor: Schart (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Frickelfritze schrieb:
> Holger K. schrieb:
>> Die Timingdiagramme des Logikanalysators sprechen für sich.
>
> Das wiederum zeigt deine Naivität bzw Unerfahrenheit.
> Ein Logikanalysator zeigt keine analogen Signale, auch wenn
> in beiden Worten "log" vorkommt. Der hilft nur was wenn man
> sich seiner Schaltungstechnik absolut sicher ist. Ich sage
> mal für dich dass du das nicht bist. Vermutlich wirst du
> nicht einmal wissen was du mit analoger Messtechnik machen
> bzw erreichen könntest.
>
> Dein Aufbau ist wohl nicht herzeigbar sonst hätten wir ihn
> schon längst gesehen.
>
> Aber mach nur weiter so, irgendwie wurschtelst du dich schon
> durch.

>>> Ich bin dann mal weg.

Das nenne ich inkonsequent.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schart schrieb:
> Das nenne ich inkonsequent.

Das gebe ich zu.

Bin keiner vom Typ "was kümmert mich mein Geschwätz von gestern".

Aber der Mist der hier abläuft hat mich provoziert ....

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Frickelfritze schrieb:
> Dein Aufbau ist wohl nicht herzeigbar sonst hätten wir ihn
> schon längst gesehen.

Das liegt eher daran, dass ich noch nicht die Zeit gefunden habe für ein 
Bild.

Frickelfritze schrieb:
> Aber der Mist der hier abläuft hat mich provoziert ....

Ich bin dir sehr dankbar für deine Posts.
Denn damit hälst du meinen Thread regelmässig an erster Stelle.

Autor: Frickelfritze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Denn damit hälst du meinen Thread regelmässig an erster Stelle.

Ja das ist wohl dein Erfolgskonzept: möglichst viel Chaos
und Mist erzeugen, dazu vielleicht noch ein paar Postulate
dass den Fachleuten hier im Forum die Haare zu Berge stehen.

Sehr empfehlenswert!

Autor: Christian S. (roehrenvorheizer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Holger K. (holgerkraehe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem ist gelöst.

Man sollte die Polarität des Clocks mit dem Datenblatt vergleichen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.