Hallo in die Runde, für ein Retro-Projekt (8-Bit Audio-Digitizer für den Commodore 64) füttere ich einen A/D-Wandler (ADC0804) mit einem Audiosignal. Da der ADC0804 nur positive Spannungen wandelt, hat das Audiosignal einen DC-Offset von 2.5V bekommen. Das Audiosignal hat eine Spannung von etwa +/-1.4V. Am ADC kann ich für die Signalspanne (Pin 9) und den DC-Offset (Pin6: VIN-minus) adjustieren. Ich dachte, dass ich folgenden Wert für Pin6 finden muss um das gesamte Audiosignal digitalisieren zu können: 2.5V (DC-Offset) minus 1.4V (1/2 Audiosignal-Range) ~2.1V. Das führt aber dazu, dass der ADC unter Ruhebedingung (also kein hörbares Audiosignal) den 2.5V Offset "digitalisiert" und somit "bei Ruhe" keine 0 ausgibt. Schließe ich 2.5V an Pin6 ist im Falle von "Audio-Ruhe" auch am ADC-Ausgang "Ruhe". Soweit so gut, aber.... Nun meine Frage: Verliere ich bei 2.5V an Pin6 nicht den "negativen" Audiosignalteil? Also alles was unterhalb des 2.5V Offset liegt (2.1V-2.5V)? Oder legt der ADC080x die Spanne symmetrisch um das VIN-Minus? Für jede Hilfe dankbar Michael
Michael schrieb: > Am ADC kann ich für die Signalspanne (Pin 9) und den DC-Offset (Pin6: > VIN-minus) adjustieren. Ich habe das DB von dem Teil nicht, vermute aber mal, dass hier einfach ein DC-Offset auf das (hoffentlich AC-gekoppelte) Signal addiert wird. > Ich dachte, dass ich folgenden Wert für Pin6 > finden muss um das gesamte Audiosignal digitalisieren zu können Ja, das ist der übliche Zweck so eines Offsets. > Das führt aber > dazu, dass der ADC unter Ruhebedingung (also kein hörbares Audiosignal) > den 2.5V Offset "digitalisiert" und somit "bei Ruhe" keine 0 ausgibt. Natürlich nicht. An der Arbeitsweise des Wandler ändert sich dadurch ja auch nichts. Je nachdem, wie die Samples verwendet werden sollen, muß man ggf. in Software etwas tun. Nämlich: dort vom halben Wandlerbereich den Messwert subtrahieren. Dadurch ergeben sich Samples, die "signed" sind, sich also im Bereich von -halber Wandlerbereich bis +halber Wandlerbereich erstrecken. Interessanterweise ist allerdings für 8Bit-Samples das "unsigned"-Binärformat durchaus üblich. Sprich: Messwert = halber Wandlerbereich entspricht 0.
Moin, Michael schrieb: > Am ADC kann ich für die Signalspanne (Pin 9) und den DC-Offset (Pin6: > VIN-minus) adjustieren. Ich dachte, dass ich folgenden Wert für Pin6 > finden muss um das gesamte Audiosignal digitalisieren zu können: 2.5V > (DC-Offset) minus 1.4V (1/2 Audiosignal-Range) ~2.1V. Das führt aber > dazu, dass der ADC unter Ruhebedingung (also kein hörbares Audiosignal) > den 2.5V Offset "digitalisiert" und somit "bei Ruhe" keine 0 ausgibt. > > Schließe ich 2.5V an Pin6 ist im Falle von "Audio-Ruhe" auch am > ADC-Ausgang "Ruhe". Soweit so gut, aber.... Dieser Pin mit Vref/2 ist IMO im Datenblatt etwas komisch beschrieben. Ich sage mal so: Wenn In+ = In- ist, ist der Output eine 0x00. Wenn In+ gleich Spannung an Pin 9 ist, ist der Output 0xFF. Also an die 6 GND legen und an 9 (Vref/2) Vcc anlegen. Und deinem Audiosignal einen Offset von 2,5V draufgeben. Dann kannst du alles von 0V bis 5V messen. Theoretisch mehr, als du brauchst, weil dein Signal ja nur +/1,4V macht und nicht +/- 2,5V. Aber dadurch verlierst du weniger als ein Bit und hast gleich noch etwas Headroom dazu. Wolltest du exakt +/- 1,4V messen, dann gib dem Audiosignal z.B. wieder 2,5V Offset drauf und lege In- auf 2,5V - 1,4V (also 1,1V) und Ref/2 auf 2,5V + 1,4V (also 3,9V). Gruß, Roland
Roland D. schrieb: > Moin, > ... Irgendwie ist das Datenblatt widersprüchlich, vielleicht lag ich auch falsch. In Diagramm 32 wird gezeigt, dass Vref/2 die obere Referenzspannung ist, in Diagramm 34 aber, dass es die hälfte der Spanne sein solle. Wohlgemerkt noch nicht mal die Mitte des Arbeitsbereiches, weil In- noch mal draufaddiert wird. Ich würde sagen, ausprobieren:-) Gruß, Roland
> Natürlich nicht. An der Arbeitsweise des Wandler ändert sich dadurch ja > auch nichts. > > Je nachdem, wie die Samples verwendet werden sollen, muß man ggf. in > Software etwas tun. Nämlich: dort vom halben Wandlerbereich den Messwert > subtrahieren. Dadurch ergeben sich Samples, die "signed" sind, sich also > im Bereich von -halber Wandlerbereich bis +halber Wandlerbereich > erstrecken. > > Interessanterweise ist allerdings für 8Bit-Samples das > "unsigned"-Binärformat durchaus üblich. Sprich: Messwert = halber > Wandlerbereich entspricht 0. Vielen Dank! "8-Bit unsigned" war das Zauberwort. Das hat mir sehr geholfen. Beste Grüße Michael
Ob S. schrieb: > Nämlich: dort vom halben Wandlerbereich den Messwert subtrahieren. Da muss nichts subtrahiert werden. Für eine Zweierkomplementdarstellung muss nur das oberste Bit invertiert werden. Aus 0x80 (Bereichsmitte) wird dann 0x00, aus 0xFF (Maximalwert) wird 0x7F und aus 0x00 (Minimalwert) wird 0x80.
> habe das DB von dem Teil nicht > .. das Datenblatt ... Da ich in den alten, mir vorliegenden Datenblättern weder ein "Diagramm 32" noch ein "Pin6: VIN-minus" finden kann, hänge ich die beiden mal an. Dort ist dann auch die Justierung gut beschrieben, bei Philips kurz&bündig unter 'Reference Voltage Span Adjust', ausführlich bei National Semiconductor unter 2.4.2 und 2.5.3 - vielleicht hilft es ein wenig (mal unabhängig von der Zahlendarstellung).
Rainer W. schrieb: > Ob S. schrieb: >> Nämlich: dort vom halben Wandlerbereich den Messwert subtrahieren. > > Da muss nichts subtrahiert werden. Für eine Zweierkomplementdarstellung > muss nur das oberste Bit invertiert werden. Dürfte auf nahezu allen Architekturen (mit 8Bit oder mehr) bezüglich des Rechenzeitbedarfs gehuppt wie gesprungen sein: eine ALU-Operation. Subtraktion hat aber den Riesenvorteil, dass man ggf. einen leicht abweichenden Hardware-Nullpunkt problemlos in Software nachjustieren kann. Das fällt mit Bitgefummel schon deutlich schwerer...
Moin, S. L. schrieb: >> habe das DB von dem Teil nicht >> .. das Datenblatt ... > > Da ich in den alten, mir vorliegenden Datenblättern weder ein "Diagramm > 32" noch ein "Pin6: VIN-minus" finden kann, hänge ich die beiden mal an. OK, da habe ich ein anderes Datenblatt gesehen. Hier ist Vin- Pin 7. Aber wie ist in diesem Datenblatt Diagramm 1 zu interpretieren? Dem Diagramm nach ist Pin 9 = Vref/2 die Spannung am oberen Ende der Widerstandskette die wohl den AD-Wandler darstellt. > Dort ist dann auch die Justierung gut beschrieben, bei Philips > kurz&bündig unter 'Reference Voltage Span Adjust', ausführlich bei > National Semiconductor unter 2.4.2 und 2.5.3 - vielleicht hilft es ein > wenig (mal unabhängig von der Zahlendarstellung). Finde ich aber dennoch irgendwie unlogisch. Das heißt ja die Maximalspannung für den AD-Wandler wird intern generiert aus 2 * (VRev/2) + Vin-. Warum sollte man dass so umständlich implementieren? Gruß, Roland
Roland D. sinnierte:
> Warum sollte man dass so umständlich implementieren?
'Alles Seiende ist vernünftig' - oder wie der Schwabe sagen würde: "'s
isch, wie's isch, sunscht wär's net so" (Quelle: Thomas Stilla).
Spaß beiseite - als ich vor über einem Vierteljahrhundert für kurze Zeit
damit arbeitete, fand ich es praktisch; ich bin aber kein Spezialist in
diesem Bereich - vielleicht meldet sich hier ja noch ein solcher.
Gegenfrage: Wie würden Sie es besser lösen?
Bei der Anforderung "The differential analog voltage input allows for
increased common-mode rejection and provides a means to adjust the
zero-scale offset. Additionally, the voltage reference input provides a
means of encoding small analog voltages to the full 8 bits of
resolution." (Philips; sinngemäß bei National)
Nur am Rande, was mich noch interessieren würde: in welchem Datenblatt
steht das von Ihnen und von Michael zitierte "Pin6: VIN-minus"?
Moin, S. L. schrieb: > Spaß beiseite - als ich vor über einem Vierteljahrhundert für kurze Zeit > damit arbeitete, fand ich es praktisch; ich bin aber kein Spezialist in > diesem Bereich - vielleicht meldet sich hier ja noch ein solcher. > Gegenfrage: Wie würden Sie es besser lösen? Naheliegend fände ich, wenn ich die beiden Spannungen vorgeben kann, bei denen der Output 0x00 bzw. 0xFF liefert. Oder wenn so ähnlich, dann sollte Vref/2 die Spannung sein, bei der der Output 0x80 ist. Dann könnte ich zum Symmetrieren Vref/2 einfach über einen Tiefpass an In+ hängen, In- würde dann quasi den Span vorgeben. So wie hier ist der Output aber dann 0x80, wenn In+ = In- + Vref/2 ist. Gut, mag auf die Anwendung ankommen, was praktischer ist. > Nur am Rande, was mich noch interessieren würde: in welchem Datenblatt > steht das von Ihnen und von Michael zitierte "Pin6: VIN-minus"? Ich hatte ein Datenblatt von Texas Instruments gefunden. Aber das 6 In- ist, war wohl ein Irrtum. In- ist in beiden Datenblättern die 7. In dem TI-Datenblatt (findet man bei Mouser) stehen auch noch Assembler-Codeschnipsel zum Auslesen mit 6520 oder 8080 drin :-). Echt ein Retro-Projekt. Gruß, Roland
> In dem TI-Datenblatt (findet man bei Mouser) stehen auch > noch Assembler-Codeschnipsel zum Auslesen mit 6520 oder 8080 drin Wie ja auch in dem von National. An eben einem selbstgebauten 8080-System hing mein ADC0804 (und dann leistete ich mir den Luxus und stieg auf den 8085 um (reliving past glories - oder besser gesagt: tempi passati).
S. L. schrieb: > Nur am Rande, was mich noch interessieren würde: in welchem Datenblatt > steht das von Ihnen und von Michael zitierte "Pin6: VIN-minus"? ja, sorry, war ein Irrtum. Pin 7 war gemeint.
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.