NRF24L01 SPI immer Selber wert gelesen

OP #4618360
Lesenswert?

Hallo zusammen,

ich mache seit 2 Tagen mit dem NRF24L01 Tutorial rum und komme nicht 
weiter.
Es scheitert schon beim SPI Zugriff.

ich verwende:
-Atmel Studio
-Entwicklungsboard: MK2
-ATmega8A
-Uart_terminal zum debuggen
-Code genau der aus dem Tutorial(TX) abgeändert zum register lesen mit 
der routine

Wenn ich alle Register von Adresse 0-20 lesen will bekomme ich für alle 
den selben Wert zurück. Lustig ist wenn ich zum Beispiel bei 1 oder 2 
beginne zu lesen, bekomme ich einen anderen Wert zurück aber dennoch für 
alle Register den selben Wert.

Noch sende ich nichts mit dem Funkmodul.
Provisorisch habe ich 3 Dioden von 5V auf 3V in Reihe(gemessen!).
Sollte aber doch nichts machen wenn ich nur SPI Zugriffe machen will.

Folgendes habe ich schon probiert:

-SPI_Clock_frequenz hoch runter geschraubt -> Immer noch das selbe 
Problem
-Hardware 100x überprüft-> Stimmt!
-Anderes Modul probiert-> selbes Problem
-Mit Absicht eins kaputt gemacht(5V Vcc) -> ja dann geht gar nix mehr :)
-2 Dioden in Reihe -> Vcc bei ~3.6V , gleiches Problem(ja ich kauf mir 
bald       Low drop U-Regler)

Meine Fragen ?

Warum bekomme ich nur den selben Wert für alle Register?
ist der Code funktionstüchtig aus dem Tutorial, hat den schon einer 
verwendet?
Für mich sieht das so aus als würde der CSN-Pin probleme machen. Ist 
dieser nicht über den ganzen Lesebefehl über low, vergisst das Modul den 
Lesebefehl und gibt mit jedem neuen Befehl nur das Statusregister 
zurück.
Da ich nur ein Spielzeug Oszi(DSO 112) habe kann ich das kaum prüfen.

Was kann ich tun um weitere Fehlerquellen auszuschließen?

Danke im voraus!
Gast #4619154
Lesenswert?

Florian R. schrieb:
> Was kann ich tun um weitere Fehlerquellen auszuschließen?

Die Verschaltung des Moduls mit deinem Controller zeigen.

Ein Problem stellt die 3.3V Versorgung dar. Die Gretchenfrage
(neben der SPI Verschaltung des Moduls) ist die nach der Pegel-
konvertierung des MISO SIgnals von 3.3 auf 5V.

Wie hast du das gelöst? Oder läuft dein ATmega8A mit 3.3V?
Gast #4620174
Lesenswert?

Frickelfritze schrieb:
> Ein 3.3V-High muss nicht als 5V-High erkannt werden.

Meine Arduinos tun das!
Aber ein ATMega8 ist nicht dabei....

Ansonsten:
SS, also PB2 muss als Output definiert werden.
Oder, wenn Input, dann per Pullup auf High gezogen werden.

Ein Kondensator von min. 10µF an den 3,3V des Moduls ist bei meinen NRF 
zwingend nötig.

Florian R. schrieb:
> Für mich sieht das so aus als würde der CSN-Pin probleme machen. Ist
> dieser nicht über den ganzen Lesebefehl über low, vergisst das Modul den
> Lesebefehl und gibt mit jedem neuen Befehl nur das Statusregister
> zurück.
CSN muss bis zum Ende der Kommunikation Low bleiben.
OP #4620185
Lesenswert?

ja die bei mir gibts keine pegelanpassung...

also brauch ich eine wenn es 2 Vccs gibt?
Dann heißt also 5V tolerant, dass durch 5V an den SPi pins das nrf nicht 
kaputt geht, aber die SPI funktion nicht gegeben sein muss?

das hätte mir mal jemand sagen müssen.

ok...

hab nen max232n daheim ... krieg ich damit die pegelwandlung hin auf die 
schnell, oder endet das im Datanblatt studieren?
Gast #4620212
Lesenswert?

Florian R. schrieb:
> hab nen max232n daheim ... krieg ich damit die pegelwandlung hin auf die
> schnell

So garantiert nicht.

Ich will auf diesem Pegelthema nicht herumreiten, aber das ist eine
potentielle Fehlerquelle und es ist - wie schon erwähnt - so nicht
garantiert dass es funktioniert.

Eine saubere Lösung ist auf der MISO Leitung ein Gatter 74HCT125,
betrieben mit 5V, zwischenzuschalten. Das erkennt ein 3.3V-High
eindeutig richtig und gibt am Ausgang dafür 5V-High aus. Das
"T" ist das Wichtige im HCT125.
OP #4620493
Lesenswert?

ok....



also der pegel passt schon.
hab wieder das interessante Verhalten mit den lesezugriffen auf den nrf.

anscheinend macht der es probleme wenn man mehrere bytes auf einmal 
auslesen will.
Wenn ich die Werte einzeln auslese kommen unterschiedliche werte 
raus(juhu), am stück immer der selbe.

ich pack mal den code mit hier rein und ein Bild vom Terminal.
Angehängte Dateien:
Gast #4620536
Lesenswert?

1
wl_module_read_register (0, registerwerte, 21);
2
USART_PC_message("\n\nWerte am Stueck auslesen\n", itoabuffer);
3
for (uint8_t a=0; a<21; a++)
4
{
5
  USART_PC_message("RegADR", itoabuffer);
6
  USART_PC_message_with_uint_8("", itoabuffer, a, 10);
7
  USART_PC_message("\t", itoabuffer);
8
  USART_PC_message_with_uint_8("", itoabuffer, registerwerte[a], 2);
9
  USART_PC_message("\n", itoabuffer);
10
}

Vielleicht solltest du nochmal das Lesen von Datenblättern üben ....
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren