Forum: Mikrocontroller und Digitale Elektronik [I²C] A/D-Wandler stört Temperatursensor. Aber warum?


von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Mahlzeit!

Ich experimentiere derzeit mit dem I²C-Bus und habe mir eine Platine 
gebastelt, auf der 5 verscheidene I²C-Bausteine zeigen sollen was sie 
können.

Ich kann jeden Baustein nach Bedarf auf SDA/SCL jumpern.

Im Sortiment befinden sich u.A. der 12bit A/D-Wandler ADC121C027
http://www.national.com/ds/AD/ADC121C021.pdf
und der Temperatur-Sensor LM75.
http://www.national.com/ds/LM/LM75A.pdf

Im Prinzip funktioniert die Kommunikation mit allen Steinen sehr gut, 
nur sobald ich den A/D-Wandler auf den Bus schalte sendet der LM75 nur 
noch 0.
Alle anderen Steine funktionieren wie gehabt. Auch der ADC121C027.

Woran kann das liegen?

Ich habe gelesen, dass der LM75 angeblich sein eigenes Ding drehen soll, 
wenn es um den I²C-Bus geht, kann das aus dem Datenblatt aber nicht 
nachvollziehen... ?

Die Adressen sollten sich auch nicht in die Quere kommen (ADC hat die 
162 und der LM75 die 144) und Kurzschlüsse oder Falschverdrahtungen habe 
ich schon x mal kontrolliert, das passt alles.

Ich hatte die Befürchtung, dass die Bus-Kapazität vielleicht mit allen 5 
Slaves zu groß wird und habe die Pullup-Widerstände von 10k auf 1k 
verkleinert.

Fazit ist, dass ich mit 1k natürlich eine steilere Flanke auf dem Ossi 
sehe, sich an meinem Problem aber nichts ändert.

Alles geht, aber sobald der ADC121C027 auf dem Bus liegt sendet der LM75 
eine NULL... also nichts, scheint die Übertragung aber noch zu 
quittieren.

Ein Screenshot der Messung im Anhang.

Wäre schön,. wenn jemand eine Idee für mich hätte.
I²C ist leider (noch?) nicht so mein Gebiet.


Viele Grüße, Holger.

von Markus R. (maggus)


Lesenswert?

n Abend Holger.

Hast du schon mal geschaut, welches IC den Bus auf Masse zieht, sodass 
NULL herauskommt? Der LM75 oder der ADC?
Was sagt der ADC, wenn du die Adresse 144 auf den Bus schickst (LM75 
hängt nicht am Bus)? (Laut Datenblatt dürfte der ADC ja garnichts 
antworten...)
Evtl auch mal andere Adresse für den LM75 testen, lässt sich über A0-A2 
ja programmieren.
So wie ich das verstanden habe, funktioniert der LM75 mit allen anderen 
Busteilnehmern außer dem ADC.
Sind alle ICs gut abgeblockt oder weist die Versorgungsspannung 
Einbrüche während der Kommunikation auf?

Gruß, Markus

von Holger (Gast)


Lesenswert?

Hallo Markus!

Danke für die rasche Antwort, nur wie das Leben so spielt komme ich die 
Tage leider nicht mehr zum Basteln :-/

Die 5V-Versorgungs-Referenz-Signalspannung kommt aus einem 90W 
Computer-Netzteil. ganz sauber ist sie nicht, aber wirkliche Einbrüche 
konnte ich bislang nicht erkennen.

Die ICs habe ich laut zuerst gar nicht, dann laut Datenblatt mit einem 
100nF Folien und einem 4,7µF Tantal-Kondensator geblockt und zu guter 
Letzt zur Sicherheit noch einen 4,7µF Elko parallel geschaltet.

Also hängen derzeit ~9,5µF parallel zur Versorgung in umittelbarer Nähe 
der ICs. All die Kondensatoren haben am Signalverlauf allerdings nichts 
für mich erkennbares geändert. Die Versorgungsspannung macht allerdings 
einen etwas ruhigeren Eindruck.

Ich komme über's Wochenende wahrscheinlich nicht mehr zum Messen, 
allerdings glaube ich mich zu erinnern, dass der ADC die 144 ignoriert, 
genau wie alle anderen ICs das tun.

Genaueres dazu kann ich aber erst nächste Woche sagen.

P.S.: Ja, das verstehst du richtig: Der LM75 funktioniert, wenn alle ICs 
außer dem ADC auf dem BUS liegen, wenn der ADC mit auf dem BUS liegt 
funktionieren alle, aber der LM75 sendet eine NULL anstatt der aktuellen 
Temperatur.


Schönes Wochenende,

Holger

von Peter D. (peda)


Lesenswert?

Schalte mal einen Widerstand (100 Ohm) in Reihe zum SDA des ADC.
Wenn dann der LM high senden will, aber der ADC low, siehst Du eine 
kleine Stufe (0,1V) auf dem Oszi.

Das heißt dann, der ADC fühlt sich adressiert und sendet auch was.


Peter

von Holger (Gast)


Lesenswert?

Ach wie blöd.

Ich habe mich halb ins Delirium gemessen, nur um beim letzten 
Verzweifelten Blick ins Datenblatt zu merken, dass der DAC121C081 die 
144 als "Broadcast Adresse" verwendet.

Da muss ich mir für den LM75 wohl einen neuen Code ausdenken... schade 
eigentlich, weil es bis dato so schön gepasst hat alle Address-Pins 
einfach auf Masse zu ziehen :(

Euch jedenfalls vielen Dank für die Tipps!
Ich werde sie bestimmt an anderer Stelle noch mal gebrauchen können!

Viele Grüße,

Holger

von Gerald *. (pyromane)


Lesenswert?

Sollte sich die Broadcast Adresse nicht deaktivieren lassen, wäre evtl 
ein I2C Hub interessant für dich.

Als Bsp: www.nxp.com/pip/PCA9516.html

von Holger (Gast)


Lesenswert?

Hallo noch mal!

Ich habe den A/D-Wandler mit Broadcast-Adresse zu den Akten gelegt und 
an sich bin ich mit der I²C-Geschichte ganz zufrieden, wenn da nicht 
Horter&Kalb wäre.

Ich habe mir diese Schaltung:
http://www.horter.de/i2c/i2c-pc-seriell/pcseriell_1.html
nach gebaut, um mit dem PC über RS232 mit Delphi Daten über den BUS zu 
schicken.

Beim genauen nachmessen erkennt man nun aber, dass die Slew-Rate des 
Signals eher zu Wünschen übrig lässt.

Ein Bit braucht etwas über 3µs um auf 5V zu steigen, wenn mich nicht 
alles täuscht würde daraus eine eine BUS-Grenzfrequenz von 1/6µs=166kHz 
resultieren.

Selbst bei Standard I²C mit 100kHz wird mir da ein bisschen mulmig.
Ganz zu schweigen davon, dass ich dachte ich könnte den BUS auch 
irgendwann mal auf 3,4MHz hoch jagen... ob das Sinn macht sei vorerst 
dahingestellt.

Die Frage ist:
Kann ich über RS232 überhaupt solche Geschwindigkeiten erreichen?
All die Schaltungen die ich gefunden habe nutzen ein Derivat des MAX232 
Pegelwandlers und alle anderen schwören auf eine I²C-Realisierung mit 
einem dem ATTiny.

ATTiny wäre komplettes Neuland, RS232 ist mehr oder weniger Grauzone.
Was wäre nun der effektivste Weg einen 3,4MHz I²C-Bus zu basteln?

Kennt ihr gute Alternativen zwischen MAX232 und ATTiny?
Die Betonung liegt auf "gute" ;o)

P.S.: Ich glaube ich habe kHz und kbit ein wenig durcheinandergewürfelt, 
lasse das zu meiner eigenen Schande jetzt aber mal so da stehen.

Viele Grüße,

Holger

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.