Forum: Mikrocontroller und Digitale Elektronik Umwandlung 10bit Wörter in 8bit Wörter


von Christian (Gast)


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

von holger (Gast)


Lesenswert?

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

1x8 Bit + 1x2 Bit

Die einfache Methode.

Oder Bits schachteln. Aber das willst du nicht.

von (prx) A. K. (prx)


Lesenswert?

Klingt stark nach CPLD.

von Scans (Gast)


Lesenswert?

Christian schrieb:
> ich muss eine Platine entwickeln
Wieso musst du denn?

von Christian (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

Christian schrieb:

> Damit erhöhe ich meine Datenrate extrem. Wenn ich mich nicht verrechnet
> haben auf über 31Mbyte/s.

Eher 40 MB/s. Was der FT lt. Werbepamphlet grad noch hergäbe.

von holger (Gast)


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.

von Martin Antoni (Gast)


Lesenswert?

Lass doch die zwei LSB einfach weg.

von Christian (Gast)


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.

von holger (Gast)


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;)

von fchk (Gast)


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

von Christian R. (supachris)


Lesenswert?

Nimmst du den neuen Cypress FX3, der kann USB 3.0 SuperSpeed, und laut 
Cypress Forum haben die schon um die 220MB/s übertragen.

von Christian (Gast)


Lesenswert?

@holger:
Das habe ich schon befürchtet, aber fragen kostet nichts, dachte ich mir 
;-).

Danke für die Hilfe.

von (prx) A. K. (prx)


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.

von Scans (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

holger schrieb:

> 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;)

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

von holger (Gast)


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.

von Frank L. (franklink)


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

von (prx) A. K. (prx)


Lesenswert?

Stell ich mir super in einer Abschlussarbeit vor: "10 Bits krieg ich 
sowieso nicht sauber hin, also beschränkte ich mich vorsorglich auf 8".

von Frank L. (franklink)


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

von Christian (Gast)


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.

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
Noch kein Account? Hier anmelden.