Hallo, Ich habe bei meinem ARDUINO UNO eine analge Porterweiterung duch einen ADS1115, diesen habe ich wie in Bild 01 angeschlossen. (Quelle: http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-ads1115-module-getting-started-tutorial/) Jedoch habe ich die beiden SCL und SDA jeweils mit einem 10 kOhm Pull-Up Wiederstand versehen. Dazu mein ARDUINO-Code: #include <Wire.h> #include <Adafruit_ADS1015.h> Adafruit_ADS1115 ads(0x48); float Voltage = 0.0; void setup(void) { Serial.begin(9600); ads.begin(); } void loop(void) { int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result adc0 = ads.readADC_SingleEnded(0); Voltage = (adc0 * 0.1875)/1000; Serial.print("AIN0: "); Serial.print(adc0); Serial.print("\tVoltage: "); Serial.println(Voltage, 7); Serial.println(); delay(1000); } Lade ich den Sketch jedoch hoch, dann "friert" der Arduino ein. Ziehe ich aber das SCL-Kabel aus dem Arduino heraus, dann beginnt er wieder zu messen, aber logischer keinen realistischen Wert. Ich vermute, dass sich ein Konflikt im Arduino bildet, sodass er praktisch überfordert ist, ist aber nur eine Vermutung
t800w schrieb: > Lade ich den Sketch jedoch hoch, dann "friert" der Arduino ein. Ziehe > ich aber das SCL-Kabel aus dem Arduino heraus, dann beginnt er wieder zu > messen, aber logischer keinen realistischen Wert. Das er wieder anfängt zu messen, ist wohl nur dem Umstand geschuldet, dass im Programm nicht als Fehler abgefangen ist, wenn der ADC nicht antwortet. Hast du die Ruhepegel auf den I2C-Leitungen überprüft? Hast du mit dem I2C-Scanner geprüft, ob dein ADC sich überhaupt auf dem I2C-Bus ansprechen läßt? http://playground.arduino.cc/Main/I2cScanner
Nimm mal bitte probeweise die beiden pullup-Widerstände weg. Der ADS1115 hat welche drauf, glaub ich.
@ Wolfgang Ich habe den Sketch von dieser Seite http://playground.arduino.cc/Main/I2cScanner getestet, dabei steht im Serial Monitor nur "Scanning...", heißt das, dass sich der ADS1115 nicht ansprechen lässt?
@ STM8-C-Anfänger macht keinen Unterschied, trotzdem dasselbe Resultat
t800w schrieb: > ... heißt das, dass sich der ADS1115 nicht ansprechen lässt? Ja. STM8-C-Anfänger schrieb: > Nimm mal bitte probeweise die beiden pullup-Widerstände weg. Wozu. Ob 10kΩ mehr oder weniger die Busleitung hoch ziehen, darf die Kommunikation bei unkritischen Leitungslängen nicht beeinflussen.
Wolfgang schrieb: > t800w schrieb: >> ... heißt das, dass sich der ADS1115 nicht ansprechen lässt? > > Ja. Wie sollte ich jetzt am besten vorgehen?
t800w schrieb: > Wie sollte ich jetzt am besten vorgehen? 1) Schaltungsaufbau nochmal überprüfen 2) Anderen Baustein mit I2C-Schnittstelle auf den Bus hängen und prüfen, ob der vom Scanner gefunden wird. Welchen Ruhepegel misst du auf SCL? 3) Sichtkontrolle/Ohmmeter am ADS1115-Modul, ob eine Lötbrücke die SCL-Leitung festhält. 4) Oszi/Logikanalysator anschließen und gucken, was auf dem Bus los ist.
Ich nehme immer ein Oszilloskop. Dann kann man schauen, was wirklich gesendet wird und wie die Pegel wirklich sind. Denn nur, wenn man die Fakten kennt, kann man den Fehler entgegen steuern. Alles andere ist nur Stochern im Nebel.
t800w schrieb: > Lade ich den Sketch jedoch hoch, dann "friert" der Arduino ein. Ziehe > ich aber das SCL-Kabel aus dem Arduino heraus, dann beginnt er wieder zu > messen, aber logischer keinen realistischen Wert. Die beiden Kabel (SDA und SCL) probeweise miteinander tauschen ?
Marc V. schrieb: > Die beiden Kabel (SDA und SCL) probeweise miteinander tauschen ? Klasse Idee. Tauscht du bei einem Netzteil auch probeweise mal Netz- und Niederspannungsseite? Leitungen richtig anschließen - und fertig.
Wolfgang schrieb: > Klasse Idee. Tauscht du bei einem Netzteil auch probeweise mal Netz- und > Niederspannungsseite? Das hat miteinander genausoviel gemeinsam wie dein IQ mit meinem. Entweder meldet sich der TO überhaupt nicht mehr oder es kommt irgendeine unplausible Erklärung warum es nicht funktioniert hat. O.00001% Möglichkeit, dass eine Post kommt in welcher TO zugibt, dass: a) SCL und SDA irgendwie miteinander oder mit GND verbunden sind. b) SCL und SDA irgendwie vertauscht sind.
:
Bearbeitet durch User
Hallo ich habe genau das gleiche Problem ich will einen Kraftsensor auslesen und habe alles genau gleich angeschlossen wie du jedoch habe ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor wie hast du das Problem gelöst?
Rudi808 schrieb: > Hallo ich habe genau das gleiche Problem ich will einen Kraftsensor > auslesen und habe alles genau gleich angeschlossen wie du jedoch habe > ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor wie hast du > das Problem gelöst? Betreibe eine systematische Fehlersuche. Betriebspannung prüfen Verbindungen zwischen uC und ADC prüfen I2C Scanner nutzen und I2C Adresse finden I2C Protokoll schrittweise testen, zuerst einfache Register lesen und schreiben
10K als Pullup ist für I2C viel zu hoch, bei 5 Volt sollten es 1k8 - 2k2 sein, bei 3.3 Volt 1k2 - 1k5. Die I2C Schnittstelle ist durch einen Strom definiert, höhere Widerstanände können funktionieren, müssen aber nicht. Bei Problemen immer mit den Oszi kontrollieren, wie die Pegel und Flanken aussehen.
bingo schrieb: > 10K als Pullup ist für I2C viel zu hoch Das hängt aber sehr von der Geschwindikeit ab. https://electronics.stackexchange.com/questions/385926/why-does-putting-resistors-between-vcc-sda-vcc-scl-in-i2c-result-in-a-square-w Die niederohmigen Widerstände sind besonders dann nötig, wenn viele Teilnehmer am Bus hängen und deshalb der Pullup die offenen Leitungen nicht mehr schnell genug "hochbekommt". Hier hat aber der Slave 10k und parallel dazu wird noch der 30k Pullup eingeschaltet und es sind nur 2 Teilnehmer am Bus, sodass das normalerweise schon funktioniert. Sonst hätten das die Burschen bei Adafruit schon angepasst, wenn sie laufend Reklamationen bekommen. > Bei Problemen immer mit den Oszi kontrollieren, wie die Pegel und > Flanken aussehen. Das Problem ist, dass viele meinen, ein Oszilloskop sei nicht nötig. Und dann quasi "bei Nacht im Nebel ohne Licht nach Gehör" fahren. Kann funktionieren, kann schief gehen. Man weiß es nicht. Rudi808 schrieb: > Hallo ich habe genau das gleiche Problem ich will einen Kraftsensor > auslesen und habe alles genau gleich angeschlossen wie du jedoch habe > ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor wie hast du > das Problem gelöst? Und das alles ohne Punkt und Komma? Wenn deine Fehlersuche ähnlich strukturiert ist, dann sehe ich schwarz. > habe alles genau gleich angeschlossen wie du jedoch habe > ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor Soso, "alles genau gleich"... > A0 auf den Kraftsensor Dir ist bewusst, was der A0 Anschluss macht? Und dass du deine Software anpassen musst, wenn du die Adresse änderst. > jedoch habe ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor Warum? Wie viele Teilnehmer hast du auf dem Bus? 1. Zeichne mal einen Schaltplan von deinem Aufbau und allen Beteiligten. 2. Zeige das fehlerhafte Programm. 3. Beschreibe das erwartete und das beobachtete Verhalten.
Lothar M. schrieb: >> A0 auf den Kraftsensor > Dir ist bewusst, was der A0 Anschluss macht? Ist es DIR bewußt? A0 ist bei dem Board ein Analogeingang . . . ;-)
bingo schrieb: > 10K als Pullup ist für I2C viel zu hoch, bei 5 Volt sollten es 1k8 - 2k2 > sein, bei 3.3 Volt 1k2 - 1k5. Die I2C Schnittstelle ist durch einen > Strom definiert ... Was erzählst du da für einen Unsinn. I2C ist keine Stromschnittstelle. Wie soll die bei einem Bus funktionieren? Die Empfangsseite wertet die Spannung aus, sonst müsste jeder Empfänger einen Shunt besitzen und Wegweiser für den Strom aufgestellt werden. Ob 10kΩ zu hoch ist, hängt von der Kapazität und der Übertragungsgeschwindigkeit ab. Philips hat in der AN10216-01 (I²C Manual) für den Pull-Up im 5V-System einen Wert von typisch 2kΩ .. 10kΩ angegeben (Slide 31 auf S.13) - und die sollten es eigentlich gewusst haben. https://www.nxp.com/docs/en/application-note/AN10216.pdf
Falk B. schrieb: > Ist es DIR bewußt? Nein, mangels Schaltplan... ;-) > A0 ist bei dem Board ein Analogeingang . . . ;-) Blöd, sowas. Ich habe mich von dem "Schaltplan" ganz oben täuschen lassen und war der Meinung, das wäre dank des festen 3V3 Pegels ein Adresseingang auf '1'.
Für die mentale Stärke, einen Irrtum eingestehen zu können, hast du glatt eine "lesenswert" von mir bekommen. Eigentlich sollte das nicht erwähnenswert sein! ... aber in diesem Forum ist einiges "anders"...
Wolfgang schrieb: > I2C ist keine Stromschnittstelle Naja, die I2C-Spezifikation https://www.i2c-bus.org/specification/ spricht z.B. unter 3.1.1 ausdrücklich von einer Current-Source oder einen Widerstand für die Verbindung zur positiven Versorgungsspannung. Ist der Widerstand zu gross, ist der Strom zu klein und die Pegel sind zu niedrig, die Flanken zu flach, besonders bei mehreren Teilnehmern. Ich schrieb ja oben, dass es funktionieren kann, aber mit niedrigeren Widerständen ist man auf der sicheren Seite, siehe https://www.i2c-bus.org/i2c-primer/termination-versus-capacitance/. Die Widerstände dürfen natürlich auch nicht zu niedrig sein, sonst wird der low-Level nicht erkannt, da gibt es in der o.g. Spezifikation unter 7.1 die Fig.42. Nochmal: bei Problemen Oszi!
Lothar M. schrieb: > Und das alles ohne Punkt und Komma? Wenn deine Fehlersuche ähnlich > strukturiert ist, dann sehe ich schwarz. Das muß heutzutage so, nicht selbst nachdenken, sondern ins Internet posten :-( Und warum sich Mühe beim Schreiben geben, es finden sich doch immer Dödel, die trotzdem antworten. >> habe alles genau gleich angeschlossen wie du jedoch habe >> ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor > Soso, "alles genau gleich"... Na ja, der ADS1115 ist eigentlich recht simpel in Betrieb zu bekommen, es gibt viele Beispielsketche. >> A0 auf den Kraftsensor > Dir ist bewusst, was der A0 Anschluss macht? > Und dass du deine Software anpassen musst, wenn du die Adresse änderst. Hier hast Du etwas mißverstanden, bei dem Ding heißen die die Analogeingänge A0..A3. Die I2C Adresse zu ändern geht anders, ADDR-Pin mit SDA, SCL, GND oder VDD verbinden. >> jedoch habe ich A3 des 1115 auf VCC gelegt und A0 auf den Kraftsensor > Warum? Wie viele Teilnehmer hast du auf dem Bus? Siehe oben, aber auch da muß die Software natürlich den Stein passend initialisieren, Single oder Differenz - Datenblatt! Sehr gut gefällt mir die Beschreibung von lygte incl. seiner Library und Beispiele, das ist fast schon Kindersicher und ging hier klaglos in Betrieb: https://lygte-info.dk/project/ADS1115Library%20UK.html
bingo schrieb: > Ist der Widerstand zu gross, ist der Strom zu klein und die Pegel sind > zu niedrig ... Mit welchem Eingangsstrom rechnest du denn bei den Empfängern. Heutzutage sind das gewöhnlich CMOS-Eingänge, i.e. bis auf die Leckströme von irgendwelchen Eingangsschutzdioden fließt da gar kein (statischer) Strom. Statisch wirkt sich die Höhe des Stromes eher auf die Störsicherheit aus. Die Entscheidung Pull-Up vs. Widerstand wirkt sich auf die Umladeflanken der Kabel-/Eingangskapazitäten aus und resultiert in (1-e^-t/tau) oder linearem Verlauf. Deswegen ist das noch lange keiner Stromschnittstelle.
Wolfgang schrieb: > Mit welchem Eingangsstrom rechnest du denn bei den Empfängern. Laut I2C-Spezifikation 2014: 'The supply voltage limits the minimum value of resistor Rp due to the specified minimum sink current of 3 mA for Standard-mode and Fast-mode, or 20 mA for Fast-mode Plus.'
bingo schrieb: > Wolfgang schrieb: >> Mit welchem Eingangsstrom rechnest du denn bei den Empfängern. > > Laut I2C-Spezifikation 2014: > > 'The supply voltage limits the minimum value of resistor Rp due to the > specified minimum sink current of 3 mA for Standard-mode and Fast-mode, > or 20 mA for Fast-mode Plus.' In der Spezifikation 2000 war noch von 3-12 mA die Rede.
Lest Euch mal Wikipedia durch: 'Er wird hauptsächlich geräteintern für die Kommunikation zwischen verschiedenen Schaltungsteilen benutzt, z. B. zwischen einem Controller und Peripherie-ICs. Das ursprüngliche System wurde von Philips in den frühen 1980er Jahren entwickelt, um verschiedene Chips in Fernsehgeräten einfach steuern zu können.' Da war noch keine Rede von mobilen Geräten und die hohen Ströme dienten einfach einer verbesserten Störunempfindlichkeit. Und das Erbe schleppt der I2C-Bus mit sich herum, heute würde man das anders machen.
Mach doch mal bitte ein Foto von deinem Aufbau. Hier scheint niemand eine funktionierende Glaskugel zu besitzen.
bingo schrieb: > Wolfgang schrieb: >> Mit welchem Eingangsstrom rechnest du denn bei den Empfängern. > > Laut I2C-Spezifikation 2014: > > 'The supply voltage limits the minimum value of resistor Rp due to the > specified minimum sink current ... Das ist der Strom, den der jeweils aktive Sender mit seinem Open-Drain nach Gnd aufnehmen soll. Mit den Empfängern hat diese Angabe überhaupt nichts zu tun.
Wolfgang schrieb: > Das ist der Strom, den der jeweils aktive Sender mit seinem Open-Drain > nach Gnd aufnehmen soll. Mit den Empfängern hat diese Angabe überhaupt > nichts zu tun. Was ist denn das für ein Schwachsinns-Aussage, ist Dir denn klar, dass Master und Slave über SCK und SDA verbunden sind und die Pullups an SCK und SDA dran sind?
bingo schrieb: > ... dass Master und Slave über SCK und SDA verbunden sind und die > Pullups an SCK und SDA dran sind? Der aktive Sender ist derjenige, der die Leitung ggf. runter zieht, der Empfänger ist derjenige, der sich den Pegel auf der Leitung anguckt. So schwierig ist das doch nicht.
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.