PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschiede zwischen FT232BM und FT245 USB-Chips



Ruppi
12.11.2005, 11:09
Hallo zusammen,
habe mir vor kurzem ein kleines USB-Interface gebaut, es läuft auch ohne Probleme. Allerdings ist der einkommene Datenstrom kaum zu bewältigen, da erst valide Daten ausgefiltert werden müssen. Zum Verständnis ein Beispiel:
Ich mache mit einem ATMega nichts weiter, als eine schnelle AD-Wandlung eines einzigen Pins (mit etwa 10kHz) und schicke das Messergebnis über das Interface zum PC. Jetzt ist das leider beim FT232BM so, dass die Eingänge sehr schnell gesampelt werden, sodass ich eine Menge nicht nutzbarer Messdaten bekomme - es kommt also wesentlich mehr raus, als man reinsteckt. Der Messwert ist in 2 einzelne Bytes aufgeteilt, ich nutze aber nur jeweils 6 bits davon. Das 6.Bit nutze ich, um das erste bzw. zweite Byte zu kennzeichnen. Auf dem PC kommt aber nicht immer abwechselnd Byte1, Byte2, Byte1, Byte2, usw an, sondern 100mal byte1, dann etwa 100mal Byte2 und so weiter an, eben wegen dem hohen Sampling. Ich muss also auf dem PC immer erst filtern, um nur die beiden Bytes zu bekommen.
Hat jemand eine bessere Idee, das Problem in den Griff zu kriegen oder Erfahrungen mit dem FT245 Parallel-Umsetzer? Ich möchte, dass auf dem Rechner nur die Bytes ankommen, die auch gesendet wurden und nicht ein paar mal das gleiche. Ist ein wenig schlecht erklärt, hoffe ihr könnt mir trotzdem helfen.

Danke, Ruppi

Ratber
13.11.2005, 15:43
Hast du kein Strobe genutzt ?

Ruppi
13.11.2005, 18:19
Wie jetzt Strobe?! Kann Dir nicht ganz folgen...

Ruppi

Ratber
13.11.2005, 18:33
Na du fragst offensichtlich ständig den Port ab obwohl sich nix ändert.
Is schon klar das du x-mal das gleiche bekommst.

Normalerweise werden Zwei Leitungen als Handshake genommen.

Der Sender zieht seine von 0 auf 1
Der Empfänger weiß das Gültige Daten da sind und liest sie ein.
Danach setzt er seine leitung auch auf 1
Der Sender weiß das die Daten angekommen sind und setzt seine wieder auf 0
Der Empfänger sieht damit das der Sender fertig ist und senkt seine ebenfalls auf 0
Damit weiß der Sender das der Empfänger Sendebereit ist.

So geht keine Übertragung verloren.
So läuft es normalerweise am Printerport.
Die leitungen heissen dann Strobe und Busy und werden noch etwas anders betrieben aber im Grunde ähnlich.

Ob man noch Prüfbits mitsenden will um die Datenintegrität zu prüfen ist Optional.
Damit wäre die Übertragung recht sicher.


Da du mit 10Khz einlesen möchtest wäre zumindest dien Steuerleitung vom Sender nötig.
Also 0->1 und der Empfänger liest einmal.
Erst wenn das Signal wieder 1->0 geht ist man wieder bereit.

So liest du nicht dauernd das gleiche.

Ruppi
15.11.2005, 05:58
Moin,
diese Vorgehensweise ist mir bekannt, jedoch habe ich leider nur acht IO's zur Verfügung und diese hätte ich gerne für eine quasi parallele Übertragung verwendet. Klar kann man's so machen wie Du es beschreibst, dann aber seriell. Trotzdem aber vielen Dank für Deine Bemühungen!

MfG, Ruppi

Ratber
15.11.2005, 06:42
diese Vorgehensweise ist mir bekannt, jedoch habe ich leider nur acht IO's zur Verfügung .........

Ich interpretiere deinen ersten Post ganz oben so das du momentan den 232 einsetzt.
Da gibt es Neben den Datenleitungen TXD und RXD auch noch die Steuerleitungen RTS , CTS , DTR , DSR usw. die ja den Datenfluss Steuern sollen.
Haste die nicht genutzt ?


Oder nutzt du doch schon den 245er ?

In dem Falle gibt es neben den Datenleitungen eben noch RD / WR / TXE und RXF die für die Flussteuerung vorgesehen sind.


Da wirst du kaum um die bereitstellung weiterer Portpinne herumkommen wenn du das in den Griff bekommen willst.

Nur mit 8 Datenleitungen ist das nicht zu bewerkstelligen denn woher soll der Chip denn wissen wan die Daten neu sind und wan nicht ?


so wie ich es Oben verstanden habe ist die Datenübertragung total freilaufend und damit unabhängig von der Messung.

Überleg nochmal.

Ruppi
15.11.2005, 12:28
Oh, sorry! Ich hatte nicht gewusst, dass Du den Chip wirklich kennst. Also es ist so, dass ich den sog. Bit Bang Mode nutze, da kann man die Datenleitungen einzeln als Ein- bzw. Ausgang konfigurieren. Ich verwende das Ganze mit einem ATMega8, um Messwerte eines schnellen AD-Wandlers auf den PC zu übertragen. Dazu wollte ich zwecks Geschwindigkeit aber nicht die Rx/Tx Leitungen des ATMega verwenden, sondern die Datenleitungen an einen ganzen Port anschließen. Ich wußte nicht, dass der FT245 mehr IO's hat, dann wäre er wohl die bessere Wahl.
Sorry, dass ich am Anfang zu wenige Info's darüber gegeben habe, jetzt ist es sicher klar geworden.

Gruß, Ruppi

Ratber
15.11.2005, 15:11
Oh, sorry! Ich hatte nicht gewusst, dass Du den Chip wirklich kennst.

Ja meinste ich rede nur so aus Jux drüber ?

Sicher kenn ich die USB-Chips von FTDI.
Die sind ja für jeden Bastler schon fast ein Quasistandard.




Also es ist so, dass ich den sog. Bit Bang Mode nutze, da kann man die Datenleitungen einzeln als Ein- bzw. Ausgang konfigurieren. Ich verwende das Ganze mit einem ATMega8, um Messwerte eines schnellen AD-Wandlers auf den PC zu übertragen. Dazu wollte ich zwecks Geschwindigkeit aber nicht die Rx/Tx Leitungen des ATMega verwenden, sondern die Datenleitungen an einen ganzen Port anschließen. Ich wußte nicht, dass der FT245 mehr IO's hat, dann wäre er wohl die bessere Wahl.

Ja der 232er is eben wie der Name schon vermuten läst nen RS232-USB Umsetzer und der 245er das Gegenstück für ne Centronix.
Alle Daten- und Steuerleitungen sind existent.



Sicher,freilaufend ist es sehr einfach aber den Nachteil spürst du ja gerade.
Du bekommst unmengen an unbrauchbaren Daten.
Wenn du Synchrone Daten bekommen willst (Genau ein Datensatz pro Sample) dann wist ru ein Handshake einfügen müssen (Steht alles in den Datenblättern und Beispielene im Web).
Das kostet dich natürlich auf dem Controller etwas Rechenzeit was die Samplerate drückt.
Ich sage iimmer "Lieber wenige verlässliche Daten als Tonnenweise Gerüchte"

Darf man fragen was eines solchen Datenstromes bedarf ?

Ruppi
17.11.2005, 05:45
Moin!
ich benötige das, um Messdaten von einem sehr schnellen AD-Wandler (> 1 MSamples) zu übertragen. Diese Daten sind nicht komprimiert, pro Messwert müssen dann 12bit übertragen werden.
Sorry übrigens, dass ich Dein Wissen in Frage gestellt habe. War nicht böse gemeint. Nochmal Danke für Deine Hilfe.

Gruß, Ruppi

Ratber
17.11.2005, 07:45
Sorry übrigens, dass ich Dein Wissen in Frage gestellt habe. War nicht böse gemeint. Nochmal Danke für Deine Hilfe.


Hab ich nicht so empfunden.
Kein Problem.



Zur Sache.


ich benötige das, um Messdaten von einem sehr schnellen AD-Wandler (> 1 MSamples) zu übertragen. Diese Daten sind nicht komprimiert, pro Messwert müssen dann 12bit übertragen werden.


Öha,jetzt gleich 1 MSample.
Das ist gegenüber den 10k von oben ne andere Dimension.


Hmmm.
Las mal eben Rechnen.:


Also bei einfacher Teilung auf 2 Bytes sind das 2 Mio Übertragungen/Sek. Also ca. 1.9Megabytes die Sekunde.

USB macht aber bei 12Mbits zu.
Selbst wenn ich nur Nutzdaten übertragen könnte wären das maximale und rein Theoretische 1.43 MB/s

Der FT232 ist da mit seinen 3 Mbaud schon lange aussem Rennen.

Wenn ich die 12bit aufteile (Also 3 Byte für 2 Messungen) dann komme ich genau auf meine 1.43 Megabyte pro sekunde die das Theoretische Limmit für USB1 darstellen.

Abgesehen davon das man diese Rate nicht erreichen wird weils Protokoll ja auch irgendwo hin muß ist der FT245 auch aussem Rennen denn der macht schon bei 1MB/s dicht.


Wenn du wirklich 1 Mio 12 bittige Samples pro sekunde (Hab ich jetzt so verstanden) in den Rechner schaufeln willst dann mußte dir was einfallen lassen.

Bei USB1 kannste da nur noch komprimieren oder vieleicht über Zwei Ports parallel gehen.(Ob das Praktikabel ist lasse ich im Raum stehen)
Die Alternative ist entweder auf USB2 aufzurüsten oder ne andere Schnittstelle zu nehmen.(Erw.Parport,Firewire,PCI also Karte....etc.usw.).



Wie gesagt,mit den alten 10Ksamples wäre das kein Akt gewesen aber so mußte etwas umdisponieren.

Ruppi
17.11.2005, 17:46
Äh ja, die Lage hat sich geändert...
Habe die Tage gehört, dass 10kHz auf gar keinen Fall ausreichen würden, daher die andere Angabe. Ich bin bei meiner Berechnung auf die gleichen Werte gekommen, geht also auf keinen Fall.
Ich habe es heute hinbekommen, den Bit Bang Mode fehlerfrei zu übertragen, also einfach nur PC-seitig ein entsprechendes Protokoll zu programmieren. Jedoch brauche ich immer das MSB, um die einzelnen Bytes voneinander zu unterscheiden, ich nutze also nur jeweils 7bits. Die Sache ist jedenfalls ziemlich schnell und vielleicht für den Zweck ausreichend, das müsste ich aber noch klären. Und wenn die 1MSamples tatsächlich benötigt werden, könnte ich ja die Messwerte erst in einen Speicher schieben und dann irgendwann blockweise langsamer übertragen.
Kennst Du Dich zufällig auch mit Firewire oder noch besser PCI aus? Nur so interessehalber...

MfG Ruppi

Ratber
17.11.2005, 20:14
Und wenn die 1MSamples tatsächlich benötigt werden, könnte ich ja die Messwerte erst in einen Speicher schieben und dann irgendwann blockweise langsamer übertragen.

Ja,das wollte ich vorhin noch gefragt haben ob du den Datenstrom
unbegrenzt brauchst oder nur kurzfristig.
Gut,is damit abgehakt.



Kennst Du Dich zufällig auch mit Firewire oder noch besser PCI aus? Nur so interessehalber...

Also bei Firewire beschrnkt es sich bei mir nur auf die alltägliche
Anwendung rund um PC und diverse Peripheriegeräte (Cam,HD usw.)
sowie einige dafür nebenbei gelesene Grundlagen.
Ernsthaft gebastelt hab ich damit noch nicht.
Sorry aber da bin ich kein große Hilfe denn das was ich darüber weiß
kannste dir schnell aussem Web ziehen.

Für PCI hab ich mir mal vor Jahren ne art Pio gestrickt.
Da kannste aber recht einfach auf ner Prototypenkarte aufbauen.
Es ist dir ja sicher nicht entgangen das gerade mal wieder ein
Generationenwechsel beim Kartenslot im Gange ist.
Da wäre es sicher angebracht wegen der zukunftssicherheit schon einen
Blick auf PCI-Express zu werfen damit die Hardware auch noch in einigen Jahren läuft.
Näher befasst hab ich mich aber mit PCIe auch noch nicht.

Aber wo wir gerade so schön drüber reden fällt mir gerade wieder ein das
du auch über ein simples LAN gehen kannst.
Ich hab mir einige Schaltmodule bekanntem Strickmusters zusammengetackert
aber die beruhen alle noch auf 10Mbit (Isa-Karte oder RTL-Chip) also der
bekannten AN127 (http://www.mcselec.com/index.php?option=com_content&task=view&id=90&Itemid=57) bei Mcselec
Da wollte ich eh mal schauen das ich das auf ein 100er Netz umsetzte.
Für den Anfang würde ja ne PCI-Karte reichen und die bekommt man
schon ab 3.5 Eur nachgeworfen und Nettodatenraten von 8 Mb/s sind normal.
Selbst wenn ich meine Netzhardware auf ner alten Kiste absichtlich
grottenschlecht konfiguriere und Einbinde bekomme ich schon 2.5MB
aufwärts geliefert.
Wäre vieleicht eine Überlegung wert.

Oder gleich einen Controller mit USB2 Interface.

Sorry für den vielen Text.
Hab meinen Gedanken mal ungeordneten freien Lauf gegönnt.*g*

Ruppi
18.11.2005, 07:29
Moin,
das mit dem PCI oder PCIE würde mich brennend interessieren! Wenn man sich ne normale PCI-Platine kauft, braucht man doch aber noch einen Buscontroller oder wie läuft das? Und wie viele IO's hat man dann in der Regel? Ich nehme mal an, die liegen parallel auf dem Bus, oder? Wäre klasse, wenn Du mir darüber mehr Info's geben könntest, ist wirklich interessant...

Sorry für den vielen Text.
Hab meinen Gedanken mal ungeordneten freien Lauf gegönnt.*g*
Ich lese gerne...

Ruppi

Ratber
18.11.2005, 18:37
Wenn man sich ne normale PCI-Platine kauft, braucht man doch aber noch einen Buscontroller oder wie läuft das?


Da ist eigentlich nicht viel zu erzählen.
Ich lass mal einzelne Details weg.


Du brauchst zunächst einen Adressdecoder.(PCI-Decoder)
Der kann je nach Anforderung oder Wunsch fest,per Jumper oder auch
Softgesteuert sein.(Aufwand entsprechend)
Dann die Frage ob Interupt und DMA genutzt werden sollen.
Dementsprechend steigt dser Aufwand an.
Natürlich könnte man das Diskret mit Gattern aufbauen aber ein PLD
(Programmable logic device also ein Programierbarer Logigbaustein) spart
Platz,Geld und Nerven.

Der Rest ist dann die Schaltung der Anwendung.



Und wie viele IO's hat man dann in der Regel? Ich nehme mal an, die liegen parallel auf dem Bus, oder?

Wieviele IO's ist nur ne Frage wieviele du haben willst.
Da bist du Theoretisch nicht begrenzt.
auf eine Busadresse ist das nicht bezogen.

Du sprichst die Karte auf ihrer Adresse an und gibst ihr dann ,salopp
gesagt, zu verstehen was sie tun soll.


Is wie gesagt nicht besonders kompliziert.
Es gibt auch Prototypenkarten auf denen man aufbauen kann aber leider
nehmen die Anbieter einem dafür gewöhnlich nen Arm und nen Bein ab (Deutsch: Teuer).

Ich wollte noch nen Dokument anhängen aber hier sind die Atachements
auf 400k begrenzt.
Wen de Interesse hast dann schreib ne PN.
Das eine MB geht auch per Mail.

Ruppi
19.11.2005, 10:31
Hallo,
klar habe ich Interesse, für mich hört sich das nicht so leicht an. Was ist ne PN?? Ich gebe Dir mal meine EMail-Adresse: J.Ruppert@gmx.com
Wo bekommt man denn den besagten Adressdecoder? Kenne mich zwar im Reichelt-Sortiment gut aus, aber sowas ist mir noch nicht aufgefallen. Die Programmierung von PLDs interessiert mich ebenfalls schon ne halbe Ewigkeit, habe aber keinen Schimmer, wie man das macht und was man dafür braucht.
Wäre nett, wenn Du mir weiterhelfen würdest. Jetzt schon mal vielen Dank dafür!

Gruß, Ruppi

Ratber
19.11.2005, 16:33
Yo "PN" = Private Nachricht
Unten an jedem Post sind immer Mehrere Buttons und einer ist der "PN"

Ich hab dir mal was geschickt.(Mail)