Attiny85 ADC Eingangswiderstand - wie hoch

#7584180
Lesenswert?

Finde leider im Datasheet keine Angaben zum Eingangswiderstand der ADC-Kanäle des AT85. Im Internet gibt es da verschiedene Aussagen, beginnend bei 20 kOhm bis zu mehreren MOhm, ebenso sollte der PIN als Input generiert werden.

Kennt jemand eine Größenordnung. Meine Signalquelle hat einen Innenwiderstand von ca. 5 MOhm, so dass ich vermute, ich benötige noch einen OPV um ihren Innenwiderstand zu reduzieren.

Fragen ist halt leichter als löten.

Danke.

M.

(Firma: matzetronics) #7584185
Lesenswert?

RAin sind typ. 100 MOhm, Tabelle zu finden unter 'ADC Electrical Characteristics'. In meinem Datenblatt ist das unter Punkt 21-8 zu finden.

Empfohlen wird eine Quellimpedanz von <10kOhm, weil ja der S&H Kondensator geladen werden muss. Das gilt aber nicht, wenn man den internen OpAmp mit Gain oder für Bipolaren Betrieb benutzt.

#7584204
Lesenswert?

Der Leckstrom ist typisch <50nA, kann aber bei 85°C bis zu 1µA betragen. Ich nehme einen Pufferkondensator 100nF am Eingang zum Laden des internen S&H Kondensators. Man kann aber auch nach dem Umschalten des MUX eine Wartezeit einfügen. Z.B. zum Messen der internen Referenz ist das nötig. Wie oft mußt Du denn messen?

Zur Frage, ob OPV nötig, ein ganz klares jain.

#7584235
Lesenswert?

Arduino F. schrieb:

Augen auf! 1 bis 100k Figure 17-8. Analog Input Circuitry

Das ist nicht der Eingangswiderstand!

Wichtiger ist der darauffolgenden Absatz: "The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such a source is used, the sampling time will be negligible. If a source with higher impedance is used, the sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary widely. The user is recommended to only use low impedant sources with slowly varying signals, since this minimizes the required charge transfer to the S/H capacitor."

(Firma: Gast) #7584251
Lesenswert?

Klaus H. schrieb:

Das ist nicht der Eingangswiderstand!

Ich weiß nicht in welcher Welt du lebst, aber in meiner Welt sieht die Definition eher so aus: Der Eingangswiderstand .... ist eine Eigenschaft von Eingängen elektrischer Geräte. Er belastet das Gerät, das an diesen Eingang eine Spannung anlegt.

Klaus H. schrieb:

Wichtiger ist der darauffolgenden Absatz:

Keine Frage, dass der Absatz wichtig ist! Aber er ändert nicht die Semantik von "Eingangswiderstand"

Moderator (Firma: Titel) Persönliche Seite #7584268
Lesenswert?

Arduino F. schrieb:

Aber er ändert nicht die Semantik von "Eingangswiderstand"

In dem zitierten Text steht nichts von einem Eingangswiderstand, sondern konkret von einer Eingangsimpedanz.

Und jetzt kommt der Knackpunkt: diese Impedanz ist ein "komplexer Widerstand", der sich auch mit einem Kondensator verringern lässt.

Also: wenn ich möglichst belastungsfrei und "hochohmig" eine Spannung wandeln will dann nehme ich 2 sehr hochohmige Widerstände und schalte einen Kondensator mit 10nF paralell.

Der 10nF Kondensator ist 100x größer als der Sampling-Kondensator, womit der Fehler beim Samplen maximal 1 LSB ist. Er sorgt also für die benötigte niedrige Impedanz zum Aufladen des Samplingkondensators. Der 10nF der wird dann langsam über den hochohmigen Spannungsteiler nachgeladen.

Passt.

Man muss nur aufpassen, dass man den 10nF nicht zu oft entlädt, denn sonst wird er ggfs. nicht schnell genug über den Spannungsteiler nachgeladen.

Da spielen aber noch ganz andere lustige Effekte mit rein.

Dort im Beitrag "Re: Bessere Poti Schaltung für Arduino?" haben wir das mal andiskutiert.

Moderator (Firma: Titel) Persönliche Seite #7584296
Lesenswert?

Rainer W. schrieb:

Ohne Kenntnis der erforderlichen Bandbreite lässt sich trefflich fabulieren.

Du bellst den falschen Baum an. Mangels genauerer Informationen kann ich nichts Genaueres sagen. Oder ist eine meiner Aussagen falsch?

Denn da kommen wieder die beiden Aspekte zum Tragen:

  1. die Grenzfrequenz aus 5M Ohm und 10nF kann sich jeder selber herrechnen
  2. wenn der ADC Mux nicht auf einen anderen Pin mit anderer Spannung umgeschaltet wird, dann wird auch der Sample-Kondensator nicht entladen

Wenn der Mux umgeschaltet wird und der Sampling-Kondensator durch (zu) häufige Wandlungen zusätzlich entladen wird, dann wird es spannender, denn dann kommt ein kapazitiver Spannungsteiler mit ins Spiel.

#7584344
Lesenswert?

Wenn er nicht umgeschaltet wird braucht er ca 300µs zum Entladen, was grob 10M Ohm macht. Die besagten 10nF dazu und nur zum Messen kurz umschalten sollte eine höhere Genauigkeit ergeben als ein Op davor.

Matthias S. schrieb:

Das gilt aber nicht, wenn man den internen OpAmp mit Gain..

Ist das ertestet/bestätigt? Wie hoch wäre dann der Eingangswiderstand >100M Ohm unabhängig vom Mux? Das erspart dem TE einen externen OP.

(Firma: matzetronics) #7584385
Lesenswert?

Achim H. schrieb:

Das gilt aber nicht, wenn man den internen OpAmp mit Gain..

Ist das ertestet/bestätigt? Wie hoch wäre dann der Eingangswiderstand

100M Ohm unabhängig vom Mux? Das erspart dem TE einen externen OP.

Der Eingangswiderstand bleibt mit und ohne OpAmp bei 100 MOHm. Es geht nur im die Quellimpedanz, die bei Benutzung des internen OpAmps nicht unbedingt <10 kOhm sein muss, da der interne OpAmp das in jedem Fall erfüllt. Siehe Blockdiagramm des ADC im Datenblatt.

#7584449
Lesenswert?

Sie muß ja nicht unbedingt <10kOhm sein . Sie leidet nur bei dem Umschalten. Da sehe ich keine Vorteil bei Verwendung des internen OP. Sein Eingang hängt an der selben Leitung. Denkbar das sein -Eingang etwas im Vorteil ist. Da bleibt wohl doch nur Ausprobieren um verbindliche Aussagen treffen zu können.

Moderator (Firma: Titel) Persönliche Seite #7584497
Lesenswert?

S. L. schrieb:

Auf dem Steckbrett: Uref = Ucc = 4.992 V, U_ADC2 = 3.235 V: ergibt direkt 662, mit 4.7 MOhm zwischengeschaltet etwas schwankend 662..664.

Wandle mal zwischendurch einen anderen Kanal, der einmal an GND und das andere mal an Vcc hängt (oder eben an einem Poti, das du zwischen Vcc nach GND hin- und herdrehen kannst).

Was passiert?

#7584513
Lesenswert?

Nicht viel: jetzt in allen Fällen 664 (nicht mehr 662, warum auch immer), auf ADC3 0 bzw. 1023 (geschaltet GND bzw. Ucc), jeweils 2 s gewartet.

Aber allgemein: Michael hatte nur nach dem Eingangswiderstand gefragt, kein Umschalten, und vor allem auch keine zeitliche Abhängigkeit. Wenn ihm diese Problematik nicht klar war, so hatte er sechs Stunden Zeit nachzufragen, denn dieser Aspekt wurde ja gleich in der allerersten Antwort angesprochen.

#7584538
Lesenswert?

Michael schrieb:

Kennt jemand eine Größenordnung. Meine Signalquelle hat einen Innenwiderstand von ca. 5 MOhm

Da sollte man ja schon bei nem Multimeter und Co sowas wie nen TIA einsetzen. Nur mal so zum vergegenwärtigen: Der Standard-Tastkopf eines Oszis hat 10 MOhm || 10 pF. Ne Signalquelle mit 5 MOhm Ausgangswiderstand würde man damit ja signifikant beeinflussen.

#7584697
Lesenswert?

S. L. (sldt)

Nicht viel: jetzt in allen Fällen 664 (nicht mehr 662, warum auch immer), auf ADC3 0 bzw. 1023 (geschaltet GND bzw. Ucc), jeweils 2 s gewartet.

Da stellt sich allerdings die Frage, wie schnell du zwischen den Kanälen hin- und her schaltest und ob der Wert über mehrere Samples geglättet ist.

#7584706
Lesenswert?

S. L. schrieb:

Auf dem Steckbrett: Uref = Ucc = 4.992 V, U_ADC2 = 3.235 V: ergibt direkt 662, mit 4.7 MOhm zwischengeschaltet etwas schwankend 662..664.

Was machst du derweil auf den anderen Kanälen? Die Fehler entstehen, wenn der Multiplexer aktiv wird und zügig zwischen Kanälen umschaltet.

S. L. schrieb:

... jeweils 2 s gewartet.

Das bringt nichts, um das Kanalübersprechen durch den Multiplexer zu testen.

Beitrag #7584723 wurde von einem Moderator gelöscht.
Beitrag #7584726 wurde von einem Moderator gelöscht.
#7584734
Lesenswert?

Klaus H. schrieb:

Arduino F. schrieb:

Augen auf! 1 bis 100k Figure 17-8. Analog Input Circuitry

Das ist nicht der Eingangswiderstand!

Wichtiger ist der darauffolgenden Absatz: "The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such a source is used, the sampling time will be negligible. If a source with higher impedance is used, the sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary widely. The user is recommended to only use low impedant sources with slowly varying signals, since this minimizes the required charge transfer to the S/H capacitor."

Danke allen für die Anmtworten. Zur Ergänzung: Sind 2 ADC-Kanäle, die Gleichspannung messen als "single shot". Vor der 2. Messung gibst es eine 100 ms Warteschleife. Das Datenblatt Punkt 17.8 hatte ich gelesen und meine Schlussfolgerung war an Hand Figure 17.8. Re ist theoretisch unendlich (weiß schon, das das nur theoretisch ist). Da ich bei angeschlossenem uC eine Verminderung der Eingangsspannung messe, war meine Schlußfolgerung, dass die Ursache der Re ist. So war meine Frage nicht präzise. Ich hätte nach dem Gleichstromeingangswiderstand des uC fragen müssen.

Komme erst heute zum Antworten. Habe gestern in geselliger Runde Handball geguckt.

Schönes WE und viel Sonne.

M.

Moderator (Firma: Titel) Persönliche Seite #7586060
Lesenswert?

Lothar M. schrieb:

Was passiert?

S. L. schrieb:

Nicht viel: ...

Gut, dann muss ich das mal selber machen, wenn ganz offenbar nicht klar ist, was ich meine.

Meine Schaltung ist ein Arduino mit einem 10k-Poti am A4 und einem hochohmigen Spannungsteiler mit 5M Ersatzwiderstand (10M||10M) am A0:

1
  5V --------o----------------------o-----------
2
             |                      |
3
             |                      -
4
             |                 R2  | |
5
             |                 10M | |
6
       P1    -                      -
7
       10k  | |                     |
8
            | |<----- A4            o-----o--- A0
9
            | |                     |     |
10
             -                 R1   -     |  C1 (optional)
11
             |                 10M | |   === 10n
12
             |                     | |    |
13
             |                      -     |
14
             |                      |     |
15
  GND -------o----------------------o-----o-------

Im späteren Verlauf kommt beim Test 5 dann noch der C1 dazu.

Mein sehr überschaubares Programm dazu:

1
void setup() {
2
  // initialize digital pin LED_BUILTIN as an output.
3
  pinMode(LED_BUILTIN, OUTPUT);
4

5
  Serial.begin(9600);
6
}
7

8
void loop() {
9
  uint16_t an0, an4=9999;
10
  
11
  digitalWrite(LED_BUILTIN, HIGH);  delay(50);                      
12
  digitalWrite(LED_BUILTIN, LOW);   delay(950);                    
13

14
  // :
15
  // hier kommen die Codezeilen aus den unteren Tests hinein
16
  // :
17
  
18
  Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4));
19
}

Test 1: es wird nur der Spannungsteiler (ohne C2) an A0 gewandelt.

1
: 
2
//  an4 = analogRead(A4); // Poti
3
  an0 = analogRead(A0); // Spannungsteiler
4
:

Terminal:

1
:
2
Spannungsteiler: 502 - Poti: 9999
3
Spannungsteiler: 502 - Poti: 9999
4
Spannungsteiler: 502 - Poti: 9999
5
Spannungsteiler: 502 - Poti: 9999
6
Spannungsteiler: 502 - Poti: 9999
7
Spannungsteiler: 502 - Poti: 9999
8
Spannungsteiler: 502 - Poti: 9999
9
Spannungsteiler: 502 - Poti: 9999
10
:

Fazit: wenn nur der Spannungsteiler gewandelt wird, kommt immer der gleiche Wert heraus. Und zwar völlig unabhängig von der Stellung des Potis (das war ja zu erwarten).

Test 2: direkt vor dem Spannungsteiler an A0 wird das Poti an A4 eingelesen.

1
: 
2
  an4 = analogRead(A4); // Poti
3
  an0 = analogRead(A0); // Spannungsteiler
4
:

Terminal:

1
:
2
Spannungsteiler: 504 - Poti: 511
3
Spannungsteiler: 504 - Poti: 511
4
Spannungsteiler: 504 - Poti: 511
5
Spannungsteiler: 484 - Poti: 458
6
Spannungsteiler: 451 - Poti: 370
7
Spannungsteiler: 386 - Poti: 203
8
Spannungsteiler: 324 - Poti: 43
9
Spannungsteiler: 302 - Poti: 0
10
Spannungsteiler: 303 - Poti: 0
11
Spannungsteiler: 304 - Poti: 0
12
Spannungsteiler: 423 - Poti: 295
13
Spannungsteiler: 473 - Poti: 430
14
Spannungsteiler: 527 - Poti: 573
15
Spannungsteiler: 548 - Poti: 630
16
Spannungsteiler: 610 - Poti: 790
17
Spannungsteiler: 647 - Poti: 906
18
Spannungsteiler: 688 - Poti: 1023
19
Spannungsteiler: 689 - Poti: 1023
20
Spannungsteiler: 690 - Poti: 1023
21
Spannungsteiler: 565 - Poti: 682
22
Spannungsteiler: 499 - Poti: 498
23
Spannungsteiler: 498 - Poti: 498
24
Spannungsteiler: 498 - Poti: 498
25
Spannungsteiler: 499 - Poti: 498
26
:

Fazit: der ADC-Wert vom Spannungsteiler ist nicht mehr stabil bei 502, sondern er hängt sehr stark von der Potistellung ab. Wenn die Potispannung an A4 bei Vcc ist, hommt mit 690 ein viel zu hoher Wert am A0 heraus, wenn die Potispannung 0V ist, kommt mit 303 ein viel zu geringer Wert heraus.

Test 3: zuerst wird das Poti eingelesen, danach der Spanunngsteiler und gleich danach nochmal der Spannungsteiler.

1
: 
2
  an4 = analogRead(A4); // Poti
3
  an0 = analogRead(A0); // Spannungsteiler
4
  an0 = analogRead(A0); // Spannungsteiler
5
:

Terminal:

1
:
2
Spannungsteiler: 501 - Poti: 498
3
Spannungsteiler: 502 - Poti: 498
4
Spannungsteiler: 501 - Poti: 498
5
Spannungsteiler: 535 - Poti: 704
6
Spannungsteiler: 588 - Poti: 1023
7
Spannungsteiler: 587 - Poti: 1023
8
Spannungsteiler: 571 - Poti: 919
9
Spannungsteiler: 489 - Poti: 370
10
Spannungsteiler: 412 - Poti: 0
11
Spannungsteiler: 421 - Poti: 0
12
Spannungsteiler: 445 - Poti: 205
13
Spannungsteiler: 493 - Poti: 457
14
Spannungsteiler: 493 - Poti: 457
15
Spannungsteiler: 503 - Poti: 457
16
:

Fazit: der ADC-Wert beim 2. Einlesen des Spannungsteilers hängt wesentlich weniger stark von der Potistellung ab. Klar, denn so langsam lädt sich der Sample-Kondensator auf. Dann gleich nochmal, mit 5 Wandlungen:

1
: 
2
  an4 = analogRead(A4);
3
  an0 = analogRead(A0);
4
  an0 = analogRead(A0);
5
  an0 = analogRead(A0);
6
  an0 = analogRead(A0);
7
  an0 = analogRead(A0);
8

9
:

Terminal:

1
:
2
Spannungsteiler: 501 - Poti: 510
3
Spannungsteiler: 501 - Poti: 510
4
Spannungsteiler: 501 - Poti: 511
5
Spannungsteiler: 495 - Poti: 154
6
Spannungsteiler: 492 - Poti: 0
7
Spannungsteiler: 496 - Poti: 232
8
Spannungsteiler: 507 - Poti: 881
9
Spannungsteiler: 509 - Poti: 1023
10
Spannungsteiler: 509 - Poti: 1023
11
Spannungsteiler: 502 - Poti: 552
12
Spannungsteiler: 501 - Poti: 495
13
Spannungsteiler: 501 - Poti: 495
14
Spannungsteiler: 501 - Poti: 495
15
:

Fazit: mit jeder Messung am Spannungsteiler lädt sich der Samplekondensator ein bisschen mehr auf, bis nach 5 Wandlungen nur noch 1% Abweichung bleibt.

Test 4: bringt es was, einfach vor der Wandlung des Spannungsteilers zu warten? Also wird jetzt das Poti gewandelt, dann wird 1 Sekunde gewartet, dann wird der Spannungsteiler gewandelt:

1
: 
2
  an4 = analogRead(A4); // Poti
3
  delay(1000);   
4
  an0 = analogRead(A0); // Spannungsteiler
5
:

Terminal:

1
:
2
Spannungsteiler: 497 - Poti: 495
3
Spannungsteiler: 498 - Poti: 495
4
Spannungsteiler: 377 - Poti: 225
5
Spannungsteiler: 298 - Poti: 0
6
Spannungsteiler: 359 - Poti: 0
7
Spannungsteiler: 434 - Poti: 336
8
Spannungsteiler: 546 - Poti: 590
9
Spannungsteiler: 653 - Poti: 790
10
Spannungsteiler: 697 - Poti: 1023
11
Spannungsteiler: 697 - Poti: 1023
12
Spannungsteiler: 484 - Poti: 461
13
Spannungsteiler: 484 - Poti: 461
14
Spannungsteiler: 484 - Poti: 461
15
:

Fazit: nein, es reicht nicht aus, vor der Wandlung einer hochimpedanten Quelle länger zu warten. Mit ein wenig Nachdenken ist das klar, denn während der Wartezeit passiert mit dem Samplekondensator nichts, was der nachfolgenden Messung helfen würde.

Test 5: jetz kommt der C1 mit 10nF ins Spiel. Gleiches Programm wie beim Test 2, hilft uns der Kondensator?

1
: 
2
  an4 = analogRead(A4); // Poti
3
  an0 = analogRead(A0); // Spannungsteiler
4
:

Terminal:

1
:
2
Spannungsteiler: 501 - Poti: 461
3
Spannungsteiler: 501 - Poti: 462
4
Spannungsteiler: 501 - Poti: 599
5
Spannungsteiler: 502 - Poti: 737
6
Spannungsteiler: 502 - Poti: 1023
7
Spannungsteiler: 502 - Poti: 1023
8
Spannungsteiler: 502 - Poti: 924
9
Spannungsteiler: 501 - Poti: 656
10
Spannungsteiler: 501 - Poti: 433
11
Spannungsteiler: 501 - Poti: 247
12
Spannungsteiler: 501 - Poti: 86
13
Spannungsteiler: 501 - Poti: 0
14
Spannungsteiler: 501 - Poti: 0
15
Spannungsteiler: 501 - Poti: 0
16
Spannungsteiler: 501 - Poti: 149
17
Spannungsteiler: 502 - Poti: 521
18
Spannungsteiler: 501 - Poti: 521
19
:

Fazit: durch den 10nF Kondensator wird die Impedanz des hochohmigen Spannungsteilers so weit reduziert, dass der der Messfehler nicht mehr bemerkbar ist.

Michael schrieb:

Sind 2 ADC-Kanäle, die Gleichspannung messen als "single shot". war meine Schlußfolgerung, dass die Ursache der Re ist.

Diese Schlussfolgerung ist falsch: du hast da meinen Testfall 2 aufgebaut und "verschleppst" die Messung des anderen Kanals auf deinen hochohmigen Eingangskanal.

Vor der 2. Messung gibst es eine 100 ms Warteschleife.

Die Wartezeit ist irrelevant, siehe Test 4.

S. L. schrieb:

Aber allgemein: Michael hatte nur nach dem Eingangswiderstand gefragt, kein Umschalten, und vor allem auch keine zeitliche Abhängigkeit.

Nenn mich Hellseher, dass ich geahnt habe, was da passiert.

Und lerne daraus: es ist egal, wonach Leute fragen, das Problem liegt oft ganz woanders.

Angehängte Dateien:
#7586142
Lesenswert?

Lothar M. schrieb:

Die Wartezeit ist irrelevant

Sie ist ja auch nicht existent wenn der mux vorher nicht geschaltet wird ;-) Richtig wäre den mux auf den Kanal stellen und dann Wartezeit. Andererseits ist Deine Lösung mit den 10nF viel besser als sich überlegen zu müssen wann darf ich wie messen. Und das auch noch bei jeder Änderung (nach Monaten/Jahren) in Erinnerung zu haben.

#7586154
Lesenswert?

Achim H. schrieb:

Andererseits ist Deine Lösung mit den 10nF viel besser als sich überlegen zu müssen wann darf ich wie messen. Und das auch noch bei jeder Änderung (nach Monaten/Jahren) in Erinnerung zu haben.

Da würde mich doch glatt interessieren wie die Ergebnisse aussehen, wenn man kontinuierlich mit höchster Sample-Frequenz abwechselnd die Eingänge (bei Poti 0 oder Vref) einliest. Kann der Spannungsteiler den 10nF schneller nachladen als der Sample-C ihn entlädt? Fragen über Fragen… ;-)

#7586228
Lesenswert?

Lothar M. schrieb:

void loop() { uint16_t an0, an4=9999;

digitalWrite(LED_BUILTIN, HIGH); delay(50); digitalWrite(LED_BUILTIN, LOW); delay(950);

an4 = analogRead(A4); // Poti an0 = analogRead(A0); // Spannungsteiler

Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4)); } [/c]

Michael schrieb:

Sind 2 ADC-Kanäle, die Gleichspannung messen als "single shot". war meine Schlußfolgerung, dass die Ursache der Re ist.

Diese Schlussfolgerung ist falsch: du hast da meinen Testfall 2 aufgebaut und "verschleppst" die Messung des anderen Kanals auf deinen hochohmigen Eingangskanal.

Vor der 2. Messung gibst es eine 100 ms Warteschleife.

Die Wartezeit ist irrelevant, siehe Test 4.

wenn ich das richtig sehe entspricht deine loop einem polling betrieb. Damit beeinflusst natürlich der C, da frequenzabhängig, den Eingangswiderstand. So habe ich den ADC ja nicht betrieben. Die 100 ms habe ich gewählt, weil ich zu faul war nachzusehen, wieviel zeit die Umschaltung der MUX braucht und ich genug Zeit habe. Was mir nicht klar ist, ob der interne C des ADC zum Zeitpunkt des Schreibens des ADC-Wertes in das Register 100%ig aufgeladen ist. Das hatte ich vorausgesetzt, da sich m.E. daraus die maximale Samplingrate des ADC ergibt.

Das Löten war nur symbolisch gemeint.

S. L. schrieb:

Aber allgemein: Michael hatte nur nach dem Eingangswiderstand gefragt, kein Umschalten, und vor allem auch keine zeitliche Abhängigkeit.

Nenn mich Hellseher, dass ich geahnt habe, was da passiert.

So meinte ich das, den Widerstand und nicht die Impedanz. C zu % aufgeladen ist der Eingangswiderstand theoretisch unendlich.

M.

Moderator (Firma: Titel) Persönliche Seite #7586261
Lesenswert?

Peter D. schrieb:

Du mußt natürlich vor dem Warten erst den MUX umschalten.

Das tut natürlich der TO Michael aber mit hoher Wahrscheinlichkeit auch nicht.

Aber natürlich hast du Recht:

1
:
2
  an4 = analogRead(A4); // Poti
3
  an0 = analogRead(A0); // Mux umschalten
4
  delay(1);
5
  an0 = analogRead(A0); // Spannungsteiler einlesen
6
:

Mit diesem Code reichen dann schon 1 ms locker aus für stabile Ergebnisse auf dem nackten Spannungsteiler ohne C1:

1
:
2
Spannungsteiler: 502 - Poti: 445
3
Spannungsteiler: 502 - Poti: 578
4
Spannungsteiler: 502 - Poti: 930
5
Spannungsteiler: 502 - Poti: 1023
6
Spannungsteiler: 502 - Poti: 845
7
Spannungsteiler: 502 - Poti: 470
8
Spannungsteiler: 502 - Poti: 316
9
Spannungsteiler: 502 - Poti: 31
10
Spannungsteiler: 502 - Poti: 72
11
Spannungsteiler: 502 - Poti: 394
12
Spannungsteiler: 502 - Poti: 525
13
Spannungsteiler: 502 - Poti: 533
14
Spannungsteiler: 502 - Poti: 533
15
:

Klar, denn tau = RC = 15pF*5MOhm = 75µs, und 5 tau sind dann 375µs.

Michael schrieb:

Die 100 ms habe ich gewählt, weil ich zu faul war nachzusehen, wieviel zeit die Umschaltung der MUX braucht und ich genug Zeit habe.

Du hast das Problem nicht erfasst: der Mux wird mit dem Start der Wandlung umgeschaltet. Du musst also

  1. eine Wandlung auf dem hochohmigen Eingang machen
  2. dann warten
  3. dann nochmal wandeln und
  4. die zweite Wandlung als Ergebnis nehmen.

Kalli L. schrieb:

TOP. Thematik sehr anschaulich dargestellt.

Danke. Es ist den meisten nicht bewusst, wenn sie in diese Falle tappen. Denn dieser Effekt tritt natürlich auch auf, wenn das nicht eine Quelle mit 5 MOhm Innenwiderstand ist, sondern wenn die z.B. 100 kOhm hat. Dann sind die Auswirkungen eben nicht ganz so offensichtlich.

Norbert schrieb:

wenn man kontinuierlich mit höchster Sample-Frequenz abwechselnd die Eingänge (bei Poti 0 oder Vref) einliest.

Muss noch warten, muss jetzt weg... ;-)

#7586283
Lesenswert?

Lothar Miller schrieb:

der Mux wird mit dem Start der Wandlung umgeschaltet

Liegt das an Arduino? Denn sonst verstehe ich den Satz aus dem Datenblatt 'MUX[3:0] ... If these bits are changed during a conversion, the change will not go into effect until this conversion is complete' - nach meinem Verständnis wird der Multiplexer frühestmöglich umgeschaltet. Und womit arbeitet Michael eigentlich?

Gast #7586294
Lesenswert?

S. L. schrieb:

nach meinem Verständnis wird der Multiplexer frühestmöglich umgeschaltet.

Genau. Wenn beim Umschalten des Multiplexer gerade keine Messung stattfindet, wird er sofort umgeschaltet.

Wenn gerade eine Messung stattfindet, schaltet der Multiplexer erst danach den Kanal um.

Beitrag #7586301 wurde von einem Moderator gelöscht.
Moderator (Firma: Titel) Persönliche Seite #7586650
Lesenswert?

Christoph M. schrieb:

Der Multiplexer wird bei jedem analogRead() gesetzt.

Man kann den Multiplexer auch per Hand setzen. Hier für den ATmega4809 auf dem Arduino Every, der hat kein ADMUX-Register mehr, das heißt jetzt MUXPOS:

1
  an4 = analogRead(A4); // Poti
2
  ADC0.MUXPOS = 3;      // Mux auf A0 schalten (= PD3 = AIN3 bei Ard. Every)
3
  delay(1);
4
  an0 = analogRead(A0); // Spannungsteiler einlesen

Im Terminal sieht das dann gleich aus wie mit dem "unnötigen" analogRead():

1
:
2
Spannungsteiler: 502 - Poti: 445
3
Spannungsteiler: 502 - Poti: 445
4
Spannungsteiler: 502 - Poti: 422
5
Spannungsteiler: 502 - Poti: 64
6
Spannungsteiler: 502 - Poti: 0
7
Spannungsteiler: 502 - Poti: 0
8
Spannungsteiler: 502 - Poti: 708
9
Spannungsteiler: 502 - Poti: 1023
10
Spannungsteiler: 502 - Poti: 1023
11
Spannungsteiler: 502 - Poti: 723
12
Spannungsteiler: 502 - Poti: 483
13
Spannungsteiler: 502 - Poti: 483
14
:

Auch ohne Kondensator C1 lädt sich der Sampling-Kondensator am Spannungsteiler schnell genug auf für ein stabiles Messergebnis.

Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7586657
Lesenswert?

Norbert schrieb:

Ja, aber nur wenn man die Sampling-Rate mit einem Abreiß-Kalender misst.

Ja, das ist nunmal so bei hochimpedanten Quellen: die können nicht schnell gewandelt werden, weil sie den Kondesator nicht schnell genug nachladen können.

Mir war allerdings neu, dass es mit nur 1ms Wartezeit überhaupt schon so gut funktioniert. Wenn man den Mux dann z.B. vor einer Displayausgabe umschaltet, muss man gar nicht warten, weil die sowieso schon länger braucht.

Bei 500µs wirkt sich die Ladezeit des Sample-Kondensators so langsam aus:

1
  an4 = analogRead(A4); // Poti
2
  ADC0.MUXPOS = 3;      // Mux auf A0 umschalten (PD3 auf Arduino Every)
3
  delayMicroseconds(500);
4
  an0 = analogRead(A0); // Spannungsteiler einlesen

+-2 Digits machen sich dann bemerkbar:

1
:
2
Spannungsteiler: 502 - Poti: 518
3
Spannungsteiler: 502 - Poti: 584
4
Spannungsteiler: 503 - Poti: 1023
5
Spannungsteiler: 503 - Poti: 1023
6
Spannungsteiler: 504 - Poti: 1023
7
Spannungsteiler: 502 - Poti: 531
8
Spannungsteiler: 501 - Poti: 375
9
Spannungsteiler: 501 - Poti: 177
10
Spannungsteiler: 500 - Poti: 0
11
Spannungsteiler: 500 - Poti: 0
12
Spannungsteiler: 501 - Poti: 73
13
Spannungsteiler: 502 - Poti: 421
14
Spannungsteiler: 502 - Poti: 524
15
Spannungsteiler: 502 - Poti: 524
16
:
Moderator (Firma: Titel) Persönliche Seite #7586675
Lesenswert?

Norbert schrieb:

Da würde mich doch glatt interessieren wie die Ergebnisse aussehen, wenn man kontinuierlich mit höchster Sample-Frequenz abwechselnd die Eingänge (bei Poti 0 oder Vref) einliest.

Dazu habe ich das Programm umgeschrieben. Jetzt werden dauernd abwechselnd der Spannungsteiler (gepuffert mit C1) und das Poti eingelesen. Und nach jeweils 4600 solcher Wandlungen (= ca. 1s) wird das Ergebnis ausgegeben:

1
void loop() {
2
  uint16_t an0, an4 = 9999;
3
  static uint16_t i = 4600;
4
  
5
  an4 = analogRead(A4); // Poti
6
  an0 = analogRead(A0); // Spannungsteiler einlesen
7

8
  if (!i--)
9
  {
10
     i = 4600;
11
     Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4));
12
  }
13
}

Kann der Spannungsteiler den 10nF schneller nachladen als der Sample-C ihn entlädt?

Nein, das klappt nicht, das ist das Ergebnis:

1
:
2
Spannungsteiler: 501 - Poti: 503
3
Spannungsteiler: 501 - Poti: 501
4
Spannungsteiler: 501 - Poti: 501
5
Spannungsteiler: 557 - Poti: 821
6
Spannungsteiler: 593 - Poti: 1023
7
Spannungsteiler: 594 - Poti: 1023
8
Spannungsteiler: 575 - Poti: 900
9
Spannungsteiler: 547 - Poti: 749
10
Spannungsteiler: 499 - Poti: 486
11
Spannungsteiler: 485 - Poti: 413
12
Spannungsteiler: 454 - Poti: 247
13
Spannungsteiler: 416 - Poti: 38
14
Spannungsteiler: 405 - Poti: 0
15
Spannungsteiler: 405 - Poti: 0
16
Spannungsteiler: 455 - Poti: 263
17
Spannungsteiler: 503 - Poti: 520
18
Spannungsteiler: 509 - Poti: 545
19
Spannungsteiler: 509 - Poti: 545

Der Spannungsteilerwert zappelt vom "Normalwert" 502 ausgehend um +-100 in Richtung Poti.

Dann habe ich die Abtastrate noch ein wenig höher geschraubt, indem ich nur den MUX zwischen Spannungsteiler und Poti umschalte: Das erhöht die "Umschaltrate" und damit die "Umladungsrate" um fast den Faktor 100 auf 390000 pro Sekunde und ergibt dann dieses Bild:

1
void loop() {
2
  uint16_t an0, an4 = 9999;
3
  static uint32_t i = 390000;
4

5
  ADC0.MUXPOS = 12; // MUX auf A4 Poti (= PF2 = AIN12 auf Arduino Every)
6
  ADC0.MUXPOS = 3;  // Mux auf A0 Spannungsteiler (= PD3 = AIN3 auf Arduino Every)
7

8
  if (!i--)
9
  {
10
     an0 = analogRead(A0); // Spannungsteiler einlesen
11
     an4 = analogRead(A4); // Poti
12
     i = 390000;
13
     Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4));
14
  }
15
}

Das Ergebnis ist erwartbar, die Spannung am Pufferkondensator wird noch deutlich mehr vom Poti beeinflusst:

1
:
2
Spannungsteiler: 501 - Poti: 510
3
Spannungsteiler: 501 - Poti: 510
4
Spannungsteiler: 517 - Poti: 528
5
Spannungsteiler: 580 - Poti: 597
6
Spannungsteiler: 729 - Poti: 760
7
Spannungsteiler: 946 - Poti: 995
8
Spannungsteiler: 974 - Poti: 1023
9
Spannungsteiler: 843 - Poti: 882
10
Spannungsteiler: 592 - Poti: 610
11
Spannungsteiler: 451 - Poti: 454
12
Spannungsteiler: 158 - Poti: 135
13
Spannungsteiler: 30 - Poti: 0
14
Spannungsteiler: 30 - Poti: 0
15
Spannungsteiler: 126 - Poti: 103
16
Spannungsteiler: 305 - Poti: 296
17
Spannungsteiler: 466 - Poti: 474
18
Spannungsteiler: 509 - Poti: 519
19
Spannungsteiler: 509 - Poti: 519
20
:
#7586741
Lesenswert?

Lothar M. schrieb:

Michael schrieb:

Die 100 ms habe ich gewählt, weil ich zu faul war nachzusehen, wieviel zeit die Umschaltung der MUX braucht und ich genug Zeit habe.

Du hast das Problem nicht erfasst: der Mux wird mit dem Start der Wandlung umgeschaltet. Du musst also

  1. eine Wandlung auf dem hochohmigen Eingang machen
  2. dann warten
  3. dann nochmal wandeln und
  4. die zweite Wandlung als Ergebnis nehmen.

das wusste ich nicht, dass der MUX erst mit dem Start der Wandlung umgeschaltet wird. Das heißt doch, dass die erste Messung prinzipiell für die Tonne ist. Wenn ich das richtig verstehe, ist das immer so. Kann ich das noch irgendwo nachlesen, wie lange das dauert. Habe auch noch in keinem Beispiel gesehen, dass bei Mittelwertmessungen der erste Wert nicht berücksichtigt wird. Das ist blöd, da insbesondere bei kleinen n-Zahlen das ins Gewicht fallen kann. M.

Moderator (Firma: Titel) Persönliche Seite #7586768
Lesenswert?

Michael schrieb:

das wusste ich nicht, dass der MUX erst mit dem Start der Wandlung umgeschaltet wird. Das heißt doch, dass die erste Messung prinzipiell für die Tonne ist.

Wenn die Quellimpedanz so niedrig ist, wie das Datenblatt es verlangt (10kOhm), dann reicht selbst beim schnellsten ADC-Timing die Zeit aus, um den 15pF-Kondensator für hinreichende Genauigkeit (= mit den Fehlergrenzen, die das Datenblatt verspricht) aufzuladen.

Kann ich das noch irgendwo nachlesen, wie lange das dauert.

Ja, im Datenblatt des verwendeten µC. Es lohnt sich generell, das Datenblatt des verwendeten ICs zu kennen und Informationen daraus herleiten zu können.

Habe auch noch in keinem Beispiel gesehen, dass bei Mittelwertmessungen der erste Wert nicht berücksichtigt wird.

Ja, warum auch? Und ganz viele verwenden "Mittelwertmessungen" dann auch dafür, irgendwelche andere Designschwächen zu übertünchen.

Übrigens: der Medianwert ist bei Sensoren oft besser als der übliche arithmetische Mittelwert.

das wusste ich nicht, dass der MUX erst mit dem Start der Wandlung umgeschaltet wird.

Du kannst dank Google und Internet den Sourcecode der Routinen ganz einfach näher anschauen. Probiers aus und du siehst: die Ausrede "das wusste ich nicht", die gilt nicht. Nicht mal sich selber gegenüber.

Mein Prinzip ist da ganz einfach: traue keiner Funktion, die du nicht selber geschrieben oder von der du den Code nicht verstanden hast.

#7586924
Lesenswert?

Lothar M. schrieb:

Kann ich das noch irgendwo nachlesen, wie lange das dauert.

Ja, im Datenblatt des verwendeten µC. Es lohnt sich generell, das Datenblatt des verwendeten ICs zu kennen und Informationen daraus herleiten zu können.

LOL.

Aber wie lange es dauert, einen 15pF Kondensator bei gegebener Quellimpedanz aufzuladen, wird nicht im Datenblatt stehen - das muss man schon rechnen ...

@Lothar M. Du hast die Problematik schön aufgezeigt. Aber nicht alles. Es ist ja nicht gesagt, dass a) der MUX umgeschaltet wird und b) dass die zu messende Spannung am ADC-Eingang konstant ist (dann muss ich sie doch gar nicht messen - nur einmal mit meinem Spannungsmesser, oder? 😀). Ich will nur damit sagen, dass die Problematik mit hochohmigen Quellen und zu hoher Abtastrate schon vorhanden ist, wenn sich die zu messende Spannung ändert.

#7586926
Lesenswert?

Lothar M. schrieb:

Michael schrieb:

das wusste ich nicht, dass der MUX erst mit dem Start der Wandlung umgeschaltet wird. Das heißt doch, dass die erste Messung prinzipiell für die Tonne ist.

Wenn die Quellimpedanz so niedrig ist, wie das Datenblatt es verlangt (10kOhm), dann reicht selbst beim schnellsten ADC-Timing die Zeit aus, um den 15pF-Kondensator für hinreichende Genauigkeit (= mit den Fehlergrenzen, die das Datenblatt verspricht) aufzuladen.

Da hätte der Hinweis gereicht, du brauchst einen Impedanzwandler, wie ich beim ersten Post befürchtet hatte.

Kann ich das noch irgendwo nachlesen, wie lange das dauert.

Ja, im Datenblatt des verwendeten µC. Es lohnt sich generell, das Datenblatt des verwendeten ICs zu kennen und Informationen daraus herleiten zu können.

Da stimme ich 100% zu aber 200 Seiten sind halt nicht so schnell zu lesen, geschweige denn alle Fakten intus zu haben. Vermute mal Du hast auch länger als 3 Tage beim ersten Mal dazu gebraucht.

Habe auch noch in keinem Beispiel gesehen, dass bei Mittelwertmessungen der erste Wert nicht berücksichtigt wird.

Ja, warum auch? Und ganz viele verwenden "Mittelwertmessungen" dann auch dafür, irgendwelche andere Designschwächen zu übertünchen.

Übrigens: der Medianwert ist bei Sensoren oft besser als der übliche arithmetische Mittelwert.

https://support.zendesk.com/hc/de/articles/4408839402906-Mittelwert-vs-Median

So pauschal kann man das nicht sagen, denn das hängt von der Verteilung ab (lässt sich mit einem CHI-Quadrat-Anpassungstest ermitteln. Bei einer Normalverteilung ist das eh egal, da Modal, Median und ar. Mittelwert identisch sind. Für sehr kleine Stichproben stimme ich Deiner Aussage zu, dass man mit dem Median auf der sichereren Seite liegt.

das wusste ich nicht, dass der MUX erst mit dem Start der Wandlung umgeschaltet wird.

Du kannst dank Google und Internet den Sourcecode der Routinen ganz einfach näher anschauen. Probiers aus und du siehst: die Ausrede "das wusste ich nicht", die gilt nicht. Nicht mal sich selber gegenüber.

Mein Prinzip ist da ganz einfach: traue keiner Funktion, die du nicht selber geschrieben oder von der du den Code nicht verstanden hast.

Das wusste ich nicht, das die Aussage ich wusste es nicht eine Ausrede ist. Ich halte diese Aussage für ein Faktum. Du scheinst zu den Glücklichen zu gehören, die entweder alles wissen oder alles verstehen. Da beneide ich Dich, auch darum, dass Du Dir die Mühe machst alles zu verstehen. Hut ab. Thread kann geschlossen werden werden. Habe gennug Hinweise bekommen. Leider keine Antwort wie hoch nun der Eingangswiderstand wirklich ist.

#7586940
Lesenswert?

Lothar M. schrieb:

Kann ich das noch irgendwo nachlesen, wie lange das dauert.

Ja, im Datenblatt des verwendeten µC. Es lohnt sich generell, das Datenblatt des verwendeten ICs zu kennen und Informationen daraus herleiten zu können.

Da stimme ich 100% zu aber 200 Seiten sind halt nicht so schnell zu lesen, geschweige denn alle Fakten intus zu haben. Vermute mal Du hast auch länger als 3 Tage beim ersten Mal dazu gebraucht.

Konnte meine Antwort leider nicht mehr ergänzen, deshalb neuer Post. Aus dem Ersatzschaltbild Fig 17-8 auf Seite 129 ergibts sich bei 100k eine Zeitkonstante t = 1,4 us, d.h. der C ist nach 10us (7*t) fast vollständig aufgeladen, so dass der Eingangswiderstand nahezu unendlich ist (entspricht einer Abtastrate von 50kHz. Vielleicht verstehe ich das Ersatzschaltbild aber auch nicht.

#7586971
Lesenswert?

Nur so aus Interesse: was sind eigentlich die Voraussetzungen? Also offenbar zwei Eingangsspannungen, jede mit Ri= 5 MOhm. a) in welchem Spannungsbereich liegen diese b) wie schnell ändern sie sich c) sollen die beiden Kanäle gleich behandelt werden d) welche Referenz wird verwendet e) welche Genauigkeit wird verlangt f) welche Programmierumgebung g) was funktioniert am anscheinend bereits vorhandenen Programm nicht

Moderator (Firma: Titel) Persönliche Seite #7587057
Lesenswert?

Michael schrieb:

Für sehr kleine Stichproben stimme ich Deiner Aussage zu, dass man mit dem Median auf der sichereren Seite liegt.

Du selber hast eine "kleine" Stichprobe in Form von "kleinen n-Zahlen" ins Rennen geführt.

Michael schrieb:

Da hätte der Hinweis gereicht, du brauchst einen Impedanzwandler, wie ich beim ersten Post befürchtet hatte.

Weil du die Nebenbedingungen (Abtasthäufigkeit, Signalfrequenz, Signalform) nicht mitgeteilt hast, kann diese Aussage so pauschal nicht stimmen. Wenn du wie gesagt "100 ms Wartezeit" hast (z.B. hochohmiger Spannungsteiler an einem Akku), dann musst du nichts puffern, das habe ich in meinen Tests oben klar gezeigt.

Und ein Impedanzwandler an einer Quelle mit 5M Innenwiderstand ist auch eine nicht ganz triviale Aufgabe.

Klaus H. schrieb:

Es ist ja nicht gesagt, dass a) der MUX umgeschaltet wird

Ja, das ist mein Beispiel "Test 1". Aber Michael schaltet den Mux tatsächlich um, er hat "2 Eingänge mit Gleichspanung" zu wandeln.

b) dass die zu messende Spannung am ADC-Eingang konstant ist

Die Spannung muss nur für die Wandlungszeit so "konstant" sein, dass sie sich weniger als 1 LSB ändert. Sonst kommt eben ein Ergebnis heraus, das irgendwo zwischen dem Minimal- und dem Maximalwert liegt. Aber auch das ist hier dank der zu messenden Gleichspannung kein Problem.

Michael schrieb:

sich bei 100k eine Zeitkonstante t = 1,4 us, d.h. der C ist nach 10us (7*t) fast vollständig aufgeladen

Richtig, er ist in diesem Fall bis auf 1 LSB des Endwerts aufgeladen. Und das bei einer Quellimpedanz von annähernd 0 Ohm.

Michael schrieb:

das die Aussage ich wusste es nicht eine Ausrede ist.

Es ist natürlich zuallererst einfach die Wahrheit. Korrekt hättest du aber sagen müssen: "Ich habe nicht nachgeschaut, was der Sourcecode macht."

Michael schrieb:

Du scheinst zu den Glücklichen zu gehören, die entweder alles wissen oder alles verstehen.

Ich will es wissen. Auch ich habe in diesem Thread was gelernt. Irgendwann brauche ich das wieder. Deshalb habe ich mir den Thread in die Bookmarks genommen.

Da beneide ich Dich, auch darum, dass Du Dir die Mühe machst alles zu verstehen

...bzw. es wenigstens zu wollen. ;-)

Ich habe aus Erfahrung gelernt: es gibt nichts Schlimmeres als eine voreilige "Zufriedenheit" mit einer naheliegenden Erklärung. Das fällt einem irgendwann wieder auf den Kopf.

#7587202
Lesenswert?

Michael schrieb:

Das heißt doch, dass die erste Messung prinzipiell für die Tonne ist.

Nur wenn du die Referenz umgeschaltet hast, sonst nicht (vor allem nicht beim Wechsel des Channels).

Zitat aus dem dem Datenblatt zum ATmega328-328P, Kapitel 28.5.2 ADC Voltage Reference:

The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.

Moderator (Firma: Titel) Persönliche Seite #7587247
Lesenswert?

Uwe B. schrieb:

Bei den STM32 gibt es in den Datenblaettern eine Tablelle Table "Maximum ADC RAIN". Gibt es das nicht bei Atmel/Microchip?

Nur vereinzelt. Allerdings ist der Leckstrom bei fast allen AVR auf typ. 5nA spezifiziert. Da muss man sich bei weiten nicht so viele Gedanken machen, wie wenn der wie beim STM32 gut 200x größer bei +-1µA ist.

In der Tabelle fain -> RAIN erscheint mir angesichts des typischen Leckstroms ein Widerstand um 1 MOhm bei niedrigen Abtastraten aber als sehr sportlich...

M. K. schrieb:

Zitat aus dem dem Datenblatt zum ATmega328-328P, Kapitel 28.5.2 ADC Voltage Reference:

The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.

Den Grund hat Peter weiter oben genannt, als

er schrieb:

Die Bandgap ist sehr hochohmig angeschlossen, so daß ein Delay notwendig ist.

Dieses Delay wird durch die zusätzliche, zu verwerfende, Messung erzeugt.

Angehängte Dateien:
#7587278
Lesenswert?

Lothar M. schrieb:

Uwe B. schrieb:

Bei den STM32 gibt es in den Datenblaettern eine Tablelle Table "Maximum ADC RAIN". Gibt es das nicht bei Atmel/Microchip?

Nur vereinzelt. Allerdings ist der Leckstrom bei fast allen AVR auf typ. 5nA spezifiziert. Da muss man sich bei weiten nicht so viele Gedanken machen, wie wenn der wie beim STM32 gut 200x größer bei +-1µA ist.

Naja, so groß ist der Unterschied nicht, bei beiden (ATtiny85, STM32F103) steht 1µA Max im Datenblatt. Der typische Wert ist natürlich bei beiden kleiner, das erklärt die Messergebnisse hier. Aber wenn ein grenzwertiger Chip warm wird, darf er eben auch 1µA fließen lassen. Und nein, das ist dann keine Fälschung ;)

In der Tabelle fain -> RAIN erscheint mir angesichts des typischen Leckstroms ein Widerstand um 1 MOhm bei niedrigen Abtastraten aber als sehr sportlich...

Unterschreib; aber siehe oben...

Edit: nebenbei: STM32L051xxx3 z.B. sind mit ±50nA max. bei 125°C spezifiziert

#7587530
Lesenswert?

S. L. schrieb:

Nur so aus Interesse: was sind eigentlich die Voraussetzungen? Also offenbar zwei Eingangsspannungen, jede mit Ri= 5 MOhm.

nein, nur 1 Eingang (Fotowiderstand als Dämmerungssensor: Spannungsteiler Vcc-R1-Rfoto-GND). Der andere Spannungsteiler zur Vcc-Überwachung: Vcc-100k-100k-GND).

a) in welchem Spannungsbereich liegen diese

Referenzspannung wurde zu 2,56V gewählt, Widerstände berechnet dass Vcc>Ue>Uref/2

b) wie schnell ändern sie sich

näherungsweise im Minutenbereich.

c) sollen die beiden Kanäle gleich behandelt werden

nicht wichtig, Vcc_Messung erfolgt einmal täglich beim Übergang Hell-Dunkel, bestimmt vom Dunkelwiderstand des Rfoto.

d) welche Referenz wird verwendet

2,56V

e) welche Genauigkeit wird verlangt

10% sind ausreichend, also nicht so wichtig.

f) welche Programmierumgebung

Atmel Studio 7.0

g) was funktioniert am anscheinend bereits vorhandenen Programm nicht

Programm läuft fehlerfrei, musste den Vorwiderstand des Rfoto deutlich anpassen. Rfoto gemessen bei der gewünschten Dämmerung 5.217 k. R1 errechnet zu 5M. Für den definierten Vcc-Breich (4,2V>Vcc>3,5V) lieferte der Spannungsteiler Vi>Uref/2.

Nach dem Anschließen dieses Spannungsteilers musste ich experimentell einem Widerstand von 1,1 M wählen, um in den geforderten Uref-Bereich zu kommen. Deshalb meine Frage nach dem Innenwiderstand (gemeint Gleichstrom, aber nicht beschrieben) ob den jemand kennt. Daraus hatte ich geschlussfolgert, dass er ca. 1M beträgt. Hatte aber im Datenblatt nichts gefunden.

Gruß M.

#7587547
Lesenswert?

Lothar M. schrieb:

Michael schrieb:

Für sehr kleine Stichproben stimme ich Deiner Aussage zu, dass man mit dem Median auf der sichereren Seite liegt.

Du selber hast eine "kleine" Stichprobe in Form von "kleinen n-Zahlen" ins Rennen geführt.

richtig, um zu verdeutliche, dass man so pauschal Deine Aussage nicht zutrifft.

Michael schrieb:

Da hätte der Hinweis gereicht, du brauchst einen Impedanzwandler, wie ich beim ersten Post befürchtet hatte.

Weil du die Nebenbedingungen (Abtasthäufigkeit, Signalfrequenz, Signalform) nicht mitgeteilt hast, kann diese Aussage so pauschal nicht stimmen. Wenn du wie gesagt "100 ms Wartezeit" hast (z.B. hochohmiger Spannungsteiler an einem Akku), dann musst du nichts puffern, das habe ich in meinen Tests oben klar gezeigt.

Da gebe ich Dir unumwunden recht, dass meine Frage nicht präzise untermauert war. Das war meine "Betriebsblindheit", denn für mich und nur für mich war es klar, dass ich den Gleichstromeingangswiderstand meinte. Für mich war das eben völlig klar, sonst hätte ich von Eingangsimpedanz gesprochen und dass die frequenzabhängig ist, weiß ich sehr wohl. Insofern wäre die Frage ohne Kenntnis weiterer Schaltungsparameter nicht zu beantworten.

Und ein Impedanzwandler an einer Quelle mit 5M Innenwiderstand ist auch eine nicht ganz triviale Aufgabe.

Das weiß ich, habe früher diese Problem öfter gehabt, nämlich bei der Ableitung von intrazelluren Potentialen (Neuronen).

Klaus H. schrieb:

Es ist ja nicht gesagt, dass a) der MUX umgeschaltet wird

Ja, das ist mein Beispiel "Test 1". Aber Michael schaltet den Mux tatsächlich um, er hat "2 Eingänge mit Gleichspanung" zu wandeln.

Ja der MUX wird umgeschaltet. Beim Eintreten der Dämmerung und bis zum Eintreten des Tageslichtes nicht mehr.

b) dass die zu messende Spannung am ADC-Eingang konstant ist

Die Spannung muss nur für die Wandlungszeit so "konstant" sein, dass sie sich weniger als 1 LSB ändert. Sonst kommt eben ein Ergebnis heraus, das irgendwo zwischen dem Minimal- und dem Maximalwert liegt. Aber auch das ist hier dank der zu messenden Gleichspannung kein Problem.

Ja die Spannung ist konstant und die Genauigkeit 1LSB ist nicht erforderlich.

Michael schrieb:

sich bei 100k eine Zeitkonstante t = 1,4 us, d.h. der C ist nach 10us (7*t) fast vollständig aufgeladen

Richtig, er ist in diesem Fall bis auf 1 LSB des Endwerts aufgeladen. Und das bei einer Quellimpedanz von annähernd 0 Ohm.

Wie Du auf 0 Ohm kommst verstehe ich nicht. Meines Wissens genügt es, dass Rquelle << Re ist un Re wird von der geforderten Genauigkeit bestimmt. Glaube Du hast Dich mit der Aussage 0 Ohm wieder weit aus dem Fenster gelehnt.

Michael schrieb:

das die Aussage ich wusste es nicht eine Ausrede ist.

Es ist natürlich zuallererst einfach die Wahrheit. Korrekt hättest du aber sagen müssen: "Ich habe nicht nachgeschaut, was der Sourcecode macht."

Meinen Sourcecode kenne ich schon und manch andere Sourcecode verstehe ich halt nicht ohne deutlich viel Zeit zu investieren.

Michael schrieb:

Du scheinst zu den Glücklichen zu gehören, die entweder alles wissen oder alles verstehen.

Ich will es wissen. Auch ich habe in diesem Thread was gelernt. Irgendwann brauche ich das wieder. Deshalb habe ich mir den Thread in die Bookmarks genommen.

Das ist gut, ich auch.

Da beneide ich Dich, auch darum, dass Du Dir die Mühe machst alles zu verstehen

...bzw. es wenigstens zu wollen. ;-)

Das versuche ich auch, aber manchmal ist halt der Aufwand sehr groß und der "Schweinehund" gewinnt.

Ich habe aus Erfahrung gelernt: es gibt nichts Schlimmeres als eine voreilige "Zufriedenheit" mit einer naheliegenden Erklärung. Das fällt einem irgendwann wieder auf den Kopf.

uneingeschränkte Zustimmung. Hinzu kommt man sollte nicht auf einem Podest stehen und meinen immer Recht zu haben. Auch das habe ich lernen müssen und Du wirst es auch noch.

#7587552
Lesenswert?

Und wie der Teufel es will finde ich heute auf Seite 167 des Datenblatts Punkt 21.7 ADC Characteristiks die Aussage Rain - Analog Input Resistance - 100 MOhm. Da frage ich mich nun um so mehr, warum meine Eingangsspannung (Vcc-5MOhm-Rfoto(5,1MOhm)-GND zusammenbricht. Dasa dürfte ja nicht sein.

M.

#7587567
Lesenswert?

an Michael:

Danke für die ausführliche Antwort. Die Anforderungen sind völlig unproblematisch - theoretisch. Praktisch aber bleibt die Frage, die Sie sich eben auch stellten. Also ich hatte das Problem nicht (siehe irgendwo ganz oben), folglich ist Ihr Aufbau nicht in Ordnung, oder der ATtiny85; wenn vorhanden, es mit einem zweiten probieren, oder zumindest mal die beiden Eingänge tauschen. Vielleicht war auch die Messung des Dämmerungswertes (die 5,217 MOhm) falsch.

Der ADC-Programmteil wäre noch von Interesse.

PS: Vielleicht irgendetwas mit ADLAR ...

Moderator (Firma: Titel) Persönliche Seite #7587607
Lesenswert?

Michael schrieb:

Und wie der Teufel es will finde ich heute auf Seite 167 des Datenblatts Punkt 21.7 ADC Characteristiks die Aussage Rain - Analog Input Resistance - 100 MOhm.

So ziemlich das Gleiche stand schon im ersten Post nach deiner Frage. Und da steht im DB sicher auch, dass das ein typischer Wert ist, der bei typischer Versorgung und Zimmertemperatur gilt.

warum meine Eingangsspannung (Vcc-5MOhm-Rfoto(5,1MOhm)-GND zusammenbricht. Dasa dürfte ja nicht sein.

Das ist die zäheste Salami, die seit langem hier in hauchdünnsten Scheibchen geschnitten und serviert wurde.

Wie wärs, wenn du einfach mal deine Schaltung, den Aufbau und das zugehörige Programm postest. Und dann auch noch beschreibst, was damit passiert und was du stattdessen erwartet hättest.

#7587667
Lesenswert?

  1. Ich glaube es ist genug nun.
  2. Die Hardware tut was sie soll.
  3. Der Code tut was er soll.
  4. Vorwiderstand für den Dämmerungssensor so gewählt, dass es passt.
  5. Vcc 3,7V. Umgebungstemperatur 18-23grd.
  6. Für S.L. Code in der Anlage und für die, die interessiert, ist ja keine Hexerei.
  7. Für S.L. meine Antwort zu c) stimmt nicht (sollen die beiden Kanäle gleich behandelt werden nicht wichtig, Vcc_Messung erfolgt einmal täglich beim Übergang Hell-Dunkel, bestimmt vom Dunkelwiderstand des Rfoto.) Das wollte ich so tun, war mir aber zu aufwendig, Deshalb in der while Schleife. Denke aber, dass das zeitunkritisch ist.

Drückt mal alle für unsere Handballer heute die Daumen.

M.

#7587996
Lesenswert?

Lothar M. schrieb:

Lass mich nochmal kurz mutmaßen und hellsehen: Michael will, dass endlich Schluss ist und seine Ruhe haben.

Du schriebst Lasst mich NOCHMAL, ich hatte Deinen Posts nicht entnommen, dass Du mutmaßt und hellsiehst. Du musst es besser wissen.

Wenn Du anderer Meinung bist, es gäbe noch etwas substanzielles zu sagen, refistrierre ich das ja, denn der Post ist gebookmarkt bei mir. Vielleicht ist Dir auch mein Beitrag vom 24.01.2024 15:53 entgangen. "Und wie der Teufel es will finde ich heute auf Seite 167 des Datenblatts Punkt 21.7 ADC Characteristiks die Aussage Rain - Analog Input Resistance - 100 MOhm." Damit ist meine Frage ja beantwortet. Vielleich sollte das jetzt aber nur eine kleine Spitze gegen mich sein.

Gruß M.

#7588003
Lesenswert?

Das Fragezeichen bezog sich darauf, dass ich keinen "Code in der Anlage" finden kann.

Noch eine Anmerkung: bei den Photowiderständen, mit denen ich zu tun hatte, ist der Helligkeitsunterschied zwischen z.B. 5 und 2 MOhm recht gering, vielleicht haben Sie sich da täuschen lassen.

#7588028
Lesenswert?

S. L. schrieb:

Das Fragezeichen bezog sich darauf, dass ich keinen "Code in der Anlage" finden kann.

Noch eine Anmerkung: bei den Photowiderständen, mit denen ich zu tun hatte, ist der Helligkeitsunterschied zwischen z.B. 5 und 2 MOhm recht gering, vielleicht haben Sie sich da täuschen lassen.

Datei in der Anlage. muss ich wohl etwas versemmelt haben. meine Hilfsmessungen

Lux n R KOhm Bedingung
1.554 1 4 am Fenster bewölkt
30 2 11 Stube bewölkt
0 3 387 vorhänge zu dämmerung bewölkt
0 4 550 vorhänge zu dämmerung fernseher aus
0 5 1.156 Jalousien runter/fernseher an/laptop bildschirm an 0 6 11.790 Jalousien runter/fernseher aus/laptop BS an 0 7 100.000 Jalousien runter/fernseher aus/laptop BS aus

die 0 Lux konnte ich nicht genauer auflösen, habe mich für die Auswahl des Referenzwertes auf meine visuelle Einschätzung verlassen (Bei welcher Dämmerung soll LED einschalten).

M.

Angehängte Dateien:
#7588153
Lesenswert?

Mit diesem reduzierten Programm habe ich, bei Ucc= 4.0 V und R1= 4,7 MOhm, für Rph eine Schaltschwelle von ca. 4 MOhm.

PS:

Und, wie immer, der generelle Hinweis: eine Test-Software so einfach&kurz wie nur irgend möglich halten, besonders aber bei Verdacht auf Chip- oder sonstige Hardwareprobleme - Letztere sind für sich genommen schon unangenehm genug.

Angehängte Dateien:
#7588183
Lesenswert?

S. L. schrieb:

Mit diesem reduzierten Programm habe ich, bei Ucc= 4.0 V und R1= 4,7 MOhm, für Rph eine Schaltschwelle von ca. 4 MOhm.

PS:

Und, wie immer, der generelle Hinweis: eine Test-Software so einfach&kurz wie nur irgend möglich halten, besonders aber bei Verdacht auf Chip- oder sonstige Hardwareprobleme - Letztere sind für sich genommen schon unangenehm genug.

Das ist ja keine Testsoftware. Fürf den Hinweis danke ich, das wäre ein Leichtes gewesen. Den Rain hatte ich nicht getestet, nur die Funktionsweise der ADCs.

#7588262
Lesenswert?

an Michael:

Das könnte ja die Ursache sein. da der PullUp im Ersatzschaltbild parallel zu Rain liegt.

Kaum - der Effekt geht ja genau in die andere Richtung: dass Sie R1 verkleinern mussten (1.1 MOhm statt 5), wäre nur durch einen Pulldown zu erklären.

PS: ... so, wie es auch durch einen zu kleinen Rain verursacht würde.

Aber mit dem Testprogramm können Sie jetzt ja recht schnell einen Chipfehler ausschließen und einen Softwarefehler bestätigen (oder eben umgekehrt).

#7590790
Lesenswert?

S. L. schrieb:

an Michael:

Das könnte ja die Ursache sein. da der PullUp im Ersatzschaltbild parallel zu Rain liegt.

Kaum - der Effekt geht ja genau in die andere Richtung: dass Sie R1 verkleinern mussten (1.1 MOhm statt 5), wäre nur durch einen Pulldown zu erklären.

Hier irrte ich. Meine Aussage gilt nur für Wechselstromersatzschild, also für diesen Fall nicht.

... so, wie es auch durch einen zu kleinen Rain verursacht würde.

Aber mit dem Testprogramm können Sie jetzt ja recht schnell einen Chipfehler ausschließen und einen Softwarefehler bestätigen (oder eben umgekehrt).

Nun habe ich alle 10 Attinys getestet, 7 davon mit zu kleinem Rain. Sind nun gekennzeichnet. Für alle die es interessiert die main nochmals im anhang.

Gruß M und danke für die Mühe.

Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7590818
Lesenswert?

Michael schrieb:

Nun habe ich alle 10 Attinys getestet, 7 davon mit zu kleinem Rain.

Weil es gar nicht so arg einfach ist, in ICs "eingebaute" Widerstände im 100 MOhm-Bereich zuverlässig zu messen: mit welchem Messaufbau und unter welchen Testbedingungen hast du den Rain gemessen?

Und welche Werte für Rain hast du dabei bei deinen 10 Prüflingen erhalten?

die main nochmals im anhang.

In diesem Kommentar taucht immer noch zweimal "PB2" und zweimal "0010" auf:

1
ADC3 for input (PB2) = 0010; ADC2 (PB4) = 0010; ADC1 (PB2) = 0001; ADC0 (PB5) = 0000

Mein Motto dazu: besser kein Kommentar als ein mehrfach Falscher.

#7590946
Lesenswert?

Lothar M. schrieb:

Michael schrieb:

Nun habe ich alle 10 Attinys getestet, 7 davon mit zu kleinem Rain.

Weil es gar nicht so arg einfach ist, in ICs "eingebaute" Widerstände im 100 MOhm-Bereich zuverlässig zu messen: mit welchem Messaufbau und unter welchen Testbedingungen hast du den Rain gemessen?

Und welche Werte für Rain hast du dabei bei deinen 10 Prüflingen erhalten?

zwischen 800k und 1,2M

die main nochmals im anhang.

In diesem Kommentar taucht immer noch zweimal "PB2" und zweimal "0010" auf:

1
> ADC3 for input (PB3) = 0010; ADC2 (PB4) = 0010; ADC1 (PB2) = 0001; ADC0 
2
> (PB5) = 0000
3
>

danke, habe ich korrigiert, kommt von copy and paste, wenn nicht alles intus ist.

Mein Motto dazu: besser kein Kommentar als ein mehrfach Falscher.

Da ich nicht ständig mit den uC arbeite, meist nur von Dezember bis Februar (haben eine kleine Hobbyimkerei fast 200 km vom Wohnort, so dass der Rest des Jahres ausgefüllt ist, brauche ich die Kommentare, um mich später bei Bedarf wieder reinzufitzen bzw, nachzuschlagen, wie war denn das. So wie ich mich auch immer erstmal wieder in die IDE, KICAD, FREECAD und ein Flussdiagrammprogramm wieder einarbeiten muss. Früher brauchte ich das auch nicht. Gruß M.

(Firma: Gast) #7590953
Lesenswert?

Michael schrieb:

Mein Motto dazu: besser kein Kommentar als ein mehrfach Falscher.

Da ich nicht ständig mit den uC arbeite, meist nur von Dezember bis Februar (haben eine kleine Hobbyimkerei fast 200 km vom Wohnort, so dass der Rest des Jahres ausgefüllt ist, brauche ich die Kommentare, um mich später bei Bedarf wieder reinzufitzen bzw, nachzuschlagen, wie war denn das.

Falsche Sicht! Deine Bienen haben damit nichts zu tun.

Mein Rat: Der Code sagt, WAS getan wird. Der Kommentar erklärt das WARUM

Beherzigt man das, kann es keine solchen (selbst/fremd)Verwirrungen geben.

Und wie schon gesagt: Die Schuld auf die Bienen zu schieben, ist absurd.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren