Ersteinmal Danke an alle, für die Anteilnahme,
wie erwartet, gibt es hier unterschiedlichen Ansichten.
Was ist richtig, was ist falsch, ich weis es auch nicht,
hatte aber grade folgendes Gedankenspiel:
Warum gibt es Spannungsreferenzen zu kaufen die so krumm sind:
2,048V oder 4,096V
Weil sie genau 2^11 bzw. 2^12 entsprechen
Somit hat man bei der entsprechenden Bitbreite pro ADU Schritt exakt 1 mV.
Man erspart sich damit umständliche Berechnungen und ich
vermute mal das war der Sinn dieser krummen Referenzen.
Wenn dem so ist, dann ergibt ein maximaler Aducount beim 11 Bitter
Wertebereich 0..0x7FF (2047 dez) einen Spannungsbereich von 0..2047 Millivolt
Die volle Referenzspannung wird dann nie erreicht, es fehlt ein LSB
so wie zum Beispiel bei Atmel beschrieben.
Dies entspräche der Berechnung Vref/(2^n)
auf den 8 Bitter bezogen wäre es also einem Divisor von 256 = Vref/n
Die Diskussion kann man vermutlich ewig weiterführen,
ich finde aber die Standpunkte/Erläuterungen von euch auch recht interessant.
Wie ja schon Eingangs erwähnt geht es mir nicht darum ob meine Werte aufs letzte Bit stehen,
sondern um die Festlegung, sofern es eine gibt, wie die korrekte Berechnung aussehen müsste.
Es gibt hier z.B. einen Calculator:
https://www.electronicdeveloper.de/A...Converter.aspx
Dieser basiert meiner Meinung nach auf (n-1)
Bei einem 2 Bit Wandler würde ich es wie folgt interpretieren.
Ref/n 5V/4 Schritte = 1,25V Schrittweite
ADC
0 -> 0,00 V 0..1,24
1 -> 1,25 V 1,25..2,49
2 -> 2,50 V 2,50..3,74
3 -> 3,75 V 3,75.....auch bis über Vref
----
@Klebwax:
Im Prinzip ist mir das auch egal wie die Berechnung erfolgt, da ich es auch völlig anders berechne.
Beim Kalibrieren lege ich eine möglichst konstante Spannung an den Messeingang und merke mir den
aktuellen Aducount. Dann weis ich, dass bei dieser Spannung mein Aducount xxx beträgt.
Den Rest kann ich dann berechnen und verlasse mich darauf, dass sich die Messkette linear verhält.
Zudem ist die Bitbreite des ADU damit völlig eagl, wobei "mein Code" hier auf maximal 16 Bit beschränkt ist.
Code:
U16 CalAtmV = 5000; // Kalibriert wird bei exakt 5,000 Volt
U16 CalCount; // gemessener Aduwert bei der Kalibrierspannung
/*----------------------------------------------------------------------------*/
// Die Umrechnung ADU Count in Millivolt findet dann hier statt:
U16 Calculate_mV(U16 adc_count)
{ S32 value; // we need < 32 Bit value for calculation
value = adc_count; // convert 16 bit value to 32 Bit
value *= CalAtmV; // multiply with Calibration Point Voltage
value /= CalCount; // divide with ADC Calibration count at Calibration Voltage
return (U16)value; // return with 16 Bit result in mV
}
/*----------------------------------------------------------------------------*/
Weiter Diskussionenn habe ich unter anderem auch hier gefunden:
https://www.mikrocontroller.net/topic/261692
Bei Maxim habe ich folgendes gefunden:
Siro
Lesezeichen