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 ;)
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. ;)
@ 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!
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
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. |
@ 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.
@ 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
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
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...
Ich weiß nicht wie das zustande kommt. Aber der Miso Pin spinnt einfach wenn das Sensor SPI angeschlossen ist. (Grad mit dem Oszi gemessen.)
Was soll da spinnen? Da iwrd einfach das MISO Signal von 3,3V deines Sensorboards auf 5V gewandelt.
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
@ 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?
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...
@ 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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.