AnalogInput A0-A15 geben seltsamme Werte

Hallo zusammen,

ich benötige für ein größeres Projekt 14 Spannungssensoren. Realisiert habe ich das ganze mittels Spannungsteiller der sehr Hochohmig ist. (Siehe Bild1)

Das Ergebnis dieser Schaltung sollte sein das ohne angeschlossener Spannungsquelle am Spannungsteiler ich einen Integerwert von 0 erhalten sollte. In wirklichkeit ist es so das ich einen wert von 54 bekomme der sich pro Spannungsteiler um +1 erhöht.

Ergänzent möchte ich sagen das Spannungsquelle für den Spannungsteiler und der Arduino von der selben Soanungsquelle versorgt werden so das alle die gleiche Masse nutzen.

Serial Monitor:
13:36:25 - 24.75 C / Sensor1: 54/ Sensor2: 55/ Sensor3: 56/ Sensor4: 57/ Sensor5: 58/ Sensor6: 59/ Sensor7: 60/ Sensor8: 61/ Sensor9: 62
13:36:26 - 24.75 C / Sensor1: 54/ Sensor2: 55/ Sensor3: 56/ Sensor4: 57/ Sensor5: 58/ Sensor6: 59/ Sensor7: 60/ Sensor8: 61/ Sensor9: 62
13:36:27 - 24.75 C / Sensor1: 54/ Sensor2: 55/ Sensor3: 56/ Sensor4: 57/ Sensor5: 58/ Sensor6: 59/ Sensor7: 60/ Sensor8: 61/ Sensor9: 62
13:36:28 - 24.75 C / Sensor1: 54/ Sensor2: 55/ Sensor3: 56/ Sensor4: 57/ Sensor5: 58/ Sensor6: 59/ Sensor7: 60/ Sensor8: 61/ Sensor9: 62

Sketch:

#include <DS3231.h>
DS3231  rtc(SDA, SCL);

int sens1 = A0;
int sens2 = A1;
int sens3 = A2;
int sens4 = A3;
int sens5 = A4;
int sens6 = A5;
int sens7 = A6;
int sens8 = A7;
int sens9 = A8;
int sens10 = A9;
int sens11 = A10;
int sens12 = A11;
int sens13 = A12;
int sens14 = A13;
int sens15 = A14;
int sens16 = A15;



void setup() {
 pinMode (sens1,       INPUT);
 pinMode (sens2,       INPUT);
 pinMode (sens3,       INPUT);
 pinMode (sens4,       INPUT);
 pinMode (sens5,       INPUT);
 pinMode (sens6,       INPUT);
 pinMode (sens7,       INPUT);
 pinMode (sens8,       INPUT);
 pinMode (sens9,       INPUT);
 pinMode (sens10,      INPUT);
 pinMode (sens11,      INPUT);
 pinMode (sens12,      INPUT);
 pinMode (sens13,      INPUT);
 pinMode (sens14,      INPUT);
 pinMode (sens15,      INPUT);
 pinMode (sens16,      INPUT);

 int sens1 = 0;

 Serial.begin(9600);
 rtc.begin();
}

void loop() {
Serial.print(rtc.getTimeStr()); Serial.print(" - "); Serial.print(rtc.getTemp());Serial.print(" C ");
Serial.print(" / Sensor1: ");Serial.print(sens1); 
Serial.print("/ Sensor2: ");Serial.print(sens2); 
Serial.print("/ Sensor3: ");Serial.print(sens3); 
Serial.print("/ Sensor4: ");Serial.print(sens4); 
Serial.print("/ Sensor5: ");Serial.print(sens5); 
Serial.print("/ Sensor6: ");Serial.print(sens6); 
Serial.print("/ Sensor7: ");Serial.print(sens7); 
Serial.print("/ Sensor8: ");Serial.print(sens8); 
Serial.print("/ Sensor9: ");Serial.print(sens9); 
Serial.print("/ Sensor10: ");Serial.print(sens10);
Serial.print("/ Sensor11: ");Serial.print(sens11);
Serial.print("/ Sensor12: ");Serial.print(sens12);
Serial.print("/ Sensor13: ");Serial.print(sens13); 
Serial.print("/ Sensor14: ");Serial.print(sens14); 
Serial.print("/ Sensor15: ");Serial.print(sens15);
Serial.print("/ Sensor16: ");Serial.println(sens16);
delay(1000);
}

Durch den Sample and Hold Kondensator im A/D Wandler des Arduino muß der äusere Spannungteiler einen Innenwiderstand von weniger als 10kOhm haben (damit Kurzzeitig der Ladestrom für den Kondensator fließen kann, und dieser auf Endspannung geladen wird)

Abhilfe könnte je ein 0,1µF Kondensator zwischen analogen Eingang und Masse schaffen, wenn die Meßspannung sich nicht schnell ändert.
Bei sich schnell ändernden Spannungen brauchst Du einen Operationsverstärker in Spannungsfolge-Schaltung.
Grüße Uwe

Ich vermisse "analogRead"

hi,

da hast Du noch glück gehabt, ich vermisse 16 analogRead()...

gruß stefan

Ohhh man ich Depp!!!!! :o

"analogRead" vergessen.

Bitte Thread schließen und meine Unfähigkeit gleich löschen!!!!! >:(

pinMode(..., INPUT) ist auch überflüssig. Und das Programm lässt sich kürzer mit for-Schleifen schreiben

Das da Werte von 54 an aufwärts kommen ist klar, weil das die Pin-Nummern sind und du einen Mega hast. Dann geht es eins höher als der höchste Digital-Pin los.

Hardwareseitig passt es aber auch nicht. Sie was uwefed gesagt hat. Sehr wichtig.

Ist doch schön wenn ein Problem mal so schnell gelöst ist... :-) egal wie

Mich stört noch die doppelte Verwendung einer Variablen:

int sens1 = A0;
...
int sens1 = 0;

Würde Dir so der Compiler anmeckern und damit helfen:

const int sens1 = A0;
const int sens2 = A1;
const int sens3 = A2;
const int sens4 = A3;
const int sens5 = A4;
const int sens6 = A5;
const int sens7 = A6;
const int sens8 = A7;
const int sens9 = A8;
const int sens10 = A9;
const int sens11 = A10;
const int sens12 = A11;
const int sens13 = A12;
const int sens14 = A13;
const int sens15 = A14;
const int sens16 = A15;

Verlane: Ohhh man ich Depp!!!!! :o

"analogRead" vergessen.

Bitte Thread schließen und meine Unfähigkeit gleich löschen!!!!! >:(

Nein, Strafe muß sein. ;) ;)

Ich hatte es ja auch übersehen. ::) ::)

Grüße Uwe

ich habs gerade erst gelesen und gleich gesehen, vor allem an der 54 :grin:

und ob es in diesem Fall wirklich Sinn macht, jedem Analogpin eine eigene Variable zuzuweisen, ist fraglich.

Wenigstens verbaut man sich so die Möglichkeit auf Schleifen. wenn schon, dann ein int array

hi,

Nein, Strafe muß sein.

hab’ grad über Eure schlernhexen gelesen. gehörst Du etwa zu denen?

gruß stefan

Aha Wikipedialeser. https://de.wikipedia.org/wiki/Schlernhexen Schlernhexn gibt's hier unten nicht. Mußt Du schon aufn Schlern oder Seiser Alm.

Die Samenstände der Alpenanemone nennen wir auch Schlernhexen (auch wenn im Artikel eine andere Blume genannt wird). http://f.hikr.org/files/1214198l.jpg

Grüße aus dem südlichen Teil.

PS was machst Du am 20 und 21 Mai? Uwe

ElEspanol:
Wenigstens verbaut man sich so die Möglichkeit auf Schleifen. wenn schon, dann ein int array

Das Array braucht man gar nicht wenn alles sowieso sequentiell ist. Man kann einfach direkt über die Pin Nummern iterieren.

Wie man sieht ist auf dem Mega A0 = 54, A1 = 55, etc. Auf dem UNO ist A0 = 14

Serenifly: ... direkt über die Pin Nummern iterieren.

Dachte zunächst, Du meinst "inkrementieren", weil die Pinnummern hochgezählt werden, aber: "Iteration (von lat. iterare ,wiederholen')" stimmt auch.

Man lernt täglich dazu :)

hi, uwe,

Die Samenstände der Alpenanemone nennen wir auch Schlernhexen (auch wenn im Artikel eine andere Blume genannt wird).

hier in wien nennen wir die samenstände ganz anders. aber das müssen wir ja jetzt nicht besprechen...

liebe grüße ins südtirolerische, stefan