Absturz mit ADS1115 Lib "Adafruit_ADS1X15"

OP #7251407
Lesenswert?
• ▲
▼
Hallo!

Ich knoble seit einiger Zeit mit der Library für den ADS1115 von 
Adafuit.

Ich habe 2 Mega parallel zum testen. Die geben Debug Meldungen an einen 
3. via Serieller. Und die LED 13 blinken im Sekundentakt.

MEGA1
Ich hab ein kleines Programm und nach 9053000 Millisekunden ist Schluß.
Programm steht.
Ist bei mir auf unterschiedlichen MEGA2560 der Fall und wiederholbar. 
Das Ergebnis ist immer gleich.


MEGA2
Der 2. Mega ist das selbe Programm ohne ADS1115 Initialisierung


Nach dieser ominösen Zeit (9053 Sek) steht alles (kein Blinken, keine 
Serielle Ausgabe mehr..) beim MEGA1.
Der MEGA2 aber läuft und läuft...

Vielleicht sieht wer von euch den Fehler, ich bin da mittlerweile ohne 
Ideen.

Info:
Wenn ich die Lib von wollewald ADS1115_WE verwende, ist alles gut.
Also prinzipiell funktioniert mein Projekt, aber trotzdem wäre 
interessant, ob der Adafruit Effekt nachvollziehbar ist und warum.

Danke
Angehängte Dateien:
Gast #7251449
Lesenswert?
• ▲
▼
Zeile #136 ist Unsinn.
Du rufst alle 6sek Adafruit_ADS1X15::begin() auf; d.h. du erstellst alle 
6sek ein neues Objekt, ohne das alte jemals zu löschen; daher geht dem 
AVR irgendwann der Speicher aus und die Kiste steht;

Die Initalisierung macht man einmal in init(). Danach kann man in loop() 
die anderen Funktionen der Library nutzen.
Gast #7251453
Lesenswert?
• ▲
▼
Was mir spontan auffält:

-Den Datentyp "byte" gibt es in c/c++ nicht (wenn man von std::byte seit 
c++17 absieht) und der TO hat den auch nicht definiert.

-Wire.h wird nicht inkludiert, wenn die Adafruit lib benutzt wird.

-Gewisse Kommentare, mindestens die Webadressen am Anfang (Zeile 32/33) 
sind nicht korrekt auskommentiert.
#7251456
Lesenswert?
• ▲
▼
Wo ist denn der Unterschied der Libs?
Der ADS1115 ist recht störanfällig.
Wenn immer nur die Datenregister gelesen wird kommt irgenwann nichts 
mehr.
Er braucht dann wieder eine Adressangabe wo gelesen werden soll,
bei stärkeren Störungen sogar ein Refresh der Config Register.
Vielleicht kommt ja auch ohne Störung nach 2,5 Stunden nichts mehr?
OP #7251463
Lesenswert?
• ▲
▼
... schrieb:
> Zeile #136 ist Unsinn.
> Du rufst alle 6sek Adafruit_ADS1X15::begin() auf; d.h. du erstellst alle
> 6sek ein neues Objekt, ohne das alte jemals zu löschen; daher geht dem
> AVR irgendwann der Speicher aus und die Kiste steht;
>
> Die Initalisierung macht man einmal in init(). Danach kann man in loop()
> die anderen Funktionen der Library nutzen.

Adafruit_ADS1X15::begin()  ist in unzähligen Beispielen, um zu checken, 
ob das ADS board überhaupt da ist.
Aber könne eine Möglichkeit sein. Werde ich morgen mal rausnehmen und 
dann wieder 2,5 Stunden laufen lassen :)

104638291 schrieb:
> -Den Datentyp "byte" gibt es in c/c++ nicht (wenn man von std::byte seit
> c++17 absieht) und der TO hat den auch nicht definiert.
https://www.arduino.cc/reference/de/language/variables/data-types/byte/

> -Wire.h wird nicht inkludiert, wenn die Adafruit lib benutzt wird.
in  Adafruit_ADS1X15.h Zeile 21
#include <Arduino.h>
#include <Wire.h>

> -Gewisse Kommentare, mindestens die Webadressen am Anfang (Zeile 32/33)
> sind nicht korrekt auskommentiert.
Stimmt, ist aber über #ifdef ADS1115_LIB_Adafruit #else  draußen, 
solange nicht auf die andere LIB umgeschaltet wird, hab ich verbessert.
#7251468
Lesenswert?
• ▲
▼
Andi P. schrieb:
> ... schrieb:
>> Zeile #136 ist Unsinn.
>> Du rufst alle 6sek Adafruit_ADS1X15::begin() auf; d.h. du erstellst alle
>> 6sek ein neues Objekt, ohne das alte jemals zu löschen; daher geht dem
>> AVR irgendwann der Speicher aus und die Kiste steht;
>>
>> Die Initalisierung macht man einmal in init(). Danach kann man in loop()
>> die anderen Funktionen der Library nutzen.
>
> Adafruit_ADS1X15::begin()  ist in unzähligen Beispielen, um zu checken,
> ob das ADS board überhaupt da ist.
> Aber könne eine Möglichkeit sein. Werde ich morgen mal rausnehmen und
> dann wieder 2,5 Stunden laufen lassen :)

Da hat … Recht, jedes begin() erzeugt ein neues Wire Objekt -> 
klassischer Speicherfresser.
Gast #7251492
Lesenswert?
• ▲
▼
... schrieb:
> Zeile #136 ist Unsinn.
> Du rufst alle 6sek Adafruit_ADS1X15::begin() auf; d.h. du erstellst alle
> 6sek ein neues Objekt, ohne das alte jemals zu löschen; daher geht dem
> AVR irgendwann der Speicher aus und die Kiste steht;

Den Programmkot habe ich mir nicht angesehen, aber Dein Hinweis klingt 
schlüssig.

> Die Initalisierung macht man einmal in init().

Mir kam nie die Idee, das mehr als einmal beim Start zu machen.

Die Angabe "nach 9053000 Millisekunden ist Schluß" passt zu keinem 
üblichen Timer, da muß etwas anderes passieren.

A. H. schrieb:
Irgendwas ging mir quer, sodass ich die Adafruit verworfen habe und die 
vom Akku-Dänen benutze:
https://lygte-info.dk/project/ADS1115Library%20UK.html

> Der ADS1115 ist recht störanfällig.

Hier klemmt der ADS1115 an einem A*-ProMini. Der ADS ist im Freilauf, 
ich hole jede Sekunde den Meßwert und schreibe ihn auf eine SD-Karte. 
Das läuft gerade aktuell seit über 9 Stunden vor sich hin, ohne 
abzufliegen.

Damit würde ich dem ADS1115 keine Störanfälligkeit anlasten wollen!
OP #7253012
Lesenswert?
• ▲
▼
... schrieb:
> Zeile #136 ist Unsinn.
> Du rufst alle 6sek Adafruit_ADS1X15::begin() auf; d.h. du erstellst alle
> 6sek ein neues Objekt, ohne das alte jemals zu löschen; daher geht dem
> AVR irgendwann der Speicher aus und die Kiste steht;

Danke, das scheint es wirklich gewesen zu sein.

Interessant, das man jedoch diesen Codeteil in vielen Projekten und 
Beispielen sehen kann.

Ihr habe mir "das Leben gerettet", danke!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.