Umwandlung 10bit Wörter in 8bit Wörter

Gast #2360732
Lesenswert?

Hallo,

ich muss eine Platine entwickeln, die Daten aus einem ADC per USB an dem 
PC überträgt.

der ADC ist ein MAX1185, Eckdaten 10 Bit, 20Msps, 3V, dieser ist 
vorgegeben.

Wenn ich richtig rechne ergibt das eine maximale Datenrate von 
25Mbyte/s.

Als USB Controller habe ich an den FT2232H gedacht, dieser unterstützt 
im "Synchronous FIFO" Mode Datenrate bis zu größer 25Mbyte/s.

Mein Problem besteht nun darein, dass die Input-Wortbreit des FT2232H in 
diesem Mode 8 Bit beträgt. Also muss ich die 10 Bit des ADC in 8 Bit 
Wörter "umwandeln", das heißt die 10bit in irgendeiner weise 
Zwischenspeichern und Taktrichtig an den FT2232 weiter geben.

Die Frage ist nun, wie mache ich das am besten?

Über ein paar Tipps und/oder Denkanstöße wäre ich sehr dankbar.


Mfg
Christian
Gast #2360751
Lesenswert?

@holger:
Damit erhöhe ich meine Datenrate extrem. Wenn ich mich nicht verrechnet 
haben auf über 31Mbyte/s. Das wollte ich vermeiden

@A. K.
Danke, werde ich mir mal durchlesen.

@Scans
Kennst du einen anderen Weg wie ich den Daten des ADC in den PC bekomme? 
Wenn ja, nehme ich auch den gerne.
Gast #2360756
Lesenswert?

>@holger:
>Damit erhöhe ich meine Datenrate extrem. Wenn ich mich nicht verrechnet
>haben auf über 31Mbyte/s. Das wollte ich vermeiden

Da wird dir für eine einfache Lösung aber gar nichts
anderes übrig bleiben. Du könntest die Daten mit einem
FPGA irgendwie komprimieren, aber das ist wohl nix für dich.
Gast #2360766
Lesenswert?

@A. K.

stimmt 40MB/s.
Ja im Werbepamphlet steht das. Im Datenblatt steht schon was anders:

"...greater than 25 Mbytes/second over a synchronous parallel FIFO
interface."

Aber in folgender Diskussion wird auch von Datenraten von bis 40MB/S 
gebrochen: 
http://libftdi.141977.n3.nabble.com/FT2232H-sync-fifo-mode-td2573841.html

Aber damit wäre man direkt an der Grenze, ich hatte gehofft das es einen 
einfachen anderen Weg gibt.


@holger

Stimmt, in die FPGA Programmierung wollte ich mich nicht einarbeiten.
Gast #2360772
Lesenswert?

>Aber in folgender Diskussion wird auch von Datenraten von bis 40MB/S
>gebrochen:

Pfui Teufel;)

>@holger
>
>Stimmt, in die FPGA Programmierung wollte ich mich nicht einarbeiten.

Tja, und die einfache Methode wird auch nicht funktionieren wenn
der ADC mehrere 0x000 liefert. Dann weisst du nicht mehr wo dein
Low und Highbyte ist. Du hast dir das ganze zu einfach vorgestellt;)
Gast #2360777
Lesenswert?

holger schrieb:
>>@holger:
>>Damit erhöhe ich meine Datenrate extrem. Wenn ich mich nicht verrechnet
>>haben auf über 31Mbyte/s. Das wollte ich vermeiden
>
> Da wird dir für eine einfache Lösung aber gar nichts
> anderes übrig bleiben. Du könntest die Daten mit einem
> FPGA irgendwie komprimieren, aber das ist wohl nix für dich.

Die optimale aber komplizierte Variante besteht darin, aus 7 10-Bit 
Quellworten 10 Bytes zu machen, nach folgendem Muster:
1
1AAAAAAA
2
0BBBBAAA
3
0CBBBBBB
4
0CCCCCCC
5
0DDDDCCC
6
0EEDDDDD
7
0EEEEEEE
8
0FFFFFFE
9
0GGGFFFF
10
0GGGGGGG

Mit dem höchstwertigen Bit kannst Du auf den Blockanfang 
synchronisieren. A-G stellen die 7 10-Bit Quellworte (ADC-Messwerte) da. 
Viel Spaß beim Bitschieben auf dem PC

fchk
#2360783
Lesenswert?

Christian schrieb:

> Aber damit wäre man direkt an der Grenze, ich hatte gehofft das es einen
> einfachen anderen Weg gibt.

Gehen tät's schon. Prinzip: 100MHz Basistakt, 4x 8-Bit Register, 2x 
4-Bit SIPO-Shifter. Der ADC schiebt jeden 5. Takt 8 Bits nacheinander in 
die 4 Register und jedesmal 2 Bits in die Shifter. Der FT kriegt jeden 
4. Takt erst nacheinander die 4 Register, dann die 8 Bits der Shifter. 
So verzahnt, dass ADC und FT sich nicht ins Gehege kommen. Offen wär 
aber noch die Frage, woher die PC weiss, wo der Datenstrom anfängt.

Sowas kann man vielleicht mit 74AC aufbauen, aber CPLD wär wohl 
naheliegender.
Gast #2360784
Lesenswert?

Genau!
Denn Gehirnschmalz kann man super durch technische Kapazitäten 
ersetzen... Genau so war die Arbeit an der Hochschule sicher für ihn 
gedacht...

Seine Eckdaten sind ein Witz.
Aber hat weder sine Vorgaben, noch USB verstanden.
Gast #2360792
Lesenswert?

>Wenn weiter nichts ist... Muss ja nicht 8+2 sein. 7+3 tuts auch, und
>dann hat man ein Tagbit.

Oder 6+4. 01 in D7..6  bedeutet Lowbyte, 10 Highbyte.
00 und 11 sind nicht erlaubt. Könnte man zur Fehlererkennung nutzen.
#2360806
Lesenswert?

Hallo Christian,
wie weit bist Du denn mit dem ADC-Design, bist Du - ohne Dir zu nahe zu 
treten - bzw. ist der ADC überhaupt in der Lage, so genau zu messen, 
dass Du die untersten 2 Bit auswerten bzw. verwenden kannst? D.h. in 
welcher Arbeitsumgebung soll das Teil eingesetzt werden? Oder ist das 
ganze ein Hochschulprojekt? Mit welcher Genauigkeit soll gearbeitet 
werden usw.

Wenn nicht, brauchst Du Dir erstmal nicht wirklich Gedanken darüber zu 
machen, wie Du die 10Bit schnell genug über die Leitung bekommst.

Gruß
Frank
#2360826
Lesenswert?

Hallo,
das ist auch kein schlechtes Thema für eine Abschlussarbeit, aber der 
Hintergrund meiner Antwort war ein anderer, das Design des ADC um ihn 
genau messen zu lassen und das Bereitstellen der Daten in 2 x 8Bit ohne 
CPLD stellt schon eine kleinere Herausforderung dar. Da ist das Thema 
der Datenübertragung - was dann die nächste Herausforderung ist - 
erstmal zweitrangig.

Es geht es aus der Fragestellung nicht hervor, wie schnell soll gemessen 
werden, in welchem Wertebereich soll gemessen werden, wie lange soll 
gemessen werden. Alles Fragen, ohne deren Antworten, der ganze Thread 
ein fischen im Trüben ist...

Da ja bekanntlich viele Wege nach Rom führen, gibt es auch hier mehrere 
Lösungsansätze...

Gruß
Frank
Gast #2360839
Lesenswert?

Um die Spekulationen mal zu beenden, das ist keine Hochschularbeit, 
sondern einer kleiner Job den ich an der Uni habe. Eure Vermutungen mit 
Hochschule waren also teilweise richtig.
Ich muss eine Platinen bauen mit dem oben beschrieben ADC Wandler, und 
soll die Daten irgendwie in den PC bekommen. Nun habe ich mich ran 
gesetzt und nach Lösungen für meine Probleme gesucht. Nur bei der 10bit 
-> 8bit Wandlung habe ich nach vielen Google keine einfache Lösung 
gefunden. Das man irgendwas aus Shift-Register bauen könnte oder das man 
FPGAs einsetzten kann war mir schon klar, nur leider auch kompliziert. 
Ich habe kaum Erfahrung mit solchen Sachen, ich habe es auch für 
mögliche gehalten das es fertige ICS für sowas gibt und ich nur die 
falschen Suchbegriffe hatte, deshalb habe ich einfach mal gefragt.

Wahrscheinlich ist es echt kein Problem die zwei LSB wegzulassen, nur 
gleich so das Problem anzugehen wollte ich auch nicht und allein 
entscheiden ob das geht kann ich ebenfalls nicht.

Das Fazit dieser Diskussion sieht wohl so aus:
Entweder ich lass die 2 LSB weg, oder ich arbeite mich in die CPLD 
Programmierung ein, was sicher auch spannend wäre.

Danke nochmal für die vielen schnellen Antworten.

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