Hi,
erstmal eine kurze zusammenfassung meiner Anwendung:
Ich plane gerade ein Schaltung in dieser u.a. Daten per USB an einen PC
gesendet werden sollen und dort einige Auswertungen vorgenommen werden.
grobe Schematische Darstellung der Schaltung:
Eingangsdaten->AD-Wandler->(Mikrocontroller)->FT245R->USB
Insgesamt werden vier 24-Bit AD-Wandler eingesetz.
Leider hab ich das Datenblatt von FTDI nicht wirklich verstehen können,
ich hoffe ihr könnte mir dabei helfen. Nun zu meinen Fragen:
1)Welche Eingänge muss ich benutzen um die digitalisierten Daten in den
FT245R zu bekommen? (D0-D7??)
2)Welche Genauigkeit hat der Chip? Kann es passieren das Genauigkeiten
verlohren gehn?
3)Die Ausgänge USBDP und USBDM müssen an einen USB-B Stecker wenn ich
diese an eine PC übertragen will, oder liege ich da falsch?
4)Da 128byte sende Puffer vorhanden sind, kann ich jeweils 32byte von
jeden der vier digitalisieren Signalen zwischenspeichern und somit per
USB übertragen oder liege ich da falsch? Die Aufteilung der
"Datenbrocken" (jeweils 32 byte) müssten vorher in einem µC realisiert
werden?
Ich hoffe ihr versteht meine Fragen und könnt mir helfen diesen Baustein
zu verstehen.
Danke
1)Ich habe die Eingänge D0-D7. Sind diese Eingänge jeweils nur ein Bit
oder was? Wozu hab ich überhaupt 8 Eingänge? Was wäre an an jedem
Eingang Daten anliegen und wie würde dazu die Nutzdaten des USB
Protokolls aussehen?
2)z.Z. haben meine Daten durch die digitalisierung eine Genauigkeit von
24-Bit. Untersutzt dieser Chip auch die Genauigkeit oder geht diese zum
teil verlohren?
3)Die Frage ist ob das die korrekten Ausgänge für den USB-B Stecker
sind. (USB-A sind die typischen Stecker am PC)
4)ok
Hallo,
zu 1.
Die Daten werden parallel als 8 Bit Wert übertragen.
d.h. von 0 bis 255.
zu 2.
Wenn Du ein 8 Bit Signal anlegst, wird es genauso per USB an dein
Programm übertragen.
Der Chip ist nur ein Konverter zwischen parallel 8 Bit auf USB.
Es gibt keine "Genauigkeit" !.
zu 3.
Geräte mit Hostadapter haben eine Typ A, passive Gerät wie der FTDI
haben
einen Typ B
Jogibär
Ok das bringt mich schon ein bisschen weiter. Ich versuche das nochmal
in meinen Worten zu schreiben wie ich es verstanden habe.
Ich benutze die Eingänge D0-D7 und übertrage dort jeweils 1 Bit pro
Pin(Leitung)->8 Bit.
Hab ich das richtig so verstanden?
Da nun meine Daten eine länge von 24Bit haben muss ich diese jeweils
nacheinander an den FT245R senden bis der "komplette" Wert (24
Bit)übertragen ist. Auf Empfängerseite kann dies im Programm wieder
zusammmen gesetzt werden. Kann man dies so machen?
Gibt es irgendwelche zeitlichen einschränken wie schnell ich neue Bits
an die Datenteilungen legen kann? Ich muss sicherstellen das ich eine
kontinuierliche Übertragungsrate von 2MBit/s erreiche. Seht ihr darin
Probleme?
Werden die USB-Datenpakete erst gesendet wenn der komplette sende Puffer
voll ist, oder wie ist das?
Danke schonmal für die Hilfe.
DkvS
Hallo,
schon mal richtig.
Wenn Du z.B. einen 16 Bit Wert übertragen willst , überträgst Du z.B.
erst das obere byte und dann das untere Byte.
Im PC Programm fügst Du diese wieder zusammen und hast wieder deinen
16 Bit Wert.
Der FTDI hat Statuseingänge, die Anzeigen, ob Du einen neuen Wert senden
kannst oder nicht bzw. ob neue Daten anliegen .
2 Mbit sind schon mal eine Menge.Könnte problematisch werden.
Am besten Du versuchst komplette Datenblöcke zu übertragen.
USB arbeitet im 1 ms Raster.Lies Dir mal die Doku durch.
Ich weiß jetzt gar nicht auf Anhieb, ob der FTDI 1,5 Mbit oder 12 Mbit
kann.
Schau mal ins Datenblatt.
Das müßte man auch an den Widerständen am USB Bus sehen.
Damit wird die Datenrate mitgeteilt.
2 Mbit ??
Da muß der Prozessor ganz schön schaufeln.
Welchen willst Du denn verwenden ?
Ich meine mal gelesen zu haben, das 500kbit schon ein sehr guter Wert
sind.
Jogibär
Mal ein kleiner Auszug aus dem Datenblatt des FT245R:
----------------------------------------------------------------
Data transfer rate to 1 Megabyte / second - D2XX Direct Drivers.
Data transfer rate to 300 kilobyte / second - VCP Drivers.
256 byte receive buffer and 128 byte transmit
----------------------------------------------------------------
Ich denke 2MBit sollten so doch schon möglich sein oder kommt da noch so
viel Protokoll-Overhead dazu? Also ich möchte wirklich 2MBit Nutzdaten
übertragen + USB Protokoll etc.
Kannst du mir den sagen was genau der DsXX Direct Driver ist? Somit
hätte ich ja 8MBit/s und damit keine Platzprobleme auf der Datenleitung.
Das die Widerständen die Geschwindigkeit angibt ist ja echt ne gute neue
Info. Dies werd ich mir mal die Tag durchlesen.
Welchen Prozessor ich verwenden will weis ich noch nicht. Ich denke da
wird sich schon einer finden. Ich muss bei dem Projekt nicht auf jeden
Pfennig achten und denke das ich dann schon was vernünftiges bekommen
kann und hatte mich in der richtung noch nicht Informiert. Könnt ihr den
spontan einen empfehlen?
DkvS
> Das die Widerständen die Geschwindigkeit angibt ist ja echt ne gute> neue Info.
Abhängig davon ob mit einem 1,5kOhm Widerstand die D+ oder D- Leitung an
VBus gelegt wird erkennt der USB-Hostcontroller ob sich ein 1,5Mbit oder
ein 12MBit Device anmelden (enumeration) will.
Bei den FTDI Bausteinen mit Suffix "R" - also auch FT245R - ist der
Widerstand schon eingebaut.
Das Datenblatt sollte mehr dazu wissen.
Im Datenblatt ist vollgendes zu finden:
USBDP: USB Data Signal Plus, incorporating internal series resistor and
1.5kΩ pull up resistor to 3.3V
USBDM: USB Data Signal Minus, incorporating internal series resistor.
Ist das somit nun 1,5MBit oder 12MBit? Wenn es 1,5 sind, kann ich den
Chip ja nicht mehr verweden. Hättet ihr eine andere alternative....am
besten von FTDI??
Der schafft unter günstigsten bedingungen schon die 8 MBit/s, aber dann
darf auf dem USB sonst nix los sein, und das FIFO Schreib-Timing muss so
knapp wie möglich gehalten werden.
Am besten wäre wohl wenn ich das im Vorfeld mal teste ob ich diese
Ubertragungsgeschwindigkeiten erreichen kann. Aber wenn im Datenblatt
steht das es 8MBit/s kann, sollten doch so spontan gesagt keine Probleme
bei der Übertragung von 2MBit/s auftreten....oder?
Da wäre ich vorsichtig. Denn das hängt auch ganz stark von der
PC-Applikation ab. Wie du die Daten abholst, da musst du mit Threads
arbeiten, die Buffergrößen optimal anpassen, dann muss der USB relativ
frei sein und und und.
Dann gehts weiter beim Timing zwischenµC und FT245, da muss auch alles
stimmen, die Flags schnell genug abfragen.
Ich würde es vorher mal testen. USB hat da so seine
Eigenarten....Windows speziell macht da manchmal sehr interessante
Sachen.
Vielleicht ist dann ein schnellerer USB Controller besser, z.B. der
Cypress 68013, da gibts auch eine schöne preiswerte und einfache
API+Firmware von Braintechnology.
Alles in allen hört sich die Übertragung meiner benötigen Nutzdaten mit
diesem Baustein etwas problematisch an.
Hat einer von euch noch andere Lösungsansätze mit verschiedenen anderen
Bausteinen für dieses Problem. Wenn es möglich ist, würde ich aus
zeitgründen sehr gern auf die Treiberprogrammierung und USB-Protokoll
programmierung verzichten. Gibt es da sinnvoll alternativen?
Ich hoffe ihr habt da nochwas für mich :-)
>Natürlich hat er die, aber die rs232 schnittstelle ist halt viel zu>langsam um alle Daten übertragen zu können.
Das würde mich aber mal interessieren, welche Datenmenge da so anfällt.
Dies habe ich in einer der letzten Einträge bereits geschrieben.....es
sind 2Mbit/s bzw. vielleicht auch 2,5Mbit/s Nutzdaten. Hinzu kommt noch
der ganze Protokoll-Overhead.
Ich bin nicht auf die Bausteine von FTDI fixiert. Ich will nur so wenig
Aufwand wie möglich haben. Also Daten in den IC und dann soll der Chip
am besten das ganze USB Protokoll und die Übertragung selber machen.
Gibt es den da noch andere Hersteller die so was in die Richtung machen?