Hallo Leute, arbeite mit einem Entwicklungsboard von Altera. Darauf ist ein AD 9433 ( 14 BIT ) und DA 904(DAC 12 BIT) verbaut. ----------------------------------------------------------------------- In einem Beitrag Morin dies so oder so ähnlich geschrieben: Der ADC liefert das Format signed: das Bitmuster 100..0 stellt die "negativste", d.h. kleinste Zahl dar und entspricht der min. Eingangsspannung des ADC. Das Bitmuster 011...1 stellt die "positivste", d.h. größte Zahl dar und entspricht der max. Eingangsspannung des ADC. Der DAC erwartet bis auf das MSB, das gleiche Format. Also reicht es, das oberste Bit zu negieren: Ausgang (11 downto 0) <= (not Eingang (11)) & (Eingang (10 downto 0)); ----------------------------------------------------------------- Wenn ich das msb negiere und gleich wieder ausgebe, bekomme ich den Sinus richtig dargestellt. Aber wenn ich in einem Prozess diese negation durchführe, und und durch andere Register schiebe(unverändert) , nicht. Sinus sieht aus wie ein großes M. Wenn ich das Bit 10 noch negiere, bekomme ich den Sinus richtig herum. Ausgang (11 downto 0) <= (not Eingang (11)) & not (Eingang (10)) & ..... Bin über jede geäußerte Vermutung glücklich. VIELEN DANK Markus
Leider ist deiner Beschreibung nicht zu entnehmen, wie die 14 Bit vom ADC auf die 12 Bit vom DAC abgebildet werden... > Also reicht es, das oberste Bit zu negieren: > Ausgang (11 downto 0) <= (not Eingang (11)) & (Eingang (10 downto 0)); Ist das MSB Bit 13 vom ADC an den Eingang 11 angeschlossen? > Wenn ich das msb negiere und gleich wieder ausgebe, bekomme ich den > Sinus richtig dargestellt. > Ausgang (11 downto 0) <= (not Eingang (11)) & (Eingang (10 downto 0)); > : > Wenn ich das Bit 10 noch negiere, bekomme ich den Sinus richtig herum. > Ausgang (11 downto 0) <= (not Eingang (11)) & not (Eingang (10)) & ..... Wie denn, was denn, wo denn? Was gilt denn jetzt?
Wie wäre es, wenn Du auf den ADC-Wert einfach 2048 addierst, den Überlauf ignorierst und die obersten 12 der 14 Bit auf den DAC gibst?
aus meiner erfahrung heraus würde ich sagen, dass der ADC die digitalisierten werte als zweierkomplement ausgibt. dadurch ist nicht nur das MSB fürs vorzeichen zuständig. weitere infos zum zweikomplement kann man z.B. auf wikipedia finden. also ein einfaches negieren des MSB hilft nicht wirklich.
> also ein einfaches negieren des MSB hilft nicht wirklich. Doch, das reicht aus ;-) ADC Kpl MSB Spannung 0111 1111 7 0110 1110 6 0101 1101 5 0100 1100 4 0011 1011 3 0010 1010 2 0001 1001 1 0000 1000 0 1111 0111 -1 1110 0110 -2 1101 0101 -3 1100 0100 -4 1011 0011 -5 1010 0010 -6 1001 0001 -7 1000 0000 -8 > dadurch ist nicht nur das MSB fürs vorzeichen zuständig. Die Werte sollen ja nicht invertiert werden, sondern nur einen Offset erhalten. Und dafür reicht das erste Bit aus.
Hallo lkmiller,
SORRY dass ich mich erst jetzt wieder melde.
>Ist das MSB Bit 13 vom ADC an den Eingang 11 angeschlossen?
Ausgang (13 downto 0) <= (not Eingang (11)) & (Eingang (10 downto 0)) &
"11";
.
Ist dass so richtig?
Die 12 Bit durchlaufen Filter .
Drehe ich am Anfang oder am Ende der Verarbeitung das MSB, bevor es über
den DA raus geht?
DANK
> Die 12 Bit durchlaufen Filter . Drehe ich am Anfang oder am Ende der > Verarbeitung das MSB, bevor es über den DA raus geht? Das kommt auf die Filter drauf an... Wenn die mit signed Werten rechnen, dann kommt der Offset erst nach der Filterung.
>Das kommt auf die Filter drauf an...
Das sind Interpolationsfilter.
Nur 3 Filterkoefizienten.
1/4 1/2 1/4
Also, nur 1 oder 2 mal schieben, dann addieren.
Ich bin überfragt?
>Wenn die mit signed Werten rechnen, dann kommt der Offset erst nach der >Filterung. Ich wollte das MSB gleich drehen. Den Filter hab ich selbst geschrieben. Die Vectoren sind vom Typ STD_LOGIC_VECTOR Soll ich SIGNED oder UNSIGNED verwenden? DANKE
hab jetzt meine Rechnungen auf signed geändert und das MSB erst dann gedreht. Jetzt bekomme ich das erwartete Signal verrauscht aber es ist mal da. schreibt bitte was Ihr denkt. VIELEN DANK ich will nicht dumm sterben :)
@Markus: >schreibt bitte was Ihr denkt. Ich würde mir eine ordentliche Testbench dazu schreiben. Für den ADC und den DAC kommen VHDL-Modelle hin, die nur als Datenquelle bzw. -senke dienen. Damit kannst Du prüfen, ob Dein Code wie erwartet funktioniert. Im nächsten Schritt kannst Du prüfen (LogicAnalyzer) ob die Input-Daten vom ADC das erwartete Format haben. Außerdem würde ich am DAC testweise eine Rampe oder eine andere bekannte Signalform ausgeben. Duke
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.