mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik I2C Bus: Spannungsteiler durch Pull-Up Widerstand?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Alex K. (alexk99123)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich arbeite derzeit an einer Aufgabe mit einem FPGA Board in Kombination 
mit einem ADC und einem DAC. Was ich derzeit einfach erreichen möchte 
ist eine 1:1 SPannungsübertragung, ich gebe also am AD - Wandler 2V rein 
und erwarte am DA Wandler ebenfalls 2V als output. Der AD Wandler 
arbeitet mit der I2c Schnittstelle. Zu diesem Zweck habe ich mir in VHDL 
einen I2C Master implementiert, um den ADC als Slave ansprechen zu 
können. Mein erstes Problem war, dass die SDA Line gar keine Daten 
ausgegeben hat, dies konnte ich mit einem externen Pullup(1k bei 1MHz 
Arbeitsfrequenz) auf Versorgungsspannung (3,3V) lösen. Die Clock Line 
habe ich nicht mit einem Pullup versehen, da diese nur vom Master als 
Output kontrolliert wird. Es wurden jetzt Daten über die SDA Line vom 
ADC ausgegeben, aber die falschen! Der Output aus dem DA Wandler war 
stets doppelt so groß, wie der Input am ADC. Ich dachte, das sein ein 
Problem mit meinem VHDL Protokoll (bitshift oder so), ich konnte aber 
verifizieren, dass hier kein Problem vorliegt. Jetzt kam ich auf den 
Trichter, mal verschiedene Spannungen in den ADC reinzugeben per Wave 
Generator. Eigentlich ist die Spannungsreferenz des AD Wandlers 3,3V, 
ich habe aber herausgefunden, dass er bei 1,65V sein Maximum ausgibt, 
also alle Bits der 12 Bit Daten sind hier = '1'. Somit muss die 
Spannungsreferenz des AD Wandlers ja bei 1,65V liegen. Jetzt habe ich 
mich gefragt: Habe ich mir durch den Pullup vielleicht irgendwie nen 
Spannungsteiler in die Schaltung gebaut? Zu diesem Zweck hab ich nen 
Schaltplan des AD Wandler Board angehängt mit von mir eingezeichnetem 
Pullup. Vielleicht könnt ihr mir weiterhelfen?

: Bearbeitet durch User
Autor: Falk B. (falk)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Alex K. schrieb:

> ich habe aber herausgefunden, dass er bei 1,65V sein Maximum ausgibt,

Falsche Referenzspannung am ADC? Es gibt auch welche, die intern per 
Konfiguration die Referenzspannung halbieren können. Oder du mißt 
differentiell bzw. Pseudo-bipolar, das können auch viele ADC per 
Konfiguration einstellen. Vermutlich stimmt deine Ansteuerung bzw. 
Konfiguration des ADC nicht.

> also alle Bits der 12 Bit Daten sind hier = '1'. Somit muss die
> Spannungsreferenz des AD Wandlers ja bei 1,65V liegen.

Eben.

> Jetzt habe ich
> mich gefragt: Habe ich mir durch den Pullup vielleicht irgendwie nen
> Spannungsteiler in die Schaltung gebaut?

Nö, denn der hängt am I2C Pin, der hat mit dem Analogteil rein gar 
nichts zu tun.

Autor: Alex K. (alexk99123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfestellung!

Ich habe mich nochmal durchs Datenblatt gewühlt und anstelle der 
standard Spannungsreferenz eine eigene gewählt, nämlich (wieder) 3,3V. 
Hierzu musste ich die Konfiguration ändern und einen Jumper anders 
setzen. Das Ergebnis ist dennoch dasselbe, nämlich Maximum bei 1,65V??!

Das verstehe ich nicht. Ich suche jetzt weiter nach einem Hinweis 
darauf, dass die Spannungsreferenz geteilt wird.

Falls jemand schon Erfahrung mit dem Bauteil hat: Ich verwende den AD2 
von Digilent, verbaut ist der ad7991.

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Habe im Datenblatt auch nichts entsprechendes gefunden.

Generell: für ein FPGA würde sich ein ADC mit SPI eigentlich einfacher 
machen (das ist letztlich ein simples Schieberegister). Aber da du I²C 
nun ohnehin schon implementiert hast, sollte das egal sein. Bei I²C 
führt man normalerweise beide Busleitungen mit Pullup aus, denn ein 
I²C-Slave darf sich durch Runterziehen der SCL-Leitung zusätzliche Zeit 
ausbitten, wenn er noch nicht bereit ist. Allerdings macht dein AD7991 
sowas nicht, insofern hier egal.

Was passiert denn, wenn du die externe Referenz auf 1,6 V reduzierst?

Autor: Alex K. (alexk99123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das mal mit einer 1,5V Referenz probiert und mit einem 
Eingangssignal von 500mV.... Hier ist irgendwie schon das Maximum 
erreicht. Bin weiter runtergegangen mit der angelegten Spannung und bei 
1,5V Referenz scheint bereits bei 100mV das Maximum erreicht zu sein. Da 
werde ich gerade echt nicht schlau draus.

Zur Info: Ich beurteile die Ausgabe des AD Wandlers, indem ich mit die 
SDA Line auf dem Oszilloskop ansehe.

Autor: Alex K. (alexk99123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nochmal einen Blick in den Schaltplan geworfen, den ich hier auch 
angehängt habe: Unten Links befindet sich ja als "IC3" gekennzeichnet 
der ADR380. Das ist eine Spannungsreferenz. Ich bin mir nicht sicher, ob 
ich das Datenblatt richtig verstehe. Liefert das Teil IMMER 2,0V, 
unabhängig von der Input Spannung (zumindest innerhalb der 
spezifizierten Spannung)?? Dann hätte ich ja als Referenz 2,0V, aber das 
erklärt immernoch nicht die 1,65V?

Autor: Falk B. (falk)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Miss doch einfach mal die Eingangsspannung am ADC und auch die 
Referenzspannung!

Autor: Alex K. (alexk99123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow. Ich fühle mich echt dämlich... Der Ausgang des Messgerätes war mit 
einem Output Load von 50Ohm eingestellt, anstelle von HiZ..... Es 
funktioniert tatsächlich alles so, wie gewollt. Sorry!

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex K. schrieb:
> Es funktioniert tatsächlich alles so, wie gewollt.

:-)

Autor: Falk B. (falk)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Alex K. schrieb:
> Wow. Ich fühle mich echt dämlich... Der Ausgang des Messgerätes war mit
> einem Output Load von 50Ohm eingestellt,

Das war wohl eher der Ausgang des Generators.

> anstelle von HiZ..... Es
> funktioniert tatsächlich alles so, wie gewollt. Sorry!

Das hätte man mit einem Oszi oder gar nur DMM sehr einfach sehr schnell 
mal nachmessen können.

"I like to measure things."

Bob Pease (RIP)

: Bearbeitet durch User
Autor: Alex K. (alexk99123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Das hätte man mit einem Oszi oder gar nur DMM sehr einfach sehr schnell
> mal nachmessen können.

Kann ich Dir nur zustimmen, habe am komplett falschen Ende gesucht...

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.

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