Kann sich das einer erklären?

Ich hatte meine Schaltung auf de Steckbrett mit Uno aufgebaut und die Sensorwerte wurden perfekt gelesen.

Nachdem ich alles auf Lochraster verdrahtet hatte, hatte ich immer nach dem ersten Auslesen der Kalibration andere Werte und hatte deswegen hier schonmal gefragt, wweil ich dachte es gäbe an den Boards vielleicht unterschiede die ich nicht kenne.

Jetzt hab ich mal mein Programm 3h lang zeile für Zeile ausgedünnt und hochgeladen.
Rausgestellt hat sich:
Erst wird ein normaler Wert gemessen, nachdem die Sensor-Bereit LEDs an gehen plötzlich ein sehr hoher und danach obwohl sie an bleiben ein zu niedriger egal was die LED's später noch so machen (an/aus).

Mittlerweile vermute ich der ProMini ist defekt, denn wenn die Schaltung einen Kurzschluss hätte würde sich ja beim Abschalten der LEDs der Wert eigentlich wieder ändern.

Ausgabe im Serialmonitor siehe Bild im Anhang.

const int Sens[2] = {A3, A1};                    // Sensor Pins definieren
const int SensLED[2] = {7, 8};

void setup() {
  Serial.begin(115200);

  pinMode(Sens[0], INPUT);
  pinMode(Sens[1], INPUT);
  pinMode(SensLED[0], OUTPUT);
  pinMode(SensLED[1], OUTPUT);
}

void loop() {

// Vorher wird ein normaler Wert gemessen, nachdem die LEDs an gehen ein sehr hoher und danach ein zu niedriger egal was die LED's noch machen.

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("*** LED AN ***");
  LedAn(0);
  LedAn(1);

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("--- analogRead ---");
  Serial.print("Sens 0: ");
  Serial.print(analogRead(Sens[0]));
  Serial.print(" Sens 1: ");
  Serial.println(analogRead(Sens[1]));
  Serial.println();
  Serial.println();
  delay(1000);

  Serial.println("*** LED AUS ***");
  LedAus(0);
  LedAus(1);

}

int LedAn(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}

int LedAus(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}

Ich würde die Versorgungsspannung(en) prüfen, am besten gleich mit einem Scope.

Möglicherweise kommen auch die (unbekannten) Sensoren aus dem Tritt...

Mantra:
Verwende die interne/externe Referenz, wenn absolute Messungen gemacht werden wollen.
Verwende Vcc als Referenz, wenn ratiometrische Messungen gemacht werden wollen.

Und das hier, ist ja irgendwie auch ein Witz:

LedAn(0);
LedAn(1);
LedAus(0);
LedAus(1);

-----
int LedAn(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}

int LedAus(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}

Den du hier mit uns treibst, oder?

combie:
Mantra:
Verwende die interne/externe Referenz, wenn absolute Messungen gemacht werden wollen.
Verwende Vcc als Referenz, wenn ratiometrische Messungen gemacht werden wollen.

Und das hier, ist ja irgendwie auch ein Witz:

LedAn(0);

LedAn(1);
LedAus(0);
LedAus(1);


int LedAn(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}

int LedAus(int SensorNr) {
  digitalWrite(SensLED[SensorNr], 1);
}



Den du hier mit uns treibst, oder?

Hasi ich hab gestern Nacht 4-5h lang das riesige Programm zerpflückt und hochgeladen bis die entscheidenden Zeilen übrig waren. Dann das restliche so umbenannt, dass das Ganze erhalten bleibt und klarere Namen hat, weil Du meintest wenn soll ich was posten was man sofort kompilieren kann.

Jetzt mache ich das obwohl es nachts um 4 war und ich todmüde war und es ist auch wieder verkehrt.
Gibts denn irgendwas wo es keinen Grund zum meckern gibt?

Und an der Eingangsspannung kann es nicht liegen wenn ich 2 LEDs a 10mA aktiviere, da sonst nichts gleichzeitig dran ist was aktiv ist (doch die PowerLED).
Werde das Ding mal auslöten und sockel rein und es mit nem neuen testen. Das Problem hatte ich ja seit Beginn und hab mir den Arsch wund gesucht im Programm und mittlerweile 3 verschiedene Sensoren getestet (Nägel, Kapazitiver selbstgebauter und ein gekaufter aus Chinatown, der gerade kam als ich bei meinem mit bauen Fertig war...). Und ich konnte mir nicht erklären, woran es liegt. Dass ein nagelneuer ProMini so einen merkwürdigen Fehler haben könnte muss man erst mal drauf kommen....

Ich messe morgen mal die Betriebsspannung genau, aber das Netzteil was ich dran hab ist eigentlich mehr als ausreichend.

Und die Referenzspannung ist niedriger als die Ausgabe des Sensors, also entweder einen ungenauen Spannungsteiler an jedem Eingang oder ne extra Spannung erzeugen, was ich erst vor hatte, aber da es mit den kapazitiven Sensoren weniger bis garnicht schwankte hab ich das verworfen. Es war immer nur der allererste Wert falsch (normal wird erst kalibriert und danach angefangen zu lesen. Ich habs nur um es für hier deutlicher zu machen in die Mitte gepackt)

Jetzt mache ich das obwohl es nachts um 4 war und ich todmüde war und es ist auch wieder verkehrt.
Gibts denn irgendwas wo es keinen Grund zum meckern gibt?

Es tut mir leid, dass dir das so im Hals steckt....

Aber beide Funktionen schalten die LED ein.
Und keine aus.
Von daher wundert es mich nicht, das:

egal was die LED's später noch so machen (an/aus).
Ein an/aus geht leider nicht aus deinem Code hervor.

Hasi ich hab gestern Nacht 4-5h lang das riesige Programm zerpflückt und hochgeladen bis die entscheidenden Zeilen übrig waren.

Das hast du richtig gemacht!
Denn so kann man das untersuchen und testen.

Meinen Dank dafür!


also entweder einen ungenauen Spannungsteiler an jedem Eingang

Was ist an einem Spannungsteiler ungenau?


Wie werden deine Sensoren versorgt?
Denn die Versorgung trägt doch auch bei...

Hallo,

also um die Hardware zu testen gibt es ja einfache Sketche. Nimm doch

  1. einfach mal was um die LED´s blinken zu lassen.
  2. was um die Analogwerte zu messen.

aus den Beispielen

wenn das einzeln klappt kannst du ja noch beides zusammenführen. Ich denke das klappt aber. Damit ist dann die Hardware OK.

Wenn bei der Messung der Analogwerte was anderes rauskommt wenn die LED´s an sind, könnte es noch sein das sich der OV Bezugspunkt für die Analogsensoren verschiebt und darum die Messung nicht mehr stimmt.

Heinz

Ja, dass ich bei der einen Funktion vergessen hatte die 1 gegen 0 zu tauschen lag an der Uhrzeit....
Eigentlich war die Funktion anders und habs versucht fürs Forum schnell zu vereinfachen.
Du könntest auch einfach gleich "Dir ist ein Fehler unterlaufen, beide Funktionen schalten die LED ein." sagen statt "Und das hier, ist ja irgendwie auch ein Witz: Den du hier mit uns treibst, oder?". Wäre einfach ne nettere Umgangsform finde ich.

Als Spannungsversorgung hab ich beim testen das USB Kabel und wenn es laufen soll ein Netzteil 6V/1A am RAW Eingang. Ursprünglich hatte ich ein 5V direkt am VCC aber wegen dem Problem hab ich es geäntert, weil ich ursprünglich da die Ursache vermutet hatte.

Hab gerade nen anderen Promini rein gemacht (jetzt auch mit Sockel :wink: ), aber das hat nichts geändert.

Vielleicht doch ein Verdrahtungsfehler, muss nachher mal alles nochmal durchsehen. Kann aber eigentlich nicht sein, da ich vor dem ersten einschalten locker 5x jeden einzelnen Pin nachvollzogen hab und auf Kurzschlüsse untersucht hab (Gucken sowie messen).

Dass beim "LED an" die VCC so schwankt, dass es den ADC verwirrt, kann ich mir eigentlich schwer vorstellen, da die selbe Schaltung am UNO auf dem Steckbrett nur mit USB versorgt garkeine Probleme damit hatte.

Was am Spannungsteiler so schlimm ist:
Jeder Spannungsteiler ist anders und verschiebt den jeweiligen Sensorwert nach unten oder oben. Daher wird es schwieriger zu messen ob einer dran ist, oder der min/max Wert überschritten ist.

Für meine eigentliche Messung wäre es schnuppe weil ich meine Kalibration eh in die Mitte lege, aber für die Grenzwerte wäre es später blöd.
Ausserdem, denke ich je größer der Spannungsbereich, desto sinnvoller kann der ADC einen genauen Wert messen oder?

Also wenn ich statt dem Sensor einen Spannungsteiler an den ADC-Eingang Hänge hat er korrekte Werte durchgehend 512.

Alls muss es echt am schwankenden Signal des Sensors liegen, oder dass der ADC nicht genug Zeit zum laden hat....

Also entweder nochmal mit Kondensator ADC- GND testen (was ich schonmal gemacht hatte) oder mit Tiefpass vor ADC versuchen wären meine Ideen. Oder mache ich nen Denkfehler?

Also wenn ich statt dem Sensor einen Spannungsteiler an den ADC-Eingang Hänge hat er korrekte Werte durchgehend 512.

Sach ich ja ....
Vcc ist, als Referenz, für ratiometrische Messungen ideal.

Alls muss es echt am schwankenden Signal des Sensors liegen

Oder an der schwankenden Versorgungsspannung des Arduino.
:o Vielleicht wären ja absolute Messungen genauer. :o

oder dass der ADC nicht genug Zeit zum laden hat....

Ist klar....

Bitte suche die Schuld nicht bei mir oder beim ADC.

Ich verstehe auch, dass dir mein Verhalten nicht gefällt.
Aber denke bitte auch daran, dass es nur wenig Sinn macht, den Boten zu töten, weil einem die Nachricht nicht schmeckt.
Das schafft nur eine kurze Befriedigung, keine Lösung.
Und keinerlei Erkenntnis.

Die Fehler liegen so oft in dem Code, der verheimlicht wird, daß offensichtlich gefälschte Programmteile und offensichtlich falsche Vermutungen schon mal allergische Reaktionen auslösen können.

Nee hab mal nachdem ich jetzt endlich wieder ein Osziloskop habe nachgemessen und unglaublicherweise ging die VCC um 60mV runter wenn die LEDs an gingen....

Da war ich erstmal verwundert, bis mir einfiel, dass ich auf dem steckbrett ne moderne 5mm RGB led zum testen genommen hatte, auf der Lochrasterplatine aber 3mm wollte und nur noch die aus meiner Ausbildung anfang der 80er Jahre hatte die noch keine Nebelscheinwerfer waren wie die heutigen LEDs.... Daraufhin hab ich halt mehr strom durch fließen lassen damit sie hell genug sind....

Und das hatte ich irgendwie vergessen.... War mir sicher dass sich nichts geändert hatte...

Nun hatte ich inzwischen ja neue und baue gerade die neuen ein.... Da hab ich jetzt den Vorwiderstand schon 3x so groß wie laut Datenblatt nötig wäre und die sind immer noch zu hell....

Denke mal danach hat sich das erledigt. Aber ich werde trotzdem einmal messen, dann die LED aktivieren, warten bis sich die VCC wieder eingependelt hat, auch wenn es mit der neuen LED kaum merklich sein sollte und nochmal messen und das 2. Ergebnis dann als Kalibration speichern.

Allerdings soll später wenn ich im Herbst weiter mache das Ding bis zu 64 Ein und Ausgänge haben und 64 LEDs machen schon einen Einfluss....

Daher muss ich dann wirklich ne eigene Referenzspannung für den ADC erzeugen. Dann lohnt es aber ja auch.

Daher muss ich dann wirklich ne eigene Referenzspannung für den ADC erzeugen.

Ist schon eingebaut.

ja, mir aber aus obigen gründen zu niedrig. Das läuft später auf nem ESP32 mit 1,1V Referenz. dann lieber ne 3,3V externe. Kennst Du ne passende 3,3V Spannungsreferenz (nicht SMD)? hab vorhin gesucht und nix sinnvolles gefunden.

Das läuft später auf nem ESP32

Dann ist alles, was ich je zu dir gesagt habe, voll für die Katz.
Bitte vergiss alles.

combie:
Dann ist alles, was ich je zu dir gesagt habe, voll für die Katz.
Bitte vergiss alles.

Soll das Ironie sein? Ich hab mal mitbekommen je kleiner die Meßgröße, desto stärker wirken sich Störeinflüsse aus.... Daher halte ich es für deutlich sinniger 3,3V zu wandeln als 1,1V :wink:

Und für andere, falls einer nach was ähnliches hat und das später findet:
Ich hab jetzt 10uF von Vcc zu GND hinzugefügt, LEDs genommen die nur 3mA bekommen und die Versorgungsspannung schwankt <5mV. Wenn die LEDs angehen ist es nicht mehr messbar.

Nicht nur das LED Problem ist weg, auch viel geringere Störungen insgesamt drauf. Normal dachte ich die C vom Spannungsregler onboard sollten reichen.

Die ADC Eingänge hab ich mit nem Low-Pass Filter versehen (10R, 4,7uF), jetzt ist auch der ADC Eingang stabil, der vorher (weil mein abgeschirmtes Kabel noch nicht da ist und ich Flachband nehmen musste) lauter Einstrahlungen hatte, bis zu 60mV laut Oszi. Daher hatte ich vorher die Mittelwertbildung in meinem Programm so hoch, dass kann ich jetzt wohl runter fahren.

Soll das Ironie sein?

Nein, das ist ein Ausdruck meiner Frustration.

Die Ironie (siehe: "witzig") hat ein Ende gefunden.