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
@ 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?
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.
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.
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.
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.