mikrocontroller.net

Forum: FPGA, VHDL & Co. Brauche Hilfe ADC->DAC


Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: gonzo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.