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.
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.