Hi,
ich habe den USB Controller CY7C68013A von Cypress. Um mir Zeit zu
ersparen habe ich mit die Platine und die Software von Braintechnology
gekauft. Leider bin ich mit der Software überhaupt nicht zufrieden bzw.
kann nicht das was für mich gefordert ist! Kennt ihr alternativ Firmen
die soetwas anbieten?
>kann nicht das was für mich gefordert ist
Was willst DU denn?
Und was kann "die" nicht?
Also nicht wundern, wenn du auf diese Anfrage keine Antworten bekommst.
Ich bekomme schon antworten, jedoch stelle ich verhalten bei den
controller fest, was meiner meinung nach nicht korrekt ist. Ich bin
intersiv mit der Firma im Kontakt um die Probleme zu beseitigen, aber
ich wollte mich trotzdem mal nach alternativen umschauen.
Wer von euch nutzt den den parallel mode und generiert die Waveform mit
dem ParUsbEditor?
>Ich bekomme schon antworten, jedoch stelle ich verhalten bei den
:-)
Ich meinte nicht den Controller, sondern Antworten von den Forum-Usern.
Es scheint wirklich vielen Leuten unheimlich schwer zu fallen,
eine verständliche Frage zu formulieren.
Du willst es nicht verstehen, oder?
Alternativen zu WAS?
Suchst du einen µC mit integriertem USB?
Gibts genug.
Muß es ein 8051-Kern oder darf es auch eine andere Architektur sein?
Das einzig interessante für jemanden, der dir helfen soll, ist aber
die Aufgabenstellung. WAS hast du vor?
Entweder ist diese so geheim, dass du sie nicht nennen möchtest.
Oder du bist nicht in der Lage, sie zu formulieren.
In beiden Fällen wird dir keiner helfen können.
Warum ICH hier poste?
Im Fernsehen läuft grad nichts besseres.. ;-)
Wie ich am anfang geschrieben habe bzw. ausdrücken wollte ist, das ich
mit dem USB-Controller zufrieden bin. Jedoch die Software bei mir
Probleme macht und ich hierfür alternativen suche.
Den FX2 kann man eigentlich recht unproblematisch programmieren. Ich hab
aber dazu nie irgendwelche Software außer einem Compiler (SDCC) und
einem kleinen Upload Programm gebraucht.
> Wer von euch nutzt den den parallel mode und generiert die> Waveform mit dem ParUsbEditor?
Du willst wahrscheinlich das GPIF programmieren, was der "parallel mode"
ist - keine Ahnung. Müssen sich die Leute von braintechnology ausgedacht
haben, im FX2 User's Guide wird das nicht erwähnt.
Verwende halt einfach die Original Software von Cypress:
http://www.cypress.com/portal/server.pt?space=CommunityPage&control=SetCommunity&CommunityID=285&PageID=552&shortlink=DA_188585&REF=SCH&CID=ILC-shortlinks&shk=DA_188585&REF=SCH
Ich habe aber beim GPIF oft festgestellt, dass es nicht das macht was es
sollte (naja, eigentlich macht es nur nicht das, was ich wollte).
Z.b. ist es mir nie gelungen den Transaction Counter zu benutzen..
Ich hab dann einen externen CPLD zur Steuerung benutzt und den FX2 als
Slave FIFO betrieben.
Also wir haben das auch mal probiert mit der BrainTechnology Firnware.
Kann man voll vergessen. Schon die Doku ist haarsträubend. Naja, die
kleinen Boards gehn gerade so als Testboard, aber Software? Nein danke.
Die hab ich dann in 4 Tagen selbst geschrieben, Slave-FIFO, total
einfach zu machen. Zieh dir das Entwicklungspaket von Cypress, da sind
massenhaft Beispiele dabei, ist wirklich nicht schwer.
@Christian R.: Was hast du damit genau gemacht? Ich muss Daten von einem
ADC (bzw. später vier) auslesen und parallel Übertragen. Müsste da ja
auch irgendwie gehen (GPIF Designer denke ich). Wärest du bereit mir
einen Teil deiner Software zu geben, da ich durch die Probleme mit der
Braintechnology schon viel Zeit verlohren habe und deshalb einigen
Zeitdruck habe.
Also wir haben da noch einen FPGA dran, man will ja äquidistant
abtasten, das geht nur mit externer Logix und FIFO-Speicher. Wenn du
die ADCs direkt an den Cypress machen willst, wird das Murks.
Programm kann ich dir nicht geben, hab das auf Arbeit gemacht. Aber ohne
externe Logik wird´s nix mit sinnvoll Abtasten.
Wieso wird das Murks? Ich stelle mit dem Cypress einfach nur die Timings
ein setzte die entsprechenden Steuerleitungen, warte bis die
konvertierung beemdet ist und dann werden die anliegenden Daten vom ADC
gelesen. Also ich kann mir da jetzt keine Problem vorstellen.
Könntest du mich aufklären wieso du dieser Meinung bist.
Hattest du mal das Fach Systemtheorie? Wenn man was messen will, wie
z.B. ein Oszilloskop oder sowas, dann muss man äquidistant abtasten.
Das heißt, du musst garantieren, dass der ADC immer gleichmäßig
umsetzt. Da aber nun USB und das dahinter hängende Betriebssystem
(Windows, Linux...) nicht echtzeitfähig ist, kann man das nicht
garantieren. Man könnte höchstens üner isochronen Transfer alle 125µs
was machen. Aber 8khz Abtastrate ist sicher nicht das, was du willst.
Ansonsten kannst du den ADC mit einer externen Logik abtasten lassen,
und den FX2 im Slave-FIFO Modus benutzen und hoffen, dass das OS die
Daten schnell genug abholt, und dein FIFO nicht überläuft. Mit einem
aktuellen Windows-PC und ohne sonstige Aktivität hab ich aus dem Chip an
sich etwa 40MByte/s abgeholt. Theoretisch sollte man das auch schaffen,
wenn man die Daten mit 48MHz im Slave FIFO Modus da rein schaufelt. Dazu
brauchts aber einen CPLD oder sowas am externen Bus. Da hatte aber das
Windows sonst nix zu tun, und das Abholen lief in einem Thread mit
erhöhter Priorität.
Ne Systemtheorie hatte ich nicht....war nur ein WP und ich hab was
anderes gemacht ;-). Mal im erst. Verstehen tuhe ich das Problem immer
noch nicht. Der ADC hat einen eigenen Takt. Da muss ich nur mal kurz
eine Steuerleitung setzten und dann ca. 1,2µs warten und dann 16Bit
lesen....und das alles wiederholt sich dann. Klingt für mich persönlich
nach nicht so viel was der PC da leisten muss.
Und was meinst du mit externen Logik....was soll die machen?
Wie garantierst du, dass du die Steuerleitung für die konvertierung in
konstanten Abständen setzen kannst? Wenn du das vollkommen ehne externe
Logik machen willst, müsstest du eine eigene Firmware für den FX2
schreiben, per Interrupt das Steuersignal auslesen und dann über 2 Ports
die Daten in den Endpoint-FIFO schreiben. Allerdings hat der FX2 bloß
48MHz, ist nen oller 8051, ich weiß nicht, wie schnell der das kann.
Dann musst du halt noch beachten, dass du vom PC die Daten schnell genug
abholst, sonst läuft der Endpoint-FIFO über.
Ich weiß nicht, ob das ganze mit dem GPIF so klappt, wi du dir das
vorstellst. Außerdem hat das GPIF ziemlich viele Macken, merkt man erst,
wenn man damit programmieren will.
Das ich die Leitungen in konstanten Abständen setzte, kann ich nicht
garantieren, jodoch benötigt der ADC auch mal länger oder kürzer um die
Daten zu sammmeln die die konvertiert werden müssen. Zusätzlich ist die
konvertierung auch nicht zeitlich konstant. Also kann ich ja sowieso
nicht äquidistant Abtasten. Und wenn mal ein paar Daten verlohren gehen,
ist das für meine Anwendung auch nicht das todesurteil.
Das die Daten vom Windows schnell genug abholt ist denke ich kein
Problem, da zwischen dem holen der Daten vom ADC bis zum nächsten holen
mehr als 4µs zeit bleibt....und das sollte doch machbar sein.
Hm...seit wann haben ADCs keine konstanten Umsetzeiten? Naja, wie auch
immer. Musst du halt probieren. Musst halt schauen, dass du die
Endpoint-Buffer ordentlich füllst. So hohe Übertragungstraten bekommst
du nur hin, wenn du große Blöcke anforderst. Bei 512 Byte angeforderter
Daten pro Abfrage kommt man nur auf 3,5 MB/s.....das steigt dann recht
konstant an bis man bei 64k Blocklänge bei etwa 40MB/s ist. Dazu müssen
aber die Endpunkte 4-fach gefuffert sein und schnell genug befüllt
werden.
Muss ich halt probieren. Aber die Übetragungsrate ist mir zur Zeit fast
völlig egal. Ich würde gern am Ende eine von ca. 3MByte/s haben.....das
reicht mir schon völlig aus....und siehst du da ein Problem?
Frag mich nicht warum der keine konstanten Umsetzeiten hat....aber im
Datenblatt steht nur die Max. Dauer. Ist halt so kann ich nicht ändern.
Naja, Hauptsache ist, dass man das Startsignal zur Umwandlung jitterfrei
hinbekommt. Ansonsten bekommst du durch den Trigger-Jitter jede Menge
digitales Rauschen in dein Signal.
Ich habe mich jetzt mal über das Wochenende mit dem Baustein und die
Software von Cypress auseinander gesetzt. Eines wurde mir jedoch nicht
klar.
Kann man über das Cypress Control Panel sein erstelltes Timing ohne
zusätzliche programmierung testen? Oder muss man die Funktionen
TP_Init() und TP_Poll() entsprechend programmieren um das testen zu
können? Zu beginn wäre es natürlich gut, nur das Timing ohne
zusätzlichen aufwand testen zu können.
Also ich nutze auch das braintechnology-Board und warte grad auf mein
AD-Wandler-Board (THS1206M-EVM). Der AD-Wandler hat einen integrierten
FIFO.
Braintechnology bietet einen gpifcconverter an, mit dem man das vom
GPIF-Designer erstellte File mit der braintechnology-software benutzen
kann.
Also sollte man theoretisch allein mit dem GPIF Designer umgehen können
und mit den Befehlen des Headerfiles der usb2.dll von braintechnology.
Ich hab das Board mit einem kleinen Delphiprogramm bereits angesprochen.
Funktioniert alles soweit.
Mein Problem ist jetzt, dem GPIF-Designer beizubringen, dass er nach dem
Ready-Signal des FIFOs vom AD-Wandler (ein Low-Puls oder Low-High
Signal) eine bestimmte Anzahl Daten aus dem FIFO liest.
Es existiert zwar eine Hilfe zum Designer, nur leider habe ich das
Prinzip mit den RDY-Signalen noch nicht wirklich kapiert.
So, nun kann ich zwar den FIFO meines AD-Wadnlers ansprechen, aber
leider macht da USB-Board immer nach 512 Byte eine Pause, bevor es die
nächsten 512 Byte schickt.
Meine Vermutung ist ja, dass Braintechnology in der DLL den BULK Modus
eingestellt hat und nicht Isochronous.
Braintechnology macht leider gerade Urlaub. Somit ist da niemand zu
erreichen.
Nun meine Frage: Von Braintechnology gibt es ja diese USB2.dll, die
quasi den Cypress beschreibt. Wie läuft das, wenn man das selber machen
muss? Ich habe noch nie einen Mikrobontroller mittels einer DLL
beschrieben. Kann mir schwer vorsteleln, wie das laufen soll.