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!
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?
Florian R. schrieb: > Da ich nur ein Spielzeug Oszi(DSO 112) habe kann ich das kaum prüfen. Dann investiere mal in einen kleinen Logikanalysator - würde dich keine 7€ kosten.
genau so wie auf dem bild(aus dem tutorial) atmega auf 5v nrf24l01 auf 3.3V ist die SPI vom NRF24L01 nicht 5V tolernat? Danke der Antwort
Florian R. schrieb: > ist die SPI vom NRF24L01 nicht 5V tolernat? Du hast meine Frage nicht verstanden. Frickelfritze schrieb: > Pegelkonvertierung des MISO SIgnals von 3.3 auf 5V. -------------------------^^^^----------------------- Ein 3.3V-High muss nicht als 5V-High erkannt werden.
Florian R. schrieb: > genau so wie auf dem bild(aus dem tutorial) Hast du eben nicht. Denn dort gibt es nur eine Spannung und die heisst Vcc. Bei dir gibt es aber zwei Spannungen. Klar?
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.
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?
U. F. schrieb: > Meine Arduinos tun das! Ist aber nicht garantiert, wenn sie mit 5V betrieben werden. Du kannst einen Autoreifen der bis 170km/h spezifiziert ist auch mit 200km/h fahren. Hält aber nicht garantiert.
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.
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.
Noch ne blöde Frage... hier im Forum setze ich bei diesem Beitrag unten das Häckchen "Thread beobachten", sehe diesen aber dann nicht wenn ich auf meine Beobachtungsliste gehe. Ich bekomme lediglich eine Email. Danke
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 ....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.