Forum: Mikrocontroller und Digitale Elektronik 10bit AD-Wandler auf 12bit


von Diri (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich muss durch Oversampling meinen 10bit ADWandler auf 12bit erhöhen,um 
die Genaugigkeit zu verbessern. Das Prinzip hab ich grob verstanden,bloß 
ich bin einfach nicht in der Lage dies auf Atmel umzusetzen.
Programmieren ist grade nicht meine Stärke...

1AD-Wert macht schon einen Höhenunterschied von 10m
--> Professor will es auf 2,5m haben)


ich hoffe es kann mir wer da behilflich sein :)

von m.n. (Gast)


Lesenswert?


von Harald W. (wilhelms)


Lesenswert?

Diri schrieb:

> ich muss durch Oversampling meinen 10bit ADWandler auf 12bit erhöhen,um
> die Genaugigkeit zu verbessern.

Das geht nicht. Du kannst zwar die Auflösung auf 12 Bit steigern,
nicht aber die Genauigkeit.
https://www.mikrocontroller.net/articles/Aufl%C3%B6sung_und_Genauigkeit

von Frank aus Köln (Gast)


Lesenswert?

Schau mal hier, wird zwar nicht genauer, ist aber vielleicht das was du 
suchst.
Beitrag "ADC und Fixed-Point Arithmetik"

Gruß

Frank aus Köln

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Mich beschleichen da zwar leichte Zweifel, ob das dann so klappt, wie 
du's gerne haettest, aber der simpelste Weg waere wohl:
Du nimmst je 4 Samples à 10bit und summierst die auf zu einem 12bit 
Wert. Fertsch.

"Schoener" gehts auch, wenn man dann eben mehr als 4 Samples nimmt und 
die dann auch "schoener" (als mit einem FIR mit Koeffizienten [1,1,1,1]) 
tiefpassfiltert.

Gruss
WK

von Benedikt S. (Gast)


Lesenswert?


von Burgas (Gast)


Lesenswert?

Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling

von Harald W. (wilhelms)


Lesenswert?

Burgas schrieb:

> Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling

Ja, da steht auch "resolution" und nicht "accuracy".

von Frank aus Köln (Gast)


Lesenswert?

Schrub ich doch :)

Gruß

Frank aus Köln

von Harald W. (wilhelms)


Lesenswert?

Frank aus Köln schrieb:

> Schrub ich doch :)

Du ja, Diri nicht.

von Diri (Gast)


Lesenswert?

ich schätz dann mal er will eine höhere Auflösung ^^
an den Bauteilen darf ich nichts ändern , es muss durch Oversampling 
gelöst werden

von Diri (Gast)


Lesenswert?

uint16_t getAdcValue (void)
 {
   uint16_t AvgCount = 0;
   uint32_t AvgSum = 0;

   for (AvgCount = 0; AvgCount < 256; AvgCount ++) {
     ADCSRA |= (1 << ADSC);                            // AD Wandler 
starten
     while (ADCSRA & (1 << ADSC));                     // AD Wandlung 
fertig ?
     AvgSum += ADC;                                   // Mittelwert über 
256 Messungen
   }
   return (AvgSum >> 6);                                // Oversampling 
12 BIT
 }
brauch ich dann das hier ??

von Frank aus Köln (Gast)


Lesenswert?

Ja, das ist Dein gewünschtes Oversampling.
Du kannst dann noch die linearen Fehler rausrechnen wenn Du die Offset 
und Gain korrektur durchführst. Steht oben im #define.
Dann kann dir auch die meist falsche interne Referenz egal sein.

Gruß

Frank aus Köln

von MaWin (Gast)


Lesenswert?

Diri schrieb:
> ich schätz dann mal er will eine höhere Auflösung

Gespaltene Persönlichkeit ?

Diri schrieb:
> an den Bauteilen darf ich nichts ändern

Ohne ausreichendes Rauschen wird das aber nichts.

von Karl (Gast)


Lesenswert?

Harald W. schrieb:
> Ja, da steht auch "resolution" und nicht "accuracy".

Vielleicht mal mehr als die Überschrift lesen:

"In most cases 10-bit resolution is sufficient, but in some cases higher 
accuracy is desired."

Bei einem mit symetrischen Fehler behafteten Signal kann man sehr wohl 
die Genauigkeit durch Oversampeling erhöhen.

Harald W. schrieb:
> Das geht nicht. Du kannst zwar die Auflösung auf 12 Bit steigern,
> nicht aber die Genauigkeit.

Wie hoch die Genauigkeit ist, kannst du nicht beurteilen. Wenn das 
Signal auf 14 bit genau ist, wird durch Oversempeling das Signal auch 
genauer. Typisches mikrocontroller.net Bla Bla...

von Diri (Gast)


Lesenswert?

ich mein mit "er" meinen Prof. der will es ja unbedingt so haben ^^

von Wolfgang (Gast)


Lesenswert?

Diri schrieb:
> 1AD-Wert macht schon einen Höhenunterschied von 10m
> --> Professor will es auf 2,5m haben)

Was für einen Sensor benutzt du da?
Der ADC wird doch sicher mit irgendetwas elektrischem gefüttert.

von Diri (Gast)


Lesenswert?

Wolfgang schrieb:
> Was für einen Sensor benutzt du da?
> Der ADC wird doch sicher mit irgendetwas elektrischem gefüttert.

 einen MPXHZ6115A6u

von Sascha (Gast)


Lesenswert?

Erfahrungsgemäß ist der interne ADC der AVR µC deutlich besser als im 
Datenblatt steht, und das selbst bei höheren ADC-Frequenzen als 500kHz 
noch.

Das klappt so schon ganz gut.

Wenn hohe Samplingraten gefordert sind, sollte man gucken dass man den 
FIR-Filter mit Potenzen von 2 aufbaut, dann kann man auf kostspielige 
Divisionen verzichten. Matlab hilft.

von W.S. (Gast)


Lesenswert?

Dergute W. schrieb:
> Du nimmst je 4 Samples à 10bit und summierst die auf zu einem 12bit
> Wert. Fertsch.

Nee, da kommt auch bloß Mist raus. Ich hatte das so gemacht, daß ich auf 
das Meßsignal einen winzigen Sägezahn draufmoduliert hab und dann so 
über 128 Samples oder mehr gemittelt habe. Man braucht dazu nur ein 
Portbein, einen C und 2 Widerstände.

Ja, das gibt mehr Auflösung, aber keinesfalls mehr an Genauigkeit. Ist 
aleo eher was für's Auge...

W.S.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

MaWin schrieb:
> Ohne ausreichendes Rauschen wird das aber nichts.
Meist ist schon in der Signalquelle genug Rauschen...

von Burgas (Gast)


Lesenswert?

Harald W. schrieb:
> Burgas schrieb:
>
>> Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling
>
> Ja, da steht auch "resolution" und nicht "accuracy".

Harald, die Wahrscheinlichkeit, dass du diese AppNote gelesen hast, 
setzte ich mit Null an.

von m.n. (Gast)


Lesenswert?

Diri schrieb:
> Wolfgang schrieb:
>> Was für einen Sensor benutzt du da?
>> Der ADC wird doch sicher mit irgendetwas elektrischem gefüttert.
>
>  einen MPXHZ6115A6u

Da habe ich ja meine Zweifel, ob 12 Bit für diesen hochwertigen 
Druckaufnehmer genug sind. Der hat schließlich eine Genauigkeit von +/- 
1,5%. Dagegen sieht jede Küchenwaage blass aus.

von Diri (Gast)


Lesenswert?

Danke an alle für eure Hilfe :)
ich schau morgen dann mal ob ichs irgendwie hinkrieg^^

von c-hater (Gast)


Lesenswert?

MaWin schrieb:

> Ohne ausreichendes Rauschen wird das aber nichts.

Das ist vollkommen korrekt und diese Erfordernis wird oft massiv 
unterschätzt (nicht zuletzt von diversen Regulars dieses Forums).

Einige dieser Lichtgestalten haben sogar richtige "Versuchsreihen" 
geposteted, die ihrer Meinung nach bewiesen haben, das die Erhöhung 
der Auflösung garnicht funktioniert, dass die entsprechende Atmel-AN 
also kompletter Bullshit ist.

Dabei haben sie eigentlich nur bewiesen, dass sie keine Ahnung von 
Mathematik haben. Oder zumindest keine Ahnung von analoger Hardware...

Es ist nämlich überaus leicht, den AD-Wandler selber genügend Rauschen 
produzieren zu lassen. Und das wirkt sich dann sogar noch in anderer 
Richtung günstig aus...

Man muss Datenblätter eben nicht nur lesen und sträflich umsetzen 
können, sondern manchmal auch einfach verstehen und fantasievoll 
umsetzen.

Vorgefertigte C-Libs sind hier nicht unbedingt als Katalysator für die 
Gewinnung neuer Erkenntnisse geeignet. Nichtmal dann, wenn sie aus 
eigener Feder stammen und nicht per C&P beschafft wurden, was ich o.g. 
Personenkreis durchaus zugestehen würde, der überwiegenden Mehrheit der 
C-User allerdings erfahrungsgemäß nicht.

Für beide aber gilt gleichermaßen: Sie glauben ganz fest: Es gibt nix, 
was meine einmal fertige, portable, was auch immer Lib nicht kann...


[EDIT Moderator: Beleidigung gelöscht]

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

Nimm doch einfach die Random-Funktion des Compilers, um Dir noch 2 Bits 
in die Tasche zu lügen. Das macht überhaupt keinen Unterschied.

Ich hatte früher auch mal überlegt, mit der PWM ein Dreiecksignal auf 
den Eingang zu modulieren, um mehr Bits rauszukitzeln.
Aber einen SPI-ADC mit der gewünschten Auflöung zu nehmen, ist einfacher 
und außerdem funktioniert es.

von Frank aus Köln (Gast)


Lesenswert?

@peda
Darf er ja nicht, sonst könnter er ja auch den BMP nehmen

Gruß

Frank aus Köln

von Ralph (Gast)


Lesenswert?

Also eine Analogschaltung die sooo gut ist, das aus einem 10 Bit ADC 
auch wirklich 10 verwertbare Bits raus kommen ist schon eine 
Herausforderung.

Wahrscheinlich sind auf der Platine nur 8 Bits repräsentativ für den 
Analogwert und die letzten beiden Bits einfach nur Müll.
Alles was da rüber hinausgeht wird wirklich sehr aufwändig.

Wenn man das dann mit Oversampling hochrechnet gibt das halt 9 Bit 
Nutzwert und 3 Bit Müll.

Aus Scheiße lässt sich halt kein Gold machen, egal wie viel man rechnet.

Da hilft nur die richtige Hardware zu verwenden.

von Burgas (Gast)


Lesenswert?

Ralph schrieb:
> Also eine Analogschaltung die sooo gut ist, das aus einem 10 Bit ADC
> auch wirklich 10 verwertbare Bits raus kommen ist schon eine
> Herausforderung.
>
> Wahrscheinlich sind auf der Platine nur 8 Bits repräsentativ für den
> Analogwert und die letzten beiden Bits einfach nur Müll.
> Alles was da rüber hinausgeht wird wirklich sehr aufwändig.
>
> Wenn man das dann mit Oversampling hochrechnet gibt das halt 9 Bit
> Nutzwert und 3 Bit Müll.
>
> Aus Scheiße lässt sich halt kein Gold machen, egal wie viel man rechnet.
>
> Da hilft nur die richtige Hardware zu verwenden.

Du reihst Behauptung an Behauptung - nur allein sehe ich weder einen 
Beleg noch einen Beweis für diese. Sei doch bitte so lieb und reiche 
beides nach.

Ansonsten: Wie sagt es der Pinguin so schön: Wenn man keine Ahnung hat 
...

von Harald W. (wilhelms)


Lesenswert?

Burgas schrieb:

>>> Das ist deine AppNote: AVR121: Enhancing ADC resolution by oversampling
>>
>> Ja, da steht auch "resolution" und nicht "accuracy".
>
> Harald, die Wahrscheinlichkeit, dass du diese AppNote gelesen hast,
> setzte ich mit Null an.

Ich hab mich nur auf die Überschrift bezogen, habe aber selbst schon
Oversampling benutzt. Allerdings nicht, um die Genauigkeit zu steigern,
sondern um mir ein Antialiasingfilter zu ersparen.

von Benedikt S. (Gast)


Lesenswert?

Ich empfehle Abbildung 8 in diesem Datenblatt

http://www.nxp.com/files/sensors/doc/data_sheet/MPXA6115A.pdf

Der Fehler des Sensor ist Rechteck verteilt und hat +-1,5 KPa
Bei 15 kPa also sogar 10% Fehler.
Bei 115 kPa immerhion noch 1%.

Selbst wenn du 10 Bit Auflösung hast mach das dein Messergbniss nicht 
besser. Alle Stellen die durch eine hohe Auflösung bekommst sind NICHT 
SIGNIFIKANT! Sie sehen zwar gut aus sind aber Wertlos!

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Diri schrieb:
> ich muss durch Oversampling meinen 10bit ADWandler auf 12bit erhöhen,um
> die Genaugigkeit zu verbessern.

So ziemlich alle Leser Deines Beitrages sind sich (hoffentlich) einig, 
dass Du die Genauigkeit nicht verbessern kannst.

> Das Prinzip hab ich grob verstanden,

Scheinbar nicht, sonst könntest Du GENAUIGKEIT und AUFLÖSUNG 
unterscheiden.

> 1AD-Wert macht schon einen Höhenunterschied von 10m
> --> Professor will es auf 2,5m haben)

Zeige bitte die Aufgabe im originalen Wortlaut und den dazu gehörigen 
Schaltplan.

von Carsten R. (kaffeetante)


Lesenswert?

Ohne Rauschen geht es nicht! Das steht auch in der App-Note. Kleines 
(Gedanken)experiment:

Wenn kein Rauschen vorhanden ist, nimm mal immer nur die ersten n Bit 
und betreibe damit Oversampling. Was du dann ausrechnest vergleichst du 
mit dem Messergebnis mit voller Bitzahl.

Besonders anschaulich wird es, wenn man nur wenige Bit nimmt, n also 
klein ist. Ohne Rauschen bleiben die ersten n Bit stabil. Man erhält 
also immer die identischen Werte für diese ersten n Bits, egal wie oft 
man die Messung durchführt. Da ist es dann egal wie oft am 
"oversampled". Der Informationsgewinn ist "NULL"! Man kann daraus keine 
Schlüsse ziehen wie das nächste Bit aussieht.

Ob ich nun das ganze mit nur den ersten n Bit, oder mit den ganzen 10 
Bit veranstalte, ändert nichts am Prinzip. Ich habe nur ein kleines n 
vorgeschlagen, damit es anschaulicher wird und damit man Bit n+1 noch 
real messen kann um es mit dem Oversamplingergebnis vergleichen kann.

Ferner reicht nicht irgendein Rauschen. Es muß bestimmte Anforderungen 
erfüllen. Aber bislang haben wir noch gar kein Rauschen, zumindest ist 
es bislang noch nicht erwähnt worden beim Versuchsobjekt.

Welcher AVR genau wird eingesetzt? Manche haben die Möglichkeit das 
Signal zu verstärken um so lokal für einen Ausschnitt des Wertebereichs 
eine höhere Auflösung zu erzielen. Je nach Aufbau hat man ja auch nicht 
das volle Spektrum, sondern das Signal wird in einem bestimmten Bereich 
liegen.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

c-hater schrieb:
> MaWin schrieb:
>
>> Ohne ausreichendes Rauschen wird das aber nichts.
>
> Das ist vollkommen korrekt
> [...]
> [zig weitere Zeilen Einleitung]
> [mit den obligatorischen Seitenhieben]
> [...]
> [EDIT Moderator: Beleidigung gelöscht]

Warum hörst Du nach der Einleitung auf? Ich dachte Jetzt kommt der 
Hauptteil in dem Du erklärst wie man mit phantasievollem Umgang mit dem 
Datenblatt dem ADC beibringt aus sich heraus ein geeignetes Rauschen mit 
geeigneter Amplitude und Verteilung zu produzieren?

: Bearbeitet durch Moderator
von Karl (Gast)


Lesenswert?

Benedikt S. schrieb:
> Ich empfehle Abbildung 8 in diesem Datenblatt
>
> http://www.nxp.com/files/sensors/doc/data_sheet/MPXA6115A.pdf
>
> Der Fehler des Sensor ist Rechteck verteilt und hat +-1,5 KPa
> Bei 15 kPa also sogar 10% Fehler.
> Bei 115 kPa immerhion noch 1%.
>
> Selbst wenn du 10 Bit Auflösung hast mach das dein Messergbniss nicht
> besser. Alle Stellen die durch eine hohe Auflösung bekommst sind NICHT
> SIGNIFIKANT! Sie sehen zwar gut aus sind aber Wertlos!


Üblicher weise wird der Fehler immer auf den Nennwert des Aufnehmers 
bezogen, und nicht auf den Istwert. Ferner ist die Aussage ob es 
SIGNIFIKANT ist oder nicht nicht durch dich zu entscheiden. Wenn für die 
Ergebnisse z.B. nur die relative Änderung maßgebend ist, der Fehler des 
Sensors aber z.B. nur ein Offset ist, dann kann dass Ergebnis besser 
werden. Weiterhin besteht die Möglichkeit den Sensor einzumessen und so 
die Genauigkeit zu verbessern. Wichtiger als die Angabe einer absoluten 
Genauigkeit ist für die meisten Aufgaben die Wiederholbarkeit.

von chris_ (Gast)


Lesenswert?

>So ziemlich alle Leser Deines Beitrages sind sich (hoffentlich) einig,
>dass Du die Genauigkeit nicht verbessern kannst.

Ich nicht.
Definiere doch mal "Genauigkeit" eines AD-Wandlers. Kann die Genauigkeit 
höher als die Auflösung ( Quantisierungsfehler ) sein?
Falls nein: Könnte die Genauigkeit steigen, wenn die Auflösung steigt?

von Diri (Gast)


Lesenswert?

Also zu meinem Problem nochmal:
Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der 
AD-Wert um 1.1 , was einen Höhenunterschied von ca.10m beträgt
und das reicht meinen Professor nicht aus ist ihm zu viel
er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m 
Unterscheiden statt den vorherigen 10m

microcontroller--Atmega48PA

Ich hoffe es ist jetzt etwas klarer geworden was gefragt ist
habt bissle Rücksicht bin was Programmieren/Digitaltechnik noch relativ 
am anfang..^^

von m.n. (Gast)


Lesenswert?

"Dann gib dem Kaiser, was des Kaisers ist."
Oder für Ungläubige: gehorche Deinem Professor und mache, was er sagt.
Schwachsinn ist es allemal.

von Falk B. (falk)


Lesenswert?

@  Diri (Gast)

>Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der
>AD-Wert um 1.1 ,

Kaum, denn der AD-Wandler liefert Integerzahlen, keine Fließkommazahlen.
Außerdem, wenn du nur um 1m die Höhe des Sensor veränderst, wieso sollte 
das dann 10m Höhenunterschied entsprechen?

> was einen Höhenunterschied von ca.10m beträgt
>und das reicht meinen Professor nicht aus ist ihm zu viel

???
Zuviel?

>er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m
>Unterscheiden statt den vorherigen 10m

Also will er mehr AUFLÖSUNG! Nicht GENAUIGKEIT!

>Ich hoffe es ist jetzt etwas klarer geworden was gefragt ist
>habt bissle Rücksicht bin was Programmieren/Digitaltechnik noch relativ
>am anfang..^^

Was dich aber nicht von der Pflicht entbindet, die Netiquette zu 
berücksichtigen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Diri schrieb:
> Wenn ich mit meiner Platine (+Drucksensor) 1 m hochgehe ,ändert sich der
> AD-Wert um 1.1 , was einen Höhenunterschied von ca.10m beträgt
Du hast einen Rechenfehler im Programm. Der könnte aber auch auf einem 
vorausgehenden Denkfehler basieren...

Ähmmm, nachgeschaut: es ist beides zusammen und dazu noch ein 
Programmierfehler. Du solltest deine Umrechnung unbedingt nochmal 
ansehen:
1
  lcd_putc(i/100 + 0x30);      // Hunderter ausgeben (°C Zehner)
2
  i = i%100;
3
  lcd_putc(i/10 + 0x30);      // Zehner ausgeben (°C Einer)
4
    
5
  lcd_putc(i%10 + 0x30);
6
  lcd_putc(0x2E);  
7
  lcd_putc(i%10 + 0x30);

>>> 1AD-Wert macht schon einen Höhenunterschied von 10m
Was ist hier "1 AD-Wert"?

BTW:
ad_wert1 = ADCL + (ADCH<<8);      // 10-Bit-Wert berechnen
Lass das doch den Compiler machen, der kann das schon:
ad_wert1 = ADC;

: Bearbeitet durch Moderator
von Harald W. (wilhelms)


Lesenswert?

Diri schrieb:

> er meint wenn ich Oversampling nutze ,würde die Höhe sich dann um 2.5m
> Unterscheiden statt den vorherigen 10m

Es ist aber gut möglich, das meim nächsten sampeln der Wert auf einmal
10...15m danebenliegt, ohne das Du die Höhe geändert hast. Deine
ganze Messeinrichtung ist vermutlich für eine präzise Höhenmessung
viel zu ungenau.

von Diri (Gast)


Lesenswert?

Lothar M. schrieb:
> Ähmmm, nachgeschaut: es ist beides zusammen und dazu noch ein
> Programmierfehler. Du solltest deine Umrechnung unbedingt nochmal
> ansehen:  lcd_putc(i/100 + 0x30);      // Hunderter ausgeben (°C Zehner)
>   i = i%100;
>   lcd_putc(i/10 + 0x30);      // Zehner ausgeben (°C Einer)
>
>   lcd_putc(i%10 + 0x30);
>   lcd_putc(0x2E);
>   lcd_putc(i%10 + 0x30);
>
ja seh grad das meine Nachkommastelle falsch ist

von Wolfgang (Gast)


Lesenswert?

Diri schrieb:
> 1AD-Wert macht schon einen Höhenunterschied von 10m
> --> Professor will es auf 2,5m haben)

Ich hoffe mal, dass es ums Prinzip geht und nicht darum, eine 
Höhenmessung mit besser als 10m Auflösung zu machen.

Sonst würde ich auch den Weg von Peter empfehlen und mal über die 
Bauteile nachdenken. Mit einem BMP280 oder besser noch MS5611 wäre man 
mindestens einen Faktor 5 besser, als der Professor möchte. Intern 
verwenden die auch mehr oder weniger kräftiges Oversampling.

Peter D. schrieb:
> Aber einen SPI-ADC mit der gewünschten Auflöung zu nehmen, ist einfacher
> und außerdem funktioniert es.

von W.S. (Gast)


Lesenswert?

chris_ schrieb:
> Definiere doch mal "Genauigkeit" eines AD-Wandlers. Kann die Genauigkeit
> höher als die Auflösung ( Quantisierungsfehler ) sein?

Nanana..

Also, die Genauigkeit eines ADC kann tatsächlich deutlich höher sein als 
dessen Auflösung.

Stell dir dafür (Gedankenexperiment) einen 1 Bit ADC vor, 
Eingangs-Spannungsbereich von 0 bis 5 Volt.

Man kann dafür ein TTL-Gatter nehmen oder einen Präzisions-Komparator.

Beim TTL-Gatter ist uns allen klar, daß dessen Schaltschwelle irgendwo 
im verbotenen Bereich liegt, also gerade ausreichend um sagen zu können 
"Eingang ist etwa 0 Volt oder etwa 5 Volt".

Aber beim Komparator kann die Präzision der Schaltschwelle bedeutend 
besser sein als die lumpige Auflösung von nur 1 Bit. Da kann man bei 
geeignetem Komparator durchaus sagen "Eingang ist kleiner als 2.49 Volt 
oder eben nicht".

ABER: Wer als Hersteller eine Technologie beherrschen würde, die 
deutlich mehr Genauigkeit als die vorgesehene Auflösung bringen würde, 
der würde seine Auflösung erhöhen, solange bis er grad noch so "no 
missing codes" behaupten kann.

Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur 
10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener 
Fertigungsaufwand.

Was also kann man mit einem aufgeprägten Sägezahn oder Rauschen 
erzielen? Man kann die Übertragungskurve zwischen den 10 Bit des 
Wandlers auffüllen mit Zwischenwerten, die die Auflösung tatsächlich 
erhöhen. Aber das ist dann keine Gerade mehr, sondern ein eher 
unregelmäßig eckiger Verlauf, weil eben die Schaltschwellen des ADC 
nicht mehr hergeben und ihrerseits NICHT auf einer wirklichen Geraden 
liegen.

W.S.

von batman (Gast)


Lesenswert?

W.S. schrieb:
> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur
> 10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener
> Fertigungsaufwand.

Der Fertigungsprozeß ist relativ unabhängig davon, was man für eine 
Schaltung damit baut, insbesondere wieviel Bit sie am Ende ausgeben 
soll. Einen besonders schlechten Analogteil zu fertigen, bloß um ihn 
einer niedrigen digitalen Auflösung der Schaltung anzupassen, halte ich 
für wenig plausibel.

von chris_ (Gast)


Lesenswert?

>Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur
>10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener
>Fertigungsaufwand.

Mittle doch mal eine Stunde lang das Signal des Drucksensors und schaue, 
ob Du einen Höhenunterschied genauer als die Angesprochenen 10m 
detektieren kannst ( falls Du es schaffst, den Luftdruck während den 
Messungen konstant zu halten )

von Harald W. (wilhelms)


Lesenswert?

W.S. schrieb:

> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur
> 10 Bit liefert.

Das umgekehrte dagegen findet man deutlich häufiger. :-)

von Peter D. (peda)


Lesenswert?

Man könnte versuchen, mit dem internen Komparator und etwas Hühnerfutter 
einen Dual-Slope-ADC zu programmieren. Damit erreicht man deutlich 
höhere Auflösungen.

von W.A. (Gast)


Lesenswert?

batman schrieb:
> Einen besonders schlechten Analogteil zu fertigen, bloß um ihn
> einer niedrigen digitalen Auflösung der Schaltung anzupassen, halte ich
> für wenig plausibel.

Um so plausibler ist es, dass beim Fertigungsprozess unterschiedlich 
gute Wandler raus kommen und dass sie dann den Stempel je nach Güte 
bekommen.

von batman (Gast)


Lesenswert?

Aha und dann? Werden die Chips nach Güte belabelt, z.B. als 
"Atmega8-super", "Atmega8-standard", "Atmega8-economy"?

von chris_ (Gast)


Lesenswert?

>Man könnte versuchen, mit dem internen Komparator und etwas Hühnerfutter
>einen Dual-Slope-ADC zu programmieren. Damit erreicht man deutlich
>höhere Auflösungen.

Der Parallax Propeller macht mit drei normalen Digital IOs einen ADC mit 
14Bit Auflösung:
https://www.parallax.com/sites/default/files/downloads/AN008-SigmaDeltaADC-v1.0.pdf

Eigentlich wollte ich das Prinzip schon immer mal auf einem AVR mit 
seinem Comparator probieren, aber leider kam ich nie dazu ...

von W.S. (Gast)


Lesenswert?

Peter D. schrieb:
> einen Dual-Slope-ADC zu programmieren.

Halte ich für Quatsch, denn guck mal was die meisten Anfragenden hier in 
diesem Forum so für Fragen stellen. Selbst wenn einer nur 3 LED's in 
Abhängigkeit von seiner Batteriespannung leuchten lassen will, hat er 
Probleme mit seiner main(). Ach nö, für einen guten DualSlope-ADC und 
den auch noch in Software würde es ne Kombination von HW-Verständnis 
und Programmierfähigkeiten brauchen. Aber da kenne ich jemanden, der 
mal behauptet hatte, daß sein ATtiny oder so ähnlich nur deshalb so gut 
funktionieren würde, weil er das Abtasttheorem nicht kennt. Gelle?

Abgesehen davon dürfte heutzutage SigmaDelta wesentlich eher angesagt 
sein. Sowas gibt's in Form kleiner Achtbeiner mit weniger als 1 mA 
Gesamtstromaufnahme und 20 Bit, von denen man mindestens 17 Bit 
gebrauchen kann. Da lohnt sich ein DualSlope in Software nicht mehr 
wirklich. Guck dir mal an, was die Leute von Freescale bei ihren Kinetis 
für Kopfstände anstellen, um ihre internen 16 Bit DualSlope-ADC's zum 
benutzbaren Laufen zu bringen. Nee, wer sich das freiwillig antut, 
hat's verdient...

W.S.

von chris_ (Gast)


Lesenswert?

>Aber da kenne ich jemanden, der
>mal behauptet hatte, daß sein ATtiny oder so ähnlich nur deshalb so gut
>funktionieren würde, weil er das Abtasttheorem nicht kennt. Gelle?

Ah, Du spielst auf den Thread an, in dem Du das Problem nicht verstanden 
hattest:
Beitrag "Re: Nicht-Sinus DDS"

von c-hater (Gast)


Lesenswert?

W.S. schrieb:

> Fazit: Man findet ganz gewiß keinen ADC, der 12 bit genau ist aber nur
> 10 Bit liefert. Das wäre seitens des Herstellers rausgeschmissener
> Fertigungsaufwand.

Das ist richtig. Aber genauso richtig ist: man findet ganz sicher 
AD-Wandler, die nur auf 10 Bit genau sind und deshalb auch nur 10 Bit 
liefern, aber eine Auflösung von 12 Bit liefern können (wenn man genug 
Zeit für die Messung hat).

Genau das ist der springende Punkt, den die ganzen Blindflansche einfach 
nicht verstehen...

Ich versuche mal, das an einem Beipiel darzustellen. Sagen wir mal, es 
geht darum, einen bestimmten typischen Punkt im Verlauf der 
Ladespannungskurve des Ladeprozesses eines Akkus möglichst genau zu 
bestimmen. Die absolute Spannung, an der dieser Punkt auftritt, ist 
wohlgemerkt nicht bekannt! Weil sie z.B. von der (eventuell nicht 
messbaren) Innentemperatur des Akkus abhängt, dem Alterungszustand 
seiner Elektroden und was weiss ich noch für Parametern.

Für diese Aufgabe kann man natürlich einen AD-Wandler entsprechend hoher 
Genauigkeit einsetzen. *ABER*: (und das ist genau der Punkt) man muss es 
nicht! Es genügt auch einer, der mit den Tricks der Wissenden nur eine 
hinreichend hohe Auflösung liefern kann. Denn wie bereits aus der 
Aufgabe bekannt, ist die absolute Größe hier ziemlich irrelevant, es 
kommt nur auf die korrekte Bewertung des (relativen) Verlaufs der Kurve 
an.

Sprich: Das System ist in der Lage, den Ladestrom bei der bestmöglichen 
Spannung korrekt anzupassen. Es könnte allerdings nur mit der 
tatsächlichen Genauigkeit des AD-Wandlers angeben, bei welcher 
Spannung es das getan hat. Aber das interessiert ja auch niemanden 
wirklich!

Begreifst du jetzt in etwa, worum es geht?

von manmanman (Gast)


Lesenswert?

Frank aus Köln schrieb:
> Schau mal hier, wird zwar nicht genauer, ist aber vielleicht das
> was du
> suchst.
> Beitrag "ADC und Fixed-Point Arithmetik"
>
> Gruß
>
> Frank aus Köln

lol die Appnote. Lamentiert rum von wegen:

"Mitteln mehrere Messungen erhöht nicht die Auflösung, es sei denn die 
Anzahl ist 4^n (n:=Anzahl extra Bits) und man führt einen entsprechenden 
Rechtsshift aus".

Ja ne is klar.

Außerdem: Oversampling verbessert die Genauigkeit.
Genauigkeit wird als Messunsicherheit ausgedrückt. Diese kann in eine 
stochastische und in eine systematische Abweichung unterteilt werden.
Die stochastische ergibt sich aus stdev(x)/sqrt(N).
Ist ja auch logisch: Das Rauschen wird verringert -> höhere Präzision -> 
höhere Genauigkeit bei gleicher systematischer Abweichung.

Auch müsste man laut der Appnote extra Rauschen einfügen, falls keins 
vorhanden ist. Kann das jemand erklären? :D

von Tom (Gast)


Lesenswert?

manmanman schrieb:
> Auch müsste man laut der Appnote extra Rauschen einfügen, falls keins
> vorhanden ist. Kann das jemand erklären? :D

Ja, guck dir mal Temperaturwerte von einem DS18B20 an. Trotz beliebigem 
Oversampling bekommst du bei einer langsam steigenden Temperatur keinen 
stufenlosen Temperaturverlauf gemessen, weil dem Sensor das Rauschen 
fehlt.
Beitrag "Re: DS18S20 One Wire Temperatur Sensor mit 16 Bit -> ich brauch aber nur 10 Bit"

von chris_ (Gast)


Lesenswert?

>Außerdem: Oversampling verbessert die Genauigkeit.

Der akademischen Korrektheit geschuldet: Es gibt schon gewisse 
Voraussetzungen an den Zufallsprozess. Das Rauschen das Rauschsignal 
muss statistisch unabhängig vom Messprozess sein. Wenn z.B. irgend ein 
Anteil mit der Abtastfrequenz des ADC oder irgendwie sonst mit der 
Taktfrequenz der MCU korreliert ist, mittelt es sich nicht weg.

von Sascha (Gast)


Lesenswert?

Die Störstrahlung der CPU ist schon erlaubt.
Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und 
her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert 
erhält.

Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.

Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC 
Takt macht das LSB schönes Dithering.

@manmanman: Der Zweck ist Dithering.

Da hab ich schon nen 256 Byte Ringpuffer gebaut und da mal mit 
verschiedenen FIR Filtern ausprobiert was so rauskommt.

Ich glaube am Ende blieb ein mittelsymmetrischer FIR mit 7 Taps und 
Faktoren in Zweierpotenzen übrig.
Durch Zusammenklappen in der Mitte ließ sich das zu 4 Taps 
zusammenschrumpfen die allesamt nur noch aus Bitshift und Addition 
bestanden, gefolgt von einer einzelnen Bitshiftoperation ganz am Ende, 
die die kostspielige Division ersetzt.

Das ging alles ganz wunderbar, minimale Aussenbeschaltung vom µC (nur 
ein Tiefpassfilter zwecks Antialiasing).

von Falk B. (falk)


Lesenswert?

@ Sascha (Gast)

>Die Störstrahlung der CPU ist schon erlaubt.

Nö.

>Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und
>her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert
>erhält.

>Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.

>Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC
>Takt macht das LSB schönes Dithering.

Und schon wieder lehnst du dich viel zu weit aus dem Fenster und 
trompetest Unsinn herum. Gratulation!

Der chris_ hat es richtig beschrieben!!!

von Peter D. (peda)


Lesenswert?

Eine andere Möglichkeit wäre ein SAR-Wandler mit dem Komparator, 2 
gleichen Kondensatoren und 4 Analogschaltern (1*74HC4066).

von Falk B. (falk)


Lesenswert?

@Peter Dannegger (peda)

>Eine andere Möglichkeit wäre ein SAR-Wandler mit dem Komparator, 2
>gleichen Kondensatoren und 4 Analogschaltern (1*74HC4066).

Wollen wir nicht auch noch gleich unsere Transistoren selber feilen?
So ein Quark. Die Zeiten der selbstgestrickten ADCs sind lange vorbei. 
Heute gibt es TONNENWEISE gute und sehr gute ADCs zum TOP-Preis, wie man 
sie selber/diskret nie hinbekommt. Die nimmt man und ist fertig.
Alles andere sind nur nette Spielereien und Prinzipdemonstrationen.

von Tom (Gast)


Lesenswert?

Sascha schrieb:
> Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen.

Dann hast du wohl andere Erfahrungen gemacht

Tom schrieb:
> Ja, guck dir mal Temperaturwerte von einem DS18B20 an.

von Sascha (Gast)


Lesenswert?

Falk B. schrieb:
> @ Sascha (Gast)
>
>>Die Störstrahlung der CPU ist schon erlaubt.
>
> Nö.
>
>>Geht ja nur drum, dass das letzte Bit des ADC Messergebnisses hin und
>>her toggelt, sodass man bei der Mittelwertbildung den Zwischenwert
>>erhält.
>
>>Da ist in der Appnote ja sogar ne schöne Visualisierung zu drin.
>
>>Erfahrungsgemäß braucht man kein Rauschen hinzu zu fügen. Bei 1MHz ADC
>>Takt macht das LSB schönes Dithering.
>
> Und schon wieder lehnst du dich viel zu weit aus dem Fenster und
> trompetest Unsinn herum. Gratulation!
>
> Der chris_ hat es richtig beschrieben!!!

Ich sag meiner Schaltung nicht dass sie nicht funktionieren kann, wenn 
du es nicht tust.
Deal?

Was sagst du, Randall? Ah! https://xkcd.com/386/

Hey Terry, altes Ofenrohr! Wie gehts? Was meinst du?
"Fünf Ausrufezeichen. Sicherer Hinweis auf geistige
Umnachtung." Ah. Verstehe.

Du entschuldigst. Ich muss die Realität kurz geradebiegen. Mein 
Schreibtisch hängt grad an der Decke weil dem keiner gesagt hat er soll 
aufm Teppich bleiben. Und es gibt da diese Studienarbeit die aus 
irgendwelchen Gründen genau das tut, was Sie soll. Da kann doch auch was 
nicht stimmen.

von batman (Gast)


Lesenswert?

Mit dem Rauschen in deiner Schaltung bekommst du vielleicht 1 Bit mehr 
und bist damit glücklich, anderen reicht das wiederum nicht. Für sehr 
lange Oversampling-Serien kann man sich auch schön einfach nen 
einstellbaren 50Hz-Ripple drauflegen.

von chris_ (Gast)


Lesenswert?

>Für sehr
>lange Oversampling-Serien kann man sich auch schön einfach nen
>einstellbaren 50Hz-Ripple drauflegen.

Wenn Du die Samplingzeit auf N*20ms stellst, werden die 50Hz exakt 
weggefiltert. Ein gleitender Mittelwertfilter kann als FIR filter 
betrachtet werden und hat dann bei 50Hz eine Nullstelle.

von batman (Gast)


Lesenswert?

Solange man nicht gerade mutwillig auf N*20ms synchronisiert, werden wie 
gewünscht alle analogen Zwischenwerte durchlaufen und gehen ins 
Oversampling ein.

von chris_ (Gast)


Lesenswert?

>man nicht gerade mutwillig auf N*20ms synchronisiert

Es muss nichts synchronisiert werden. Man kann entweder immer über eine 
Zeit von N*20ms mitteln oder einen gleitenden Mittelwert mit der 
Fensterlänge N*20ms verwenden, dann bekommt man für jeden Abtastwert 
auch einen Ausgangswert.

von W.S. (Gast)


Lesenswert?

chris_ schrieb:
> Ah, Du spielst auf den Thread an, in dem Du das Problem nicht verstanden
> hattest..

Ähem - falsch getippt. Das Ganze liegt etwas weiter zurück. Es ging um 
das Grundverständnis davon, daß ein µC ein getaktetes System ist und 
deshalb alle (ja, ALLE) Signale, die man an irgendwelche Portpins 
anlegt, gesamplet (sch... denglish) werden. Deswegen kann auch ein 
Counter im µC nicht wirklich von einem Signal am Portpin getaktet 
werden, da dieses Signal ja nur als Sample vorliegt - eben das 
Zuschlagen des Abtasttheorems.

Ja - irgendwie trifft sich das mit diesem Thread. Damals ging es um 
zeitliche Auflösung zwischen den Schaltflanken des Systemtaktes, hier 
geht es jetzt um das um 90° gedrehte Problem, nämlich um die 
amplitudenmäßige Auflösung zwischen zwei ADC-Stufen.

Tja, man sollte wirklich sich dazu durchringen, Naturgesetze 
anzuerkennen. Wirklich... auch dann wenn einem eines nicht schmecken 
will.

W.S.

von W.S. (Gast)


Lesenswert?

c-hater schrieb:
> Denn wie bereits aus der
> Aufgabe bekannt, ist die absolute Größe hier ziemlich irrelevant, es
> kommt nur auf die korrekte Bewertung des (relativen) Verlaufs der Kurve
> an.

Ach, mei Liaber, mir ist das alles von Anbeginn schon längst klar 
gewesen. Aber du solltest eines bedenken: Die typischen SAR-ADC's in µC 
sind von hause aus eben nicht monoton. Das ist z.B. bei Audio-ADC's 
anders, die sind nicht überragend genau (absolut gesehen), aber sie sind 
idR. so konstruiert, daß sie monoton wandeln.

Also, was hast du von einem ADC, den du per Tricks (Rampe, Rauschen, 
Oversampling) aufgeblasen hast in dem von dir beschriebenen Falle? Nun, 
du hast in vielen Fällen den erhofften Erfolg, aber in manchen Fällen 
den richtigen Reinfall. Grund: Die Stufen von SAR-ADC's sind eben nicht 
alle gleich und besonders die Stufen der höherwertgen Bits machen das 
Problem aus. Zum Beispiel Übergang von 7Fh nach 80h oder FFh nach 100h 
und so weiter. An diesen Stellen landet man dann in der (relativen) 
Prärie beim Mitteln von Zwischenstufen. Wenn man es nicht übertreibt und 
sich nur 1 zusätzliches Bit oder allenfalls 2 Bits dazumittelt, dann 
geht das ja so lala für's Auge, also wenn man ein Thermometer, das 
eigentlich nur 1° Stufen hat, auf Pseudo-Nachkommastellen aufblasen 
will. Aber einen echten Algorithmus, der sich auf die Werte verlassen 
muß, würde ICH nie und nimmer mit solchen Meßwerten füttern wollen.

W.S.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Leute, bitte bei der Sache bleiben. Da haben dann Personalpronomen 
nichts verloren...

von Carsten R. (kaffeetante)


Lesenswert?

Beitrag "Re: [S] Gute & günstige Ready-to-use Akkus (Mignon) + 9V Blöcke"

Da geht es zwar um ein anderes thema, aber in dem entsprechenden Beitrag 
kann man in der Grafik schön sehen was dabei herauskommen kann wenn das 
Rauschen beim Multisampling nicht zu den "Stufen" paßt.

Das ist natürlich nur eines der möglichen Szenarien. Schon geringe 
Detailänderungen können dazu führen, daß es nochmals ganz anders 
aussieht.

Bei dem Einen kann stumpfes Multisampling funktionieren, weil es gerade 
mit den Bedingungen so paßt. Aber Ohne die Details zu analysieren bleibt 
es Glückssache ob es wie gewünscht funktioniert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.