Hallo, nachdem ich mit dem Oszilloskop die DOUT-Leitung eines AD-Wandlers mit und ohne Pin an der Platine gemessen habe, konnte ich feststellen, dass wohl ein Pull-up Widerstand benötigt wird. "IC-Beinchen in der Luft": high = DVDD (3V3), low = GND "IC-Beinchen mit der Platine verbunden": high = < 1V, low = GND Jetzt ist die Frage nach der Dimensionierung des Widerstandes. Und: Kann man den Widerstand an einer beliebigen Stelle z.B. bei einer Wannensteckerleiste zwischen DVDD und DOUT platzieren oder wo ist es am besten? Außerdem noch die Frage warum das überhaupt notwendig ist, da es bei CLK keine Probleme gibt. CLK ist ja genauso active high wie DOUT. Gruß Alexander
Um welchen Baustein geht es denn? Mir persönlich ist noch kein Baustein untergekommen, welcher an seinen SPI-Leitungen Pull-Rs benötigt - I²C schon. Aber gut, kann natürlich sein, man kennt ja nicht alles.
Genau das gleiche habe ich auch gedacht. Warum sollte man für SPI Pull-ups benötigen? Aber scheinbar geht es nicht anders - oder der Fehler liegt woanders und ich kann ihn mir nicht erklären. Es sind AD-Wandler vom Typ AD7793 angeschlossen. Außerdem ist an dem SPI-Bus noch ein Touchscreen-Controller vom Typ ADS7843. Drückt man auf den Touchscreen sind die DOUT-Pegel korrekt. Nach dem Ansteuern der AD-Wandler kommt es aber zum o.g. Problem also IC mit Bus verbunden -> high < 1V und IC nicht verbunden direkt am IC 3V3 Pegel... Ist wohl wieder etwas für Akte-X...
Nee, dann zieht dir was anderes auf der Leitung wahrscheinlich deinen Pegel runter. Wenn du zwei Devices an einem Bus hast, dann musst du natürlich dafür sorgen, dass der eine den anderen nicht beeinflusst. Stell dir doch mal vor, du liest das LCD aus, das letzte Bit war 'low' und dies wird im Datenstrom übermittelt (ich weiß jetzt nicht, wie der Datenstrom aussieht...ich denke ja mal, das LCD hängt wegen dem Touchscreen an D_OUT)...jedenfalls war das letzte Bit 'low' und das Touchscreen geht nicht auf HIGH-IMPEDANCE, dann zieht es das HIGH vom ADC runter. Sind deine Chip Selects richtig angesteuert?
Die Chip-Select-Leitungen funktionieren wie gewünscht. Also beim Senden einer Nachricht an ein device wird auch die entsprechende CS-Leitung auf low gesetzt. Deine Erklärung kann ich nachvollziehen. Aber wie kann ich das Problem beheben? Irgendwie muss ich dem Touchscreen-Controller wohl mitteilen, dass er keinen low-Pegel am DOUT Pin legt sobald er eine Nachricht geschickt hat. Eigentlich bin ich aber davon ausgegangen, dass er das ohnehin nicht macht.
Das sollte eigentlich von selbst durch das Chip-Select passieren - der entsprechende Baustein sollte dann einen hochohmigen Eingang Aufweisen - seine Leitung also quasi "getrennt" sein vom Bus. Nur mal als Test vielleicht: Kannst du zwischen D_OUT vom ADC und dem Bus ein Multimeter schalten und einen Stromfluss messen? Wenn ja, dann liegt der Pegel irgendwo auf 'low'.
Ließ dir am besten die Datenblätter genau durch. SPI sollte normalerweise auf Tristate geschaltet sein, wenn CS bzw. SS nicht gezogen wird. Ich hatte die Tage bei einem AVR ein ähnliches Problem. Die Programmierschnittstelle wird auch in der Schaltung als SPI verwendet. So bald Strom auf der Platine ist, liegen an der SPI Pegel von einem Schieberegister an. Bei mir war die Lösung, die Schieberegister mit 10k in Serie anzubinden. Dadurch wird ein "Kurzschluss" verhindert und Programmieren hat Vorrang. Allerdings hängt bei mir im Betrieb kein Programmiergerät dran. Von dem her muss man solche Lösungen abschätzen.
Der Vollständigkeit halber: Im Datenblatt des TS-C steht DOUT -This output is high impedance when CS is HIGH. Die CS-Leitung macht auch was sie soll. Von daher also kein Problem. Das angehängte Bild zeigt die Konfiguration. Vielleicht ist daraus noch etwas zu lesen...
Funktioniert der ADC auf der Platine, wenn du den Touchscreen abgehängt ist? Beim Überfleigen des Datenblatts habe ich gesehen, dass der Dout vom ADC noch eine Zusatzfunktion hat, vielleicht macht das Probleme?
> Das Bild versteh ich garnicht :)
Das ist die ultimative ONE-WIRE-Verbindung! ;-)
Verstehe ich das richtig, da sind 3 ADCs auf dem Zusatzboard? Und der Touchscreencontroller ist auf dem uC-Board? Schon versucht ob ein einzelner ADC ohne andere Komponenten am Bus funktioniert?
In dem Bild habe ich nur den Verlauf der DOUT-Leitung dargestellt. FG schrieb: > Verstehe ich das richtig, da sind 3 ADCs auf dem Zusatzboard? Und der > Touchscreencontroller ist auf dem uC-Board? Ja. > Schon versucht ob ein einzelner ADC ohne andere Komponenten am Bus > funktioniert? Der Touchscreen funktioniert immer. Das DOUT-Signal direkt am AD-Wandler-Beinchen ist 3.3V. Wenn ich dieses auf die Platine löte ist am Bus nur noch eine Ampltitude von 0,6 V zu messen - das Signal bleibt ansonsten gleich. Um es einfach mal auszuprobieren, habe ich mal einen Pull-up-Widerstand von 100kOhm verwendet - auch damit funktioniert es nicht.
Funktionell notwendig ist ein Pullup nicht. Aber in den Bus-Pausen sind ja alle Slaves disabled und da könnte der floatende Eingang die Stromaufnahme etwas erhöhen. In den Pausen könnte man daher den internen Pullup des MC einschalten. Peter
Als einzige Fehlerquelle sehe ich momentan die Flachbandverkabelung. Im derzeitigen Testbetrieb ist der Leitungswiderstand eventuell zu hoch. Hat diesbezüglich jemand Erfahrungswerte? MOSI, CLK, CS vom µP-Board versorgt MISO vom AD-Wandler / Touchscreen Controller versorgt Wobei sich der TSC auf der µP-Platine befindet. Messung am Pin in WSL auf Platine 1: Touchscreen DOUT 3,3V Pegel AD-wandler DOUT ca. 0,6 V Pegel Kann sich das jemand erklären?
> Als einzige Fehlerquelle sehe ich momentan die Flachbandverkabelung. > Im derzeitigen Testbetrieb ist der Leitungswiderstand eventuell zu hoch. > Hat diesbezüglich jemand Erfahrungswerte? Kurschlüsse zwischen Adern und/oder schlechte Verbindungen vom Kabel zum Pin, ja, sowas kann vorkommen... Aber das sollte nach ca. spätestens 15 min. herausgefunden sein. Man kann ja einfach mal alle anderen Teilnehmer abklemmen, dann einen nach dem anderen dazunehmen... Schritt für Schritt eben... > Kann sich das jemand erklären? Nein, ich nicht. Da fehlt ein vernünftiger Schaltplan.... :-/
So, habe nochmal eine andere Kabelverbindung ausgetestet - mit gleichem Ergebnis. Im Anhang die Bilder der DIN und DOUT Leitung vom Oszlloskop. Gemessen habe ich immer an den gleichen Pins. Der Touchscreen-Controller befindet sich auf dem Evaluationsboard und ist am SPI-Master angeschlossen. Alle SPI-Leitungen sind über eine Wannensteckerleiste und Flachbandkabel mit der anderen Platine (AD-Wandler) verbunden. Drückt man den Touchscreen ist die Amplitude des MISO(DOUT) High-Pegel 3,3V schickt man eine SPI-Nachricht an einen der AD-Wandler, werden < 1 V angezeigt. Es ist mir ein Rätsel warum der Pegel von der EVB-Platine gesendet richtig ankommt und der der von der AD-Wandler-Platine gesendet wird, nicht.
Den Schaltplan von der AD-Wandler-Platine habe ich als Ultiboard-Datei. Ansonsten in welchem Format exportieren?
Da ist der Schaltplan. Habe gerade mal eine SPI-Nachricht verschickt und alle CS-Leitungen von der AD-Wandler-Platine getrennt. Also alle CS = 0, alle ADUs empfangen die Nachtricht. Da entspricht die Spannungsamplitude der dreifachen Spannung eines AD-Wandlers. Also Nachricht an einen AD-Wandler ca. 0,7 V Pegel an MISO. Nachricht an drei ADUs ca. 2,1 V Pegel an MISO.
>Touchscreen DOUT 3,3V Pegel >AD-wandler DOUT ca. 0,6 V Pegel >Kann sich das jemand erklären? Geh einfach davon aus das deine CS Steuerung nicht in Ordnung ist. Das ist die wohl sinnvollste Erklärung für das Verhalten. Irgendwie werden zwei CS Pins gleichzeitig aktiv. Dann arbeiten zwei Ausgänge aufeinander und es kommt zu solchen zu kleinen Pegeln. Das hab ich schon oft so gesehen. Reiner Softwarefehler.
>Also alle CS = 0, alle ADUs empfangen >die Nachtricht. Da haben wirs doch schon;) Es darf immer nur ein CS = 0 sein.
Es ist mir schon klar, dass nur eine CS-Leitung zur Zeit aktiv sein darf. Und genau das ist auch im Normalfall so. Die Flankenwechsel an den CS-Leitungen tritt nur dann auf, wenn ich an diese eine SPI-Nachricht schicke. Mit allen CS:=0 war nur zum testen, um mal zu sehen was passiert, und dann überlagern sich halt die Signale. Da alle gleich sind (ID-Register lesen) addieren sie sich in dem Fall auf ca. 0,7*3 = 2,1 V...
Was ich nun schonmal ausschließen kann: Der Fehler liegt nicht an der AD-Wandler-Platine, da bei getrennter MISO-Leitung zum EVB die Pegel korrekt sind. Sobald die Verbindung hergestellt wird, wird der Pegel "runtergezogen". Die CS-Leitung vom Touchscreen ist jedoch dauerhaft auf high. Von daher sollte der DOUT Pin auch in high impedance sein und somit nicht den Bus stören. Am MISO Pin des TSC ist im inaktiven Modus (TS nicht berührt) auch kein Signal. Von daher verstehe ich nicht, was den Bus stört.
Alexander D. schrieb: > Da alle gleich sind (ID-Register lesen) addieren sie sich in > dem Fall auf ca. 0,7*3 = 2,1 V... Parallel geschaltete Spannungsquellen addieren sich nicht. Seis drum.... Was mir auffällt: Hast du 2 verschiedene Massen? Am ADC ist nur die gestrichelte, am J4 nur das Dreieck. Welche wird für die Kommunikation verwendet? Wie sind die miteinander verbunden?
Neueste Info: Scheinbar liegt der Fehler an einem auf dem EVB-Board verwendeten Buffer. Dieser gibt scheinbar bei Eingang Z nicht Z aus sondern L und stört somit den Bus.
Alexander D. schrieb: > Scheinbar liegt der Fehler an einem auf dem EVB-Board verwendeten > Buffer. Offenbar war dieser Buffer bisher nie Bestandteil der Diskussion und ist auch in keiner Skizze aufgetaucht :-/ Von vorn herein klar war allerdings, dass hier ein Buskonflikt vorliegt (2 Teriber auf 1 Busleitung)... > Dieser gibt scheinbar bei Eingang Z nicht Z aus sondern L und stört > somit den Bus. Kein Puffer kann ein Z durchreichen. Wie soll der Puffer denn erkennen, dass hier ein Z vorliegt? Zum Ausgeben des Zustands Z gibt es bei Puffern immer einen extra Enable-Eingang.
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.