www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pull up Widerstand an MISO


Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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'.

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alexander D. (lieberarm9alsarmab)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: FG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Bild versteh ich garnicht :)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Bild versteh ich garnicht :)
Das ist die ultimative ONE-WIRE-Verbindung!  ;-)

Autor: FG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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....  :-/

Autor: Alexander D. (lieberarm9alsarmab)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan?

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Schaltplan von der AD-Wandler-Platine habe ich als Ultiboard-Datei. 
Ansonsten in welchem Format exportieren?

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.png

Autor: Alexander D. (lieberarm9alsarmab)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also alle CS = 0, alle ADUs empfangen
>die Nachtricht.

Da haben wirs doch schon;) Es darf immer nur ein CS = 0 sein.

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alexander D. (lieberarm9alsarmab)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.