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