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
>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.
@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
Nimmst du den neuen Cypress FX3, der kann USB 3.0 SuperSpeed, und laut Cypress Forum haben die schon um die 220MB/s übertragen.
@holger: Das habe ich schon befürchtet, aber fragen kostet nichts, dachte ich mir ;-). Danke für die Hilfe.
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
Stell ich mir super in einer Abschlussarbeit vor: "10 Bits krieg ich sowieso nicht sauber hin, also beschränkte ich mich vorsorglich auf 8".
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.
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.