Nabend, Leider hängts gerade bei mir nicht nur zwischen den Beinen. Ich programmiere mir gerade den ADS7961SBDBTR (8bit) von TI mit Python über ein Raspi. Kommunikation klappt. Die Bits erhöhen sich auch bei steigender Spannung. Nur stehe ich bei der Bitauswertung auf dem Schlauch. Der gibt mir einen Datenword wie angehängt im Bild aus. Mein Problem ist, dass er die 4 ersten Bits des 1. Bytes dazu nutzt, um den abgefragten Channel zu "nennen". Da ich aber sowieso immer explizit nur einen definierten Channel anspreche ist diese "Info" für mich unnütz. Wie rechne ich jetzt die restlichen 12 Bits der 2 Bytes in Volt um? Vin=ADCwert∗Vref/256 is klar.. Aber ich stehe gerade aufm Schlauch wie ich das hier anwenden soll. Ich ahne schon, dass die Lösung wieder so einfach ist, dass ich mich gleich schämen muss, hier gefragt zu haben :D. Danke und Gruß
:
Bearbeitet durch User
Das Word gibt er mir als ein ByteArray aus. Habe das jetzt so. Bitmask = 0b00001111 Volt = (((Array[0] & Bitmask)+Array[1])*Vref/4096) Wieso jetzt 4096? Dachte die Auflösung bezieht sich auf den Typ des ADC's. Spricht bei meinem 8-bit 256? Oder war meine Vermutung da ein Griff ins Klo und die Auflösung bezieht sich auf die Datenausgabe?
Chris M. schrieb: > Das Word gibt er mir als ein ByteArray aus. > [...] > Bitmask = 0b00001111 > Volt = (((Array[0] & Bitmask)+Array[1])*Vref/4096) In dieser Form passt das. Das war vorher nicht ersichtlich. > Wieso jetzt 4096? Dachte die Auflösung bezieht sich auf den Typ des > ADC's. Spricht bei meinem 8-bit 256? Da hast du Recht. Ich habe mir das Datenblatt nicht angeschaut. Bei 12 Bit Result bin ich auch von 12 Bit Conversion ausgegangen. Aber ja, dein 7961 macht nur 8 Bit. Also kannst dir vermutlich das 0-te Byte komplett sparen und einfach nur das letzte anschauen. Und dann selbstverständlich auch durch 256 teilen.
:
Bearbeitet durch User
Das seltsame ist mit der 12-Bit-Rechnung hat die Spannung ziemlich gut gepasst und mit der 8-Bit so überhaupt nicht.
Stelle das bitte mal genauer dar. Welche Spannung legst du an? Welche Werte erhältst du? Edit: Wieviele Bytes ließt du pro Messung?
:
Bearbeitet durch User
Samuel C. schrieb: > Stelle das bitte mal genauer dar. Welche Spannung legst du an? > Welche > Werte erhältst du? Es liegen 0.8V an und 0.78 misst er > > Edit: Wieviele Bytes ließt du pro Messung? Pro Messung 2 Bytes.
Geb mich auch voll damit zufrieden, nur interessiert mich jetzt, warum unsere "falsch angenommene" Rechnung doch ins schwarze trifft :D
Chris M. schrieb: > Geb mich auch voll damit zufrieden, nur interessiert mich jetzt, warum > unsere "falsch angenommene" Rechnung doch ins schwarze trifft :D Schau dir mal das Array genau an. 0.78 V hat in 8 bit den Value 40 (Annahme: du benutzt 2*Vref, also 5V als Referenzspannung, ansonsten einfach mal für 2.5 V nachfolgende Überlegungen betrachten). Das ist das Bitmuster 101000. 0.78 V in 12 bit hat den Value 640 und das ist das Bitmuster 1010000000. Wie man sieht ist das 12 Bit Bitmuster lediglich das 8 Bit Bitmuster um 4 Bit nach links verschoben, sieht also schwer nach einem Left Alignment aus. Und wenn jetzt dein Array nicht wirklich 8 bit ist sondern 16 bit (Datentyp beachten) würde das prima hinkommen. Aus der anderen Richtung nämlich überlegt: Bei 12 Bit und 5 V VRef braucht es für 0.8 V den Value 640, der passt aber in keine 8 Bit, d.h. den maximalen Wert, den du mit einer 8 Bit Variablen ausrechnen könntest wäre 255/4096*5.0 und das sind etwa 0.31, da könntest du nie 0.78 heraus bekommen. Ist jetzt aber alles irgendwie Stochern im Nebel.
Das einfachste wird sein: Du schreibst hier die adc-rohwerte für 0, 1, 2, 3, 4, 5V hin und welche ref-spannung du annimmst.
M. K. schrieb: > Wie man sieht ist das 12 Bit Bitmuster lediglich > das 8 Bit Bitmuster um 4 Bit nach links verschoben, sieht also schwer > nach einem Left Alignment aus. Ich weiß nicht, aus welchem Datenblatt die Abbildung des TO kommt. Aber in folgendem Datenblatt http://www.ti.com/lit/ds/symlink/ads7961.pdf wird das genau so beschrieben: - Erst kommen 4 Sonderbits (der Kanal oder der Wert der GPIOs), - dann 8 Bit vom ADC-Wert (von MSB bis LSB), - dann vier Dummy-Bits. Das hätte der ADC-Hersteller natürlich auch anders machen können, aber auf diese Art kann man jeden der drei ADCs (8Bit, 10Bit oder 12Bit) einsetzen ohne etwas an Hardware oder Software ändern zu müssen.
Achim S. schrieb: > M. K. schrieb: >> Wie man sieht ist das 12 Bit Bitmuster lediglich >> das 8 Bit Bitmuster um 4 Bit nach links verschoben, sieht also schwer >> nach einem Left Alignment aus. > > Ich weiß nicht, aus welchem Datenblatt die Abbildung des TO kommt. Aber > in folgendem Datenblatt > http://www.ti.com/lit/ds/symlink/ads7961.pdf > wird das genau so beschrieben: > - Erst kommen 4 Sonderbits (der Kanal oder der Wert der GPIOs), > - dann 8 Bit vom ADC-Wert (von MSB bis LSB), > - dann vier Dummy-Bits. > > Das hätte der ADC-Hersteller natürlich auch anders machen können, aber > auf diese Art kann man jeden der drei ADCs (8Bit, 10Bit oder 12Bit) > einsetzen ohne etwas an Hardware oder Software ändern zu müssen. Danke für eure Hilfe! Ich habe eben nochmal verglichen. Das Datenblatt bei Conrad ist leicht unterschiedlich als das direkt von TI. Conrad hat wohl eine alte Version... Zusammenfassend: Durch 4096 teilen ist richtig? Scheint ja so sonst würde das Ergebnis ja nicht stimmen Eine Frage hab ich dann noch. Ich habe jetzt zum Beispiel einen 12 Bit-ADC. In wie weit verbessert sich jetzt die Datenqualität, wenn in der Software alles gleich bleibt? Ist er bei der internen bzw. hardwareseitigen Datenauswertung dann einfach genauer bei gleichbleibendem Rechenweg? Gruß
:
Bearbeitet durch User
Chris M. schrieb: > Ist er bei der internen bzw. hardwareseitigen > Datenauswertung dann einfach genauer bei gleichbleibendem Rechenweg? Nö, nicht genauer, nur hochauflösender. Bedenke: Genauigkeit != Auflösung ;)
Jetzt noch ne Amateurfrage dazu: In wie weit merke ich das dann? Bzw. wo macht sich das bemerkbar?
M. K. schrieb: > Nö, nicht genauer, nur hochauflösender. Bedenke: Genauigkeit != > Auflösung ;) Doch, in dem Fall bedeutet es auch genauer. Es stimmt zwar, dass Genauigkeit != Auflösung ist. Aber beim ADS796x sind auch alle Genauigkeitsangaben (INL, Offset, Gain...) auf das LSB bezogen. In dem Fall gilt also: zwei Bit mehr an Auflösung liefern auch zwei Bit mehr an Genauigkeit. Chris M. schrieb: > In wie weit merke ich das dann? Bzw. wo > macht sich das bemerkbar? Der vom ADC umgesetzt Wert liegt entsprechend näher am tatsächlichen Spannungswert.
Achim S. schrieb: > In dem Fall gilt also: zwei Bit mehr an Auflösung liefern auch > zwei Bit mehr an Genauigkeit. Sorry, in der Allgemeinheit war meine Aussage falsch. Es gibt so viele ADC-Varianten im Datenblatt, dass ich die Werte vertauscht habe. die 8 Bit Version hat z.B. eine INL von 0,1LSB, die 10Bit Version eine INL von 0,2LSB. Die Erhöhung der Auflösung um 2 Bit (Faktor 4) bringt also eine Erhöhung der Genauigkeit (in dem Fall Parameter INL) um 1 Bit (Faktor 2).
Chris M. schrieb: > Jetzt noch ne Amateurfrage dazu: In wie weit merke ich das dann? Bzw. wo > macht sich das bemerkbar? Abgesehen davon, dass oftmals ADCs mit höherer Auflösung auch genauer sind, hilft es sich, folgendes Szenario zu verinnerlichen: Man nehme eine ideale Spannungsquelle mit exakt 1,00000000 Volt. Du kannst mit einem ADC mit einer geringen Auflösung beispielsweise 0,99 Volt messen. Erhöht man die Auflösung, aber nicht die Genauigkeit, so kann es passieren, dass man 0,9512875691 Volt misst. Die Auflösung ist zwar höher, das Ergebnis ist aber weniger genau bzw die Abweichung von der Realität ist größer.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.