Forum: Mikrocontroller und Digitale Elektronik NRF24L01 fühlt sich durch Schaltung gestört (sendet langsam))


von Dont K. (dont_k)



Lesenswert?

Hallo!

(Kurzfassung steht am Ende)

Grundsätzlich besteht die ganze Schaltung aus:

- Arduino (Eigenbau meiner Uni mit integriertem NRF24L01 über SPI)
- 2xADNS9500 (ebenfalls SPI)

Damit will ich die Bewegungswerte der ADNS Sensoren auslesen und mit dem 
NRF24L01 übertragen.

Auf der Platine befinden sich noch ein haufen Kondensatoren (wie im 
Datenblatt des ADNS 9500 beschrieben) und 2 Levelshifter weil das 
Arduino für das SPI eine andere Spannung verwendet wie die ADNS 9500 (5V 
vs max 3.3V). (Ahja 2 mosfets für die Laser gibts auch noch)

Das ganze sieht so aus:
20150511_120726_k.jpg

Das heißt am SPI hängen 3 verschiedene Devices. Einmal der NRF24L01 und 
2 mal ein ADNS 9500. Ich habe also insgesamt 6 SPI Leitungen (3x ncs 
,mosi, miso, sclk). Das hat auch gut funktioniert - bis zum letzten 
"redesign". Ich wollte das ganze kompakter bauen und dabei die 
Steckverbindungen reduzieren. Außerdem habe ich eien groben Fehler 
behoben, bei dem ich die ADNS mit der falschen Spannung versorgt habe 
(3.3V VDDIO und 5V VDD vertauscht...). Es wundert mich eh, dass die 
Chips das überlebt haben...

Nach diesem Redesign haben aber die Funkprobleme begonnen. Und zwar 
braucht der NRF jetzt zum senden viel länger als vorher: 150-800 ms. Das 
ist definitiv viel zu lange. Das Problem besteht aber nur wenn die SPI 
Kabel zu den ADNS 9500 Chips angesteckt sind.

Im ersten Moment war ich richtig verwirrt, da ich von der Schaltung her 
nichts geändert habe, außer die Spannungen für die ADNS 9500 richtig zu 
tauschen.

Dann ist mir aufgefallen, dass der Funk funktioniert wenn sich etwas 
Leitendes in der Nähe einer bestimmen Stelle der Schaltung befindet - 
nämlich über dem Low to High Levelshifter für die MISO Leitung der ADNS 
9500 Chips. Zu erst habe ich es mit einem großen Stück Anti Statik Folie 
versucht. Der Funk hat zwar funktioniert, aber nur wenn gleichzeitig der 
USB Stecker zum debuggen angesteckt war. Außerdem musste das Folienstück 
ziemlich groß sein.

Nach etwas ausprobieren ist mir aufgefallen, dass das Funkproblem 
behoben ist, wenn ich entweder den A oder den OE Pin des Low to High 
Levelshifters mit einem Kabel berühre das ich in der Hand halte 
(allerdings an der Isolierung). Das hilft auch ohne USB Verbindung.
An den markierten Stellen:
20150511_120641_m_k.jpg

Hier das Datenblatt für den Levelshifter:
http://www.alldatasheet.com/datasheet-pdf/pdf/467614/TI1/SN74AHCT1G125-Q1.html

Den OE Pin des Levelshifters habe ich bis jetzt mit nichts verbunden da 
ich mir nicht sicher war wofür der gut ist. Im Datenblatt steht dazu 
folgendes:

"The SN74AHCT1G125 is a single bus buffer gate/line driver with 3-state 
output. The output is disabled when
the output-enable (OE) input is high. When OE is low, true data is 
passed from the A input to the Y output.
To ensure the high-impedance state during power up or power down, OE 
should be tied to VCC through a pullup
resistor; the minimum value of the resistor is determined by the 
current-sinking capability of the driver."

Kann das etwas mit dem Funkproblem zu tun haben? Wenn ja warum?

Wenn OE nicht angeschlossen ist müsste es ja standardmäßig LOW sein und 
funktionieren. Abgesehen davon haben ja nicht die ADNS, für die der 
levelshifter eigentlich da ist, das Problem sondern der NRF Funkchip der 
leider am gleichen SPI Bus hängt.

Meine alte Version vor dem Redesign hat so ausgesehen:
20150511_120659_k.jpg
Da sitzen die Levelshifter zu Testzwecken noch auf einer eigenen 
Platine. Da mit der Konstruktion trotz der falschen Spannung für die 
Chips selber (die Spannung für die Levelshifter hat schon gestimmt), 
alles funktioniert hat, habe ich dem OE Pin auch keine weitere 
Aufmerksamkeit geschenkt.

Kurzfassung:
Warum sendet der NRF24L01 nur dann brauchbar schnell, wenn ich den OE 
oder A Pin des MISO Levelshifters für die ADNS 9500 mit einem Kabel 
berühre? Was würde passieren wenn ich den OE Pin einfach an GND anlöte. 
Und wofür brauche ich den überhaupt?

Einen Schaltplan habe ich auch noch:
adns9500schaltplan_levelshifter.png

Ahja: Ich bin eigentlich kein Elektrotechniker. Also entschuldige ich 
mich schon im Vorraus wenn das eine sehr simple Frage ist ;)

von Gecko (Gast)


Lesenswert?

Schon mal das Datenblatt deines Levelshifters gelesen?

Gleich der zweite Satz sagt, was der PIN OE macht und dieser gehört 
zwigend auf GND gelegt. ;)

von Falk B. (falk)


Lesenswert?

@ Dont K. (dont_k)

>(Kurzfassung steht am Ende)

Die Schaltung kommt mir bekannt vor ;-)

Uuups. Was sehe ich da. Im "Schaltplan" ist das OE Pin am Pegelwandler 
offen (es fehlen die Namen der ICs!)
Das darf nicht sein! Das MUSS auf GND liegen!

>ist definitiv viel zu lange. Das Problem besteht aber nur wenn die SPI
>Kabel zu den ADNS 9500 Chips angesteckt sind.

Du hast mal wieder Kontakt- und Pegelprobleme ;-)

>Leitendes in der Nähe einer bestimmen Stelle der Schaltung befindet -
>nämlich über dem Low to High Levelshifter für die MISO Leitung der ADNS
>9500 Chips.

Klares Zeichen für einen offenen Eingang!

>behoben ist, wenn ich entweder den A oder den OE Pin des Low to High
>Levelshifters mit einem Kabel berühre das ich in der Hand halte

OFFENER EINGANG!

-> gehe direkt ins Gefängnis und ziehe keine 4000 Euro ein!

von Dont K. (dont_k)


Lesenswert?

Gefängnis haha XD

Ja danke euch beiden. Hab sowas befürchtet. Aber etwas wundert mich 
doch:

Im Datenblatt steht, dass der OE Pin mit einem passenden (wären 30k ok?) 
pull up Widerstand an VCC gehört. In Meinem Fall wäre das der VCC Pin 
(also 5V VDD) vom Levelshifter oder? Warum soll ich dann den OE Pin an 
GND legen? Oder macht das in dem Fall keinen Unterschied?

> es fehlen die Namen der ICs!
Inwiefern? Die Typbezeichnung steht dabei. Oder meinst du sowas wie 
"Miso LevelShifter"

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dont K. schrieb:
> Im Datenblatt steht, dass der OE Pin mit einem passenden (wären 30k ok?)
> pull up Widerstand an VCC gehört.
In welchem Datenblatt?
Im http://www.ti.com/lit/ds/symlink/sn74ahct1g125.pdf steht
1
The output is disabled when the output-enable (OE) input is high.

von Falk B. (falk)


Lesenswert?

@ Dont K. (dont_k)

>Ja danke euch beiden. Hab sowas befürchtet. Aber etwas wundert mich
>doch:

>Im Datenblatt steht, dass der OE Pin mit einem passenden (wären 30k ok?)
>pull up Widerstand an VCC gehört.

Genauer. Er gehört an dein Chip Select deines SPI-Slaves. Denn dieser 
soll eigentlich nur aktiv werden, wenn dieser angesprochen wird.
In deinem SPEZIELLEN Fall hast du aber 3 SPI-Slaves, müsstest streng 
genommen einen UND-Verknüpfung der drei Chip Select machen.

Lange Rede, kurzer Sinn. Leg den Pin fest auf GND! Dann ist der Treiber 
dauerhaft aktiv. Wenn keine weiteren SPI-ICs auf der 5V Seite 
dranhängen, ist das OK.

> In Meinem Fall wäre das der VCC Pin
>(also 5V VDD) vom Levelshifter oder? Warum soll ich dann den OE Pin an
>GND legen? Oder macht das in dem Fall keinen Unterschied?

Datenblatt gelesen?

OE = HIGH = Treiberausgang inaktiv (tristate)
OE = LOW = Treiberausgang aktiv (Push Pull)

Ausgangsstufen Logik-ICs

>> es fehlen die Namen der ICs!

>Inwiefern? Die Typbezeichnung steht dabei.

Das ist der WERT! Es fehlen die Namen (R1, R2, R3, U1, U2, U3 etc.)

> Oder meinst du sowas wie "Miso LevelShifter"

Wir sind hier nicht bei den Germanisten sondern im technischen Bereich. 
Da will man lieber kurze, einfache Namen und keinen Majestätstitel für 
Bauteile.

von Dont K. (dont_k)


Lesenswert?

@ miller:

in meinem ersten posting steht ein zitat aus dem datenblatt und ein link 
darunter.
der hier geht auch:
http://www.ti.com[PUNKT]cn/cn/lit/ds/symlink/sn74ahct1g125-q1.pdf

der will meinen link so nicht... einfach [PUNKT] durch einen punkt 
ersetzen.

@ Falk:
Thx. Derzeit gibts nur die 3 SPI Devices und ich werde OE einfach an GND 
löten.

Ich hab das Datenblatt schon gelesen. Aber da steht eben auch drinnen, 
dass OE mit einem Widerstand an VCC gehört (und nicht an NCS wovon man 
ja generell nicht ausgehen kann, dass es den pin überhaupt gibt). Das 
der Low sein sollte steht im Satz drüber. Allerdings habe ich 
fälschlicherweise angenommen, dass ein nicht angeschlossener Pin Low 
ist. Das stimmt aber nicht ^^

'Just because you have nothing at all connected to an input pin doesn't 
mean it is a logical zero.'

http://playground.arduino.cc/CommonTopics/PullUpDownResistor

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dont K. schrieb:
> der will meinen link so nicht...
Die Forensoftware mag keine Links nach China (=Spam). Das ist hier im 
Fall auch nicht nötig.

Dont K. schrieb:
> Allerdings habe ich fälschlicherweise angenommen, dass ein nicht
> angeschlossener Pin Low ist. Das stimmt aber nicht ^^
Wenn schon TTL-Relikt, dann wäre ein nicht angeschlossener Pin "high". 
Aber TTL ist schon lange von CMOS abgelöst worden...

Dont K. schrieb:
> Ich hab das Datenblatt schon gelesen. Aber da steht eben auch drinnen,
> dass OE mit einem Widerstand an VCC gehört
Du interpretierst das Datenblatt aber sehr frei. Gleich auf Seite 1 
steht da in dem von dir verlinkten DB:
1
When OE is low, true data is passed from the A input to the Y output.
2
3
To ensure the high-impedance state during power up or power down, 
4
OE should be tied to VCC through a pullup resistor
Und auch die "function table" auf dieser Seite spricht klare Worte...

: Bearbeitet durch Moderator
von Dont K. (dont_k)


Lesenswert?

So jetzt habe ich den OE Pin and GND gelegt.
Es passiert etwas ganz absurdes:

Das Senden wird schneller wenn ich die Hand auf das Ding zubewege und 
wenn ich zu nahe komme/den Levelshifter berühre sendet es garnicht mehr.

Was aber noch eigenartiger ist: Ich hab im Code die SPI Kommunikation 
mit den Sensoren komplett gekillt (Bis auf das Setup). Also sende jetzt 
nur noch fixe Werte. Was passiert? Es wird GARNICHTS mehr gesendet. (Nur 
einmal am Anfang kurz nach dem Setup). Das Senden funktioniert also nur 
wenn SPI Kommunikation mit den Sensoren stattfindet (Oder die Sensoren 
vom SPI komplett getrennt sind). Irgendwas hats da...

von Falk B. (falk)


Lesenswert?

Cäptn Chaos . . .

von Dont K. (dont_k)


Lesenswert?

Ich weiß nicht wie das zustande kommt. Aber der Miso Pin spinnt einfach 
wenn das Sensor SPI angeschlossen ist. (Grad mit dem Oszi gemessen.)

von Falk B. (falk)


Lesenswert?

Was soll da spinnen? Da iwrd einfach das MISO Signal von 3,3V deines 
Sensorboards auf 5V gewandelt.

von Dont K. (dont_k)


Lesenswert?

Nein ich habe gemeint, dass das Miso Signal kein normales Rechteck 
Signal ist sondern irgendwie überlagert aussieht. Jetzt habe ich das 
getestet. Und Der Miso Pin ist immer High auf der Arduino Seite. NICHT 
aber auf der ADNS Seite. Das heißt der Levelshifter zieht den MISO Pin 
auf Arduino Seite (Y) konstant auf 5V obwohl der auf ADNS Seite (A) 
eigentlich Low ist.

EDIT: Das Problem scheint wirklich der Levelshifter zu sein.
Wenn ich Miso direkt vom Chip nehme und nicht erst vom Levelshifter 
scheint es bis jetzt zu funktionieren. Ist halt etwas blöd weil die 
Spannung eigentlich zu niedrig sein sollte.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Dont K. (dont_k)

>Nein ich habe gemeint, dass das Miso Signal kein normales Rechteck
>Signal ist sondern irgendwie überlagert aussieht.

Screenshot?

>Jetzt habe ich das
>getestet. Und Der Miso Pin ist immer High auf der Arduino Seite.

Hast du OE vielleicht aus Versehen auf HIGH gelegt anstatt auf LOW?
Kurzschluss?

von Dont K. (dont_k)


Lesenswert?

Hab leider keinen Screenshot, weil ich nicht in der Nähe vom Oszi bin. 
Aber es sieht so aus als wäre die Spannung durchschnittlich bei ~5V und 
dort gibts leichte Rechteckvariationen im Bereich von +/- ~0,3V. Aber 
komplett unregelmäßig und überlagert. Deswegen siehts am Oszi ziemlich 
seltsam aus und ist auch schwer zu erkennen.

Dürfte wie gesagt davon kommen, dass der Y Pin durchgehende High ist 
obwohl A Low ist. Nein ich habe OE nicht in irgendeiner Form an High 
sondern an GND angeschlossen. (Irgendwelche Pullup Widerstände habe ich 
nicht verwendet.) Ich kann mir echt nicht erklären warum der 
Levelshifter sich so verhält.

Als russische Lösung habe ich den Arduino Miso Pin direkt mit A/dem ADNS 
miso Pin verbunden. Fürs Erste scheint es trotz der theoretisch zu 
niedrigen Spannung zu funktionieren. Aber wer weiß was für weitere 
Probleme später dadurch auftauchen...

von Falk B. (falk)


Lesenswert?

@ Dont K. (dont_k)

>miso Pin verbunden. Fürs Erste scheint es trotz der theoretisch zu
>niedrigen Spannung zu funktionieren. Aber wer weiß was für weitere
>Probleme später dadurch auftauchen...

Mensch, gerade WEIL du diese Probleme hattest, hast du die 
Pegelwandler ergänzt? Schon vergessen?

Beitrag "Re: SPI Problem aufgrund von Spannungsversorgung (Arduino Uno & opt. Sensor))"

Mach es RICHIG! Suche, finde und behebe den Fehler!

von Dont K. (dont_k)


Lesenswert?

Naja hoffentlich finde ich den Fehler noch. Im Moment bin ich aber 
leicht planlos ^^

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.