Daten an den PC schicken

Gast #531381
Lesenswert?

Hallo!
Ich hoffe ihr könnt mir helfen:
Ich arbeite an einem Uni-Projekt.
Dabei soll ein 16Bit SPI-Befehl an die Messvorrichtung geschickt, dann 
ein Signal mit >12Bit abgetastet und dieses schließlich an den PC 
gesendet werden.
Bislang wird ein At91SAM7S verwendet, welcher jedoch für eine geplante 
Erweiterung zu langsam ist.
wir suchen also die schnellstmögliche Lösung für dieses Problem.
Welcher Controller hat schnellere Schnittstellen zum PC?
Gast #531384
Lesenswert?

> wir suchen also die schnellstmögliche Lösung für dieses Problem

Völlig falsche Frage. Vorne steht immer die Überlegung "wie schnell muss 
es sein". Dann suchen.

Der schnelleste Controller mit Anbindung an PCs ist eine PCI-Karte im 
PC. Sowas gibt es mit Microcontroller und/oder FPGA.

> Welcher Controller hat schnellere Schnittstellen zum PC?

Jeder mit Ethernet-Controller drauf.
Gast #531681
Lesenswert?

Möglichst schnell ist nicht falsch da die Prozessgeschwindigkeit von der 
Messung ausgebremst wird.
Also suchen wir was möglichst schnelles.
wie viele Daten kann man per Ethernet effektiv an den PC senden?
Oder konkreter: Wieviele Byte/s schafft z.B. ein AT91SAM7X?
Bevor wieder NXP - Werbung kommt: Die Dinger haben eine viel zu langsame 
SPI Schnittstelle (max 1/8 MCK) und sind daher nicht geeignet.
Gast #531777
Lesenswert?

ok... beim LPC2368 siehts schon viel besser mit dem SPI (SSP) aus.
Wenns den früher gegeben hätte wäre er eine Überlegung wert gewesen.
Die Messung ist zwar nicht unendlich schnell, aber wir können das 
vorhandene Messmodul mit einem 40MSPS ADC (war gerade am Institut 
vorhanden) auch gegen ein noch schnelleres austauschen.
Ein Messzyklus besteht aus dem Senden eines 16Bit Wertes per SPI an 
einen DDS (maximal möglich wären 40MHz SPI Takt, der AT91SAM7 schafft 
24Mhz) und das darauffolgende einlesen des Messwertes vom ADC.
Dies schafft er aktuell in 2.5μS pro Messwert.
Momentan werden noch 1024 Messwerte im RAM zwischengespeichert und dann 
übertragen, da ein direktes verschicken der Messwerte über USB zu viel 
gebremst hat.
Gast #533126
Lesenswert?

Ich verstehe nicht, wieso die Lösung noch nicht bekannt ist bzw. wo das 
Bottleneck ist.

"Der AT91SAM7 schafft 24 MHz von den 40 MHz möglichen über SPI... beim 
LPC2368 siehts schon viel besser mit dem SPI (SSP) aus. Wenn's den 
früher gegeben hätte, wäre er eine Überlegung wert gewesen..."

Ist das Auslösen der Messung das Bottleneck, d.h. kannst du nicht oft 
genug den Befehl zum Messen geben? Den AT91SAM7 musst du dann 
rauswerfen. Warum dann nicht den LPC2368 verwenden, wenn der ein 
schnelleres SPI zulässt?

"Momentan werden noch 1024 Messwerte im RAM zwischengespeichert und dann
übertragen, da ein direktes verschicken der Messwerte über USB zu viel
gebremst hat."

Ist das Übertragen der Messwerte ggf. mit Ausbremsen der SPI durch das 
Übertragen das Bottleneck? Schon überlegt einen zweiten µC nur dafür 
einzusetzen? Die Netto-Datenrate von ~800 KB/s (2Byte/2.5µs) läge im 
mittleren USB Full Speed Bereich. Mehr ginge noch mit USB High Speed. 
Sind die Übertragungsroutinen µC und PC seitig bereits optimiert?
Gast #533159
Lesenswert?

2,5µs pro 16bit sind etwas unter 1MB/sec. USB1.1 oder 10Mbps Ethernet 
sind dafür zwar grad noch drin, aber zu knapp wenn man sich noch ein 
bischen Luft lassen will.

Bleiben also USB2.0 Highspeed oder 100Mbps Ethernet. Bei USB gilt es 
darauf zu achten, dass zwar viele Controller ein sogenanntes "USB 2.0" 
beherrschen, aber nur wenige davon im Highspeed-Modus. Ethernet scheint 
mir da noch verbreiteter zu sein, teils intern (z.B. Atmel SAM7X), teils 
extern via Bus (z.B. DM9000).
Gast #533427
Lesenswert?

Das Problem ist die daten Wegzuschaffen.
Das mit den 24Mhz SPI geht eigendlich gut, 8Mhz wie es die aktuell 
erhältlichen NXP ARM schaffen ist aber zu wenig.
Die kleinen ARM haben laut meinen Informationen eigendlich alle nur Full 
Speed.
Eine Optimierung der Geschwindigkeit wäre zwar schön, ich weis aber 
leider nicht wie.
Gibt es irgendwo ein Projekt welches die maximale USB Geschwindigkeit 
einen At91Sam7 ausnutzt?
Gast #533786
Lesenswert?

Moin,

du (also der Themenstarter) willst also eine Echtzeitmesswertauswertung 
aufziehen? Verstehe ich das richtig ? Oder könntest du evtl. noch mehr 
Daten auf dem µC puffern ?
Weiterhin: Sollen die zum PC gesendeten Daten in einer 
Windowsapplikation verarbeitet werden? (das würde dann den Vorgang 
ausbremsen, vor allem falls die Messswerte grafisch dargestellt werden 
sollen)...


Gruß
Christian
Gast #533804
Lesenswert?

Die Daten werden an Matlab gesendet und dort analysiert.
bislang speichere ich 1024 messwerte im Mikrocontroller (4096 geht auch 
noch) und schicke sie dann über USB zum PC (per DMA).
Ich möchte nun die Sendegeschwindigkeit deutlich erhöhen, habe dazu aber 
nichts brauchbares gefunden, wie man die maximal mögliche Bitrate des 
USB-Controllers im At91SAM7 erreichen kann. Momentan schaffe ich ca. 
250kBit/s effektiv. Das muss doch deutlich schneller gehen...
Gast #533890
Lesenswert?

Ich kann 100 FPS mit einem ATMEga128 (16MHz) und einem FTDI FT245BM
auf ein T6963 Display mit 240x64 Pixel ausgeben. Also knapp 2kB
pro Displayinhalt. 2kB * 100 = 200 kB/s. Mit einem PIC18F2550
ca 100kB/s. Nicht Kilobit/s ! Es sind Kilobyte/s.
Du machst grundsätzlich etwas falsch.

Mein Tip:
Nicht jedes Byte einzeln abschicken.
Puffern, puffern, puffern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren