mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI-Bus (Slave) zu USB


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche nach einer Möglichkeit, die Daten meines AD-Wandlers (AD7366) 
per USB an den Computer zu senden. Ich habe es zuerst mit dem USB-Board 
von braintechnology probiert. Leider hat der SPI-Bus nur eine maximale 
Datenübertragungsrate von 50KHZ.

Der 12 BIT AD-Wandler tastet das Signal allerdings mit 1MHz ab.

Ich suche nun dringend nach einer passenden Alternative. Am liebsten 
wäre mir ebenfalls ein schon fertiges Board.

Gruß
Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ledier vergessen zu erwähnen, dass es sich um 3 AD-Wandler mit 
jeweils 1MHz Abtastrate handelt, die ich auf irgend eine Art und Weise 
per USB zum PC senden möchte.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist gerade eine Idee gekommen.

Wäre es möglich einen FIFO zwichenzuschalten, der das SPI-signal vom 
AD-Wandler in ein paralleles Signal umwandelt? Das parallele 
Eingangsport des USB-Boards arbeitet mit der nötigen Geschwindigkeit.

Ich habe noch nie mit einem FIFO gearbeitet. Gibt es so etwas?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wäre es möglich einen FIFO zwichenzuschalten, der das SPI-signal vom
> AD-Wandler in ein paralleles Signal umwandelt? Das parallele
> Eingangsport des USB-Boards arbeitet mit der nötigen Geschwindigkeit.
Wenn die Logik ausgeknobelt ist, dann geht das.

Weitere Alternativen wären:
- SiLabs USB 8051er
- FTDI 2232D
- weitere USB Controller mit anderer Architektur (AVR, usw.)

Bei der Controllerlösung kannst du selbst bestimmen, wie du es machst, 
der FTDI kann auch SPI, allerdings mit Einschränkungen (kein 
gleichzeitiges Lesen/Schreiben).

In beiden Fällen bräuchtest du die entsprechenden DLLs für die USB 
Kommunikation.

Ralf

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein kleines CPLD, was die Daten parallelisiert und dem USB-Interface zur 
Verfügung stellt sollte reichen. Allerdings hast du dann schon 16 
MByte/s, die du per USB verschicken musst. Da du (bei BULK-Tansfer) 
nicht garantieren kannst, die Daten immer sofort abholen zu können, 
müsstest du noch einen FIFO dazwischen schalten. Das CPLD parallelisiert 
die ADC-Daten und schreibt sie in den FIFO, das USB-Interface liest sie 
dann aus dem FIFO aus.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für mich ist das jetzt halt auch ne Kostenfrage.
Ich müsste sowieso noch einen FIFO implementieren.
Diese Tatsache habe ich leider am Anfang des Projektes total übersehen.

Wenn der FIFO mir das SPI-Signal in ein Parallels wandeln könnte, wäre 
mein Problem perfekt gelöst.

Wenn dafür wirklich ein Umweg über einen weiteren IC nötig ist, werde 
ich wohl eher einen anderen AD-Wandler benutzen müssen.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sollte das FIFO denn sowas machen? Das kann höchsten Bus-Matching, 
also von 8 Bis Bus auf 16 Bit oder umgekehrt. Sind aber dann schon 
teurere. Am einfachsten wird es, wenn du gleich einen kleinen FPGA 
nimmst, da kannst du den FIFO aus dem internen Block-RAM benutzen. Ein 
Spartan 3E-250 kostet nichtmal 30€.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, da ich noch kein VHDL kann und demnach die FPGA-Geschichte für mich 
nicht ganz so einfach werden wird, werde ich mir wohl einfach parallele 
AD-Wandler benutzen.

Danke für die Hilfe.
Gruß
Klaus

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hat denn jetzt 1MHz? Der SPI als Datenrate, oder ist das die 
Abtastrate des A/D Wandlers?

Bei 3x1MHz mal 12 Bit ergibt sich das Problem, dass einfache USB 
Interface Chips da nicht ausreichen. Wenn die Daten pünktlich ankommen 
müssen ist ein Iso-Transfer notwendig und den kriegt man nur, wenn man 
den USB Controller selber programmiert (also kein IO-Warrior, FTDI 
o.ä.). In jedem Fall ist es notwendig die Daten in größere Datenpakete 
zu packen, da es nicht möglich ist 1 Mio Datenpakete pro Sekunde zu 
senden.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich nutze das USB-Board von Braintechnology. Das hat den CY7C68013A 
von Cypress.

Die dll kommt vom Entwickler. DIese kann man in C und Delphi einbinden 
und deren Funktionen nutzen.

So zum Beispiel das Parallelport. Man kann selber ein 
ParallelPortProtokoll entwickeln oder eins der bereits implementierten 
benutzen.

Ein bereits implementiertes hat zum Beispiel folgende Spezifikationen:

Bus width / Max. Data transfer rate (Burst rate)
16 Bit / 48 MB/s

Ich dächte, das müsste locker ausreichen?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, wie gesagt, ich werde jetzt gleich Wandler mit Parallelem 
Ausgang nutzen. Die SPI-Wandler habe ich verworfen.
Und ja, die drei Wandler tasten mit 1MHz ab.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst auf jeden Fall externe Logik für die Sache. Insgesamt hast 
du 6MByte/s an Daten, das geht locker über USB 2.0

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das hier ist eine USB zu SPI Bridge:

http://www.myavr.de/shop/article.php?artDataID=36

mit dem dazugehörigen terminal

http://www.myavr.de/download.php?suchwort=DL80


Gruß M.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ohne Zwischenpuffer/Kompression funktioniert das bei konstantem abtasten 
nur mit HighSpeed USB. Das haben die wenigsten Controller.

12Bit bei 1MHz = 1,5 MBytes/s
3 Controller gleichzeitig = 4,5 MBytes/s

USB FullSpeed schafft grade mal 1,5MBytes/s ohne Protokoll-Overhead.

Grüße Gast

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus: Danke, ich werd mir mal die Beschreibung dazu anschauen.

@Gast: Der CY7C68013A unterstüzt USB-HighSpeed.


Gruß
Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus: Das Board ist leider zu langsam.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.