ADC: 16 Bit in 10 Bit

Gast #5594968
Lesenswert?

Guten Morgen,

ein ADC gibt einen Messwert im 16 Bit Format aus.
Habt ihr Empfehlungen für mich, wie ich diese 16 Bit am geeignetsten auf 
10 Bit reduzieren kann?
Der Verlust an Genauigkeit ist mir bewusst und in Ordnung.

Reicht es aus, wenn ich die 16 Bit um 6 Bits nach rechts schiebe? Bzw. 
die 6 LSB sozusagen verwerfe? Die verworfenen 6 Bit könnt ich dann noch 
runden und dann das 7 LSB dementsprechend anpassen.

Vielen Dank.
#5595106
Lesenswert?

Wenn der AD-Wandler die Daten schon linksbündig zur Verfügung stellt, 
könnte man das Programm auch einfach so schreiben, als hätte der 
AD-Wandler 16 Bit. Wozu schieben? Es spart die Schieberei ein und hätte 
außerdem den Vorteil, daß man das Programm nicht groß anpassen muss, 
wenn man es mal auf eine andere Hardware mit einem genaueren ADC 
portiert.
Gast #5595119
Lesenswert?

Ich kenne ADCs die könne wahlweise das Ergebnis linksbündig, 
rechtsbündig oder um ein Nippel nach rechts verschoben bereitstellen.

Bei sehr vielen kann man auch die Auflösung einstellen.

Wenn man den ADC richtig konfiguriert muss man in SW gar nicht mehr viel 
machen.
Moderator (Firma: Titel) Persönliche Seite #5595127
Lesenswert?

Volle schrieb:
> um ein Nippel nach rechts verschoben
Abgesehen von dem falsch geschriebenen Nibble ist in der Aufzählung 
nichts dabei, was annähernd an die gewünschten 6 Bits rankommt.

> Bei sehr vielen kann man auch die Auflösung einstellen.
Zeig mal schnell 5 Stück von unterschiedlichen Herstellern (und das sind 
bei weitem nicht "sehr viele"). Fazit: es gibt nicht "viele", die das 
können, weil di allermeisten sowiso an einem Prozessor hängen, der 
sowieso eine Skalierung muss/wird.

51a schrieb:
> Habt ihr Empfehlungen für mich, wie ich diese 16 Bit am geeignetsten auf
> 10 Bit reduzieren kann?
Bist du dann mit diesem Wert auf diesem Prozessor fertig, oder wird 
anschließend noch mehr damit gemacht? Falls zweiteres: warum den 
Messwert überhaupt zusammenstutzen? Das passiert doch sowieso bei einer 
späteren Rechnung/Skalierung...
Gast #5595132
Lesenswert?

>> 51a schrieb:
>> Habt ihr Empfehlungen für mich, wie ich diese 16 Bit am
>> geeignetsten auf 10 Bit reduzieren kann?

> Lothar M. schrieb:
> Bist du dann mit diesem Wert auf diesem Prozessor fertig, oder wird
> anschließend noch mehr damit gemacht? Falls zweiteres: warum den
> Messwert überhaupt zusammenstutzen?

Vielleicht hat er eine CPU, die 10bit schneller berechnen kann, als 
16bit.

Duck und weg...

Nachtrag: Möglicherweise will er große Datenmengen speichern und braucht 
ein paar Bits für andere Zwecke (z.B. Zeitstempel oder Kanal-Nummer).
Moderator (Firma: Titel) Persönliche Seite #5595234
Lesenswert?

Thomas E. schrieb:
> Kapiere ich nicht - gib mal bitte ein konkretes Zahlenbeispiel, wo das
> addieren eines halben ADC-LSBs, was dann eh wieder abgeschnitten wird,
> das Ergebnis näher an den realen Messwert bringt.
Stichwort: "Aufrunden"
Aber ob das was bringt, und was es bringt, das hängt doch sehr von der 
entsprechenden Anwendung ab.

Ich könnte mir z.B. auch gut vorstellen, dass man nicht einfach ein 
halbes MSB aufaddiert, sondern die führenden 6 Bits. Dann wird umso mehr 
"abgerundet", je näher man bei 0 ist. Und umso mehr "aufgerundet", je 
näher man am Maximalwert ist.
Letztlich wird dadurch die Steigung der Übertragungsgeraden steiler 
gemacht...
#5595256
Lesenswert?

Lothar M. schrieb:
> Stichwort: "Aufrunden"

Ich weiss schon, was "Aufrunden" bedeutet. Angenommen, man hat ein 
Digitalvoltmeter, das die Spannung mit Nachkommastellen anzeigt. Um nun 
mit der Spannung in Volt ohne Nachkommastellen als Integer weiter zu 
arbeiten, würde ich einsehen, daß man erstmal zum korrekten Runden 0,5V 
addiert, bevor man die Nachkommastelle abschneidet.
Aber bei einem DVM, das ohnehin nur ganze Volt anzeigt (evtl. auch mit 
permanent "x,0" auf der Anzeige), erschließt sich mir der Sinn dieser 
Rundung nicht so ganz.
Moderator (Firma: Titel) Persönliche Seite #5595264
Lesenswert?

Thomas E. schrieb:
> Aber bei einem DVM, das ohnehin nur ganze Volt anzeigt (evtl. auch mit
> permanent "x,0" auf der Anzeige), erschließt sich mir der Sinn dieser
> Rundung nicht so ganz.
Das beispielhafte ganzzahlige Multimeter zeigt bei purem Abschneiden 
eben auch bei 0,99V am Eingang noch 0,0V an. Hier wäre es "gefühlt" 
schöner, wenn es ab 0,5V dann schon 1,0V anzeigt...
Gast #5595269
Lesenswert?

Hallo,

vielen Dank für die vielen Antworten.

Um mich kurz zu fassen:
Die ADC Messung erfolgt immer zu festen Zeitpunkten. Da der Bus für die 
Datenübertragung extrem langsam ist, müssen mehrere Samples zunächst 
gespeichert und anschließend in Datenblöcken gesendet werden. Um alle 
Daten in das Protokoll zu packen, müssen die 16 Bit auf 10 Bit reduziert 
werden. Sonst geht es zeitlich nicht.

Die 16 Bit ADC Messwerte sind aber nicht notwendig. 10 Bit sind völlig 
ausreichend.

Um weiteren Diskussionen entgegenzuwirken:
Das ganze wird nur für einen kleinen Test benötigt. Andere 
Schnittstellen oder ein anderer ADC würde sich für Testzweck nicht 
lohnen, da vorhandenes für den kleinen Test genutzt werden kann.
#5595279
Lesenswert?

51a schrieb:
> Um alle
> Daten in das Protokoll zu packen, müssen die 16 Bit auf 10 Bit reduziert
> werden. Sonst geht es zeitlich nicht.

Das Datenprotokoll kenne ich jetzt nicht aber welches Protokoll 
überträgt denn nur halbe Bytes denn nur so hättest du ja einen Vorteil 
davon?
Die Systeme, die mir jetzt so in den Sinn kommen, übertragen nur ganze 
Bytes und da ists dann egal ob man 10 oder 16 Bit hat.
Gast #5595285
Lesenswert?

M. K. schrieb:
> welches Protokoll überträgt denn nur halbe Bytes

Zum Beispiel das allgegenwärtige GSM Netz.

Zum Beispiel werden SMS als 7 bit um 160 Zeichen in 140 Bytes zu 
quetschen. Das ist nicht die einzige Stelle, wo im GSM Netz Bits 
abgeschnitten und Bytes zerstückelt und verschoben übertragen werden.
Gast #5595286
Lesenswert?

Es werden auch ganze Bytes übertragen aber im Protokoll befinden sich 
außer dem Sample noch weitere Informationen.
Ich kann noch 10 weitere Bits hinzufügen aber eben keine 16.
Die Datenrate zu erhöhen oder das Protokoll zu ändern ist nicht nötigt, 
da für den Test 10 Bit ausreichend sind und sich der Aufwand nicht 
lohnt.
Gast #5595287
Lesenswert?

M. K. schrieb:
> Die Systeme, die mir jetzt so in den Sinn kommen, übertragen nur ganze
> Bytes und da ists dann egal ob man 10 oder 16 Bit hat.

Ich denke, er packt drei 10Bit-Werte in ein 32Bit-Wort und überträgt 
das.

51a schrieb:
> Da der Bus für die
> Datenübertragung extrem langsam ist, müssen mehrere Samples zunächst
> gespeichert und anschließend in Datenblöcken gesendet werden.
Gast #5595288
Lesenswert?

51a schrieb:
> Es werden auch ganze Bytes übertragen aber im Protokoll befinden
> sich
> außer dem Sample noch weitere Informationen.
> Ich kann noch 10 weitere Bits hinzufügen aber eben keine 16.
> Die Datenrate zu erhöhen oder das Protokoll zu ändern ist nicht nötigt,
> da für den Test 10 Bit ausreichend sind und sich der Aufwand nicht
> lohnt.

Bzw. 10 Bits sind ungenutzt und stehen noch zur freien Verfügung
Gast #5595291
Lesenswert?

Da will ich mitdiskutieren.

Du könntest dann ja noch schneller sampeln. Da du nicht warten brauchst, 
bis die letzten 6 Bit gesattelt sind, kannst DU das Ergebnis auch schon 
vorher abfragen, hehe. Somit hast Du - ja richtig - eine Erhöhung der 
Sampelrate. Inwiefern das sachdienlich ist, muss der TO selbst 
entscheiden.

Und tschüss.
Gast #5595292
Lesenswert?

Lothar M. schrieb:
> Ich könnte mir z.B. auch gut vorstellen, dass man nicht einfach ein
> halbes MSB aufaddiert, sondern die führenden 6 Bits. Dann wird umso mehr
> "abgerundet", je näher man bei 0 ist. Und umso mehr "aufgerundet", je
> näher man am Maximalwert ist.
> Letztlich wird dadurch die Steigung der Übertragungsgeraden steiler
> gemacht...

Whow, kannte ich nicht, so einfach, hätte ich oftmals einsetzen sollen, 
... mir war das halbe Bit bisher egal ;-)
#5595310
Lesenswert?

Aaaahhh - sorry, ich war da gedanklich völlig auf dem falschen Dampfer! 
Dachte, der TO hätte einen 10-Bit Wandler, der seine Daten als 16-Bit 
Wort "left aligned" ausgibt.
Klar, wenn der Wandler mehr als 10 Bit zur Verfügung stellt, macht eine 
Rundung bei der Reduzierung auf 10 Bit für die Übertragung natürlich 
absolut Sinn!
#5597852
Lesenswert?

Thomas E. schrieb:
> Aaaahhh - sorry, ich war da gedanklich völlig auf dem falschen Dampfer!
> Dachte, der TO hätte einen 10-Bit Wandler, der seine Daten als 16-Bit
> Wort "left aligned" ausgibt.
> Klar, wenn der Wandler mehr als 10 Bit zur Verfügung stellt, macht eine
> Rundung bei der Reduzierung auf 10 Bit für die Übertragung natürlich
> absolut Sinn!

In diesem Fall hättest du natürlich recht - auf aufgefüllte Nullen ein 
halbes LSB addieren und wieder abschneiden ist tatsächlich sinnlos.
#5597925
Lesenswert?

soso schrieb:
> Da will ich mitdiskutieren.
>
> Du könntest dann ja noch schneller sampeln. Da du nicht warten brauchst,
> bis die letzten 6 Bit gesattelt sind, kannst DU das Ergebnis auch schon
> vorher abfragen, hehe. Somit hast Du - ja richtig - eine Erhöhung der
> Sampelrate. Inwiefern das sachdienlich ist, muss der TO selbst
> entscheiden.
>
> Und tschüss.

Dann müsste der ADC aber auch unterstützen, dass man eine Wandlung 
abbrechen kann. Da wir nicht den konkreten Wandler kennen wäre ich mit 
so einer Aussage erstmal vorsichtig.
Gast #5597930
Lesenswert?

Thomas E. schrieb:
> Wenn der AD-Wandler die Daten schon linksbündig zur Verfügung stellt,
> könnte man das Programm auch einfach so schreiben, als hätte der
> AD-Wandler 16 Bit. Wozu schieben?

Spätestens, wenn man für Mittelung o.ä. ein paar Werte addieren will, 
merkt man den Unterschied.

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