Max.Sampling-Rate fuer 1 I/O-Kanal?

Hallo Wissende,

ein Digital-Signal (ca. 100 MHz) soll gesampled werden (0.002 sec Laenge).
Wenn ich auf einem PC ein Maschinen-Proggy (bzw. C-Proggy) schreibe

  1. Alle Interrupts ausschalten (soweit moeglich)
  2. geeignet Speicherbereich fuer ca. 50 MSamples
    (zB Word_32bit/Sample) reservieren, also ca. 200 MByte.

***** SAMPLING Loop START *****
3. Lese I/O-Kanal-Status (Input)
4. Schreibe 1bit_Status als Int32 in naechstfreie Speicher-Position
5. Wiederhole mit Step 3, wenn reservierter Speicher noch nicht voll
***** SAMPLING Loop END *****

  1. Schreibe Sampling-Daten auf Platte :wink:

FRAGE_1: Was ist die maximale kontinuierlich gesampelte Daten-Rate die man hier erreichen kann ? (evtl. Systemtakt_3GHz/(Cycles pro Schleifendurchlauf) ??)

FRAGE_2: Welche CPU-Interrups kann ich moeglicherweise nicht abschalten (betrifft W2K bzw Linux)?

FRAGE_3: Welche I/O-Karte eignet sich hierfuer (die soll
sinnvollerweise nicht tausende euro kosten…) ??
(Der Parallel-Port reicht nicht als Digital-Eingang bei
so hohen Frequenzen, gell ?)

Hat da jemand Erfahrung mit ??

VG,
-Thomas

Hallo Thomas,

ich befürchte mit einem PC wirst Du da nicht sehr weit kommen ohne zusätzliche Hardware.

Immerhin willst Du ein Digitales Signal aufnehmen, bei einem analogen müsstest Du erstmal einen D/A-Wandler finden der das kann. Aber so müsstest Du erstmal einen Port finden der das mitmacht. Der Parallel-Port geht bis 115kBit, die serielle Schnittstelle kann man mit Tricks wohl noch etwas höher treiben, aber das bleibt weit unter der MHz Schranke. 100MHz sind schon eine ganze Menge.

Und mehr Anschlüsse hast Du erstmal nicht zur Hand; direkten Kontakt zwischen Deiner CPU und irgendwelchen Ports gibt es eh nicht. Der schnellste Bus mit Anschluß zur CPU hat auch höchstens ein 1GHz, vermutlich eher deutlich weniger. Nur mit einem PC wird das nicht klappen, von den Schwierigkeiten der Programmierung mal ganz abgesehen.
Bessere Chancen hättest Du mit einem Microcontroller, wobei das immer noch anspruchsvoll wäre. Dafür bräuchtest Du zunächst einen Seriell-Parallel Wandler (auch als deserializer bekannt) der das Signal mit 100MBit/s sampled und dann parallel mit niedrigerer Frequenz (z.B. 100MHz/8=12,5MHz) weiter gibt. Das könntest Du dann relativ bequem in einen lokalen Speicher (min. 25KByte) kopieren und später mittels Serieller Schnittstelle in den PC zur weiteren Verarbeitung übertragen.
So ganz einfach wird das allerdings auch nicht, für die Seriell-Parallel Umsetzung wird ein Baustein aus der 74er Reihe nicht schnell genug sein, man müsste da also ein wenig suchen. Immerhin gibt es eine Reihe von Microcontrollern die genug RAM haben.

Ich denke das wäre der wohl einfachste Weg. Aber vielleicht hat ja noch jemand anderes eine bessere Idee.

Tut mir Leid, Deine Idee so zu kippen. Hoffe Dir hilft das trotzdem irgendwie weiter. Evtl. kannst Du auch ein wenig mehr zu Deinem Vorhaben preisgeben. Je mehr man weiss umso mehr Ideen und Erfahrungen kann man einbringen.

Cheers,
Ferdinand

Hallo Thomas,

weder Windows noch Linux sind Echtzeitsysteme, mit anderen Worten, es kann vorkommen, dass du für BELIEBIG LANGE ZEIT keine CPU-Leistung erhältst, man kann also überhaupt keine Samplingrate garantieren, auch nicht 100 oder 10 Hz.

Der einzige Weg ist ein Subsystem mit eigenem Prozessor, das die Daten in einen eigenen Speicher schaufelt und erst zur Auswertung und ohne Zeitdruck an die Visualisierungssoftware übergibt. Sowas gibt es zu kaufen, etwa als Data Logger oder als Speicher-Oszi, als PCI-Karte oder für den USB-Bus.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Thomas,

Grundsätzlich sind da einige Überlegungsfehler drin:

  1. Die 3GHz, sind nur chipintern vorhanden und bringen somit nichts. Die Ganze Komminikation mit der Umwelt, geht über den FSB (FrontSide Bus) und der ist schon mal wesentlich langsamer. Mit allen Tricks und Flankenverdoppelung usw, kommt der maximal auf 800MHz. Allerdings benötigt ein einzelner SpeicherzugriFF mehrere Takte.

  2. Der PCI-Bus, also dort wo die Steckkarten iengestekt werden, läuft mit 66MHz. Auch hier werden für einen Zugriff mehrere Taktzyklen benötigt …

Für dein Problem, sehe ich auch nur eine Lösung mit einem Controller und etwas Hardware.

Ich würde ein Schieberegister nehmen, welches mit der Abtastrate getaktet wird. Ist das Register voll, werden die Daten in ein Latch übernommen, das gibts als fertiges IC.
Somit kannst du die Speicherbus.Bandbreite schon mal um den Faktor 8 oder 16 reduziren.
Danach kannst du das Ganze per DMA vom Latch in den Speicher kopieren.

Bei 100MHz Abtastrate, 16 Bit Bus und 3 Takten pro Specherzyklus kommst du dann mit einem 20MHz µP schon zurecht.

MfG Peter(TOO)

Hört sich ja extrem langsam an :frowning:
Hallo Peter + (Reinhard + Ferdinand),

ja, also -Standard-PCI(32bit,66MHz) ist halt schon recht langsam… Es kann ja aber sein, dass
es hier zB spezialisierte 1-Bit-I/O-Karten für 64 bit-PCI o.ä. gibt,
die die Ergebnisse selbstaendig in den Speicher schieben.
Ein Microcontroller-Variante scheint irgendwie auch naheliegend.

Aktuell hab ich halt nur die Karte gefunden: „CompuScope 85G für cPCI Bus“
einer Münchner Firma, Sampling mit: 8-bit-_5GS_/s (cPCI muss man da auch erstmal haben…). Preis ist unbekannt,
und wahrscheinlich eh nicht bezahlbar (>> 5000EUR??).

Also ich forsche erstmal noch weiter nach ner einfachen Lösung:smile:.

VG,
-Thomas

Also aktuell

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Re: Hört sich ja extrem langsam an :frowning:
Hallo Thomas,

Hier könntest du einen passenden Controller finden.
http://eu.renesas.com/fmwk.jsp?cnt=superh_family_lan…

Die Controller, auch die Schnellen, gibts teilweise schon für 10 bis 20€.

MfG Peter(TOO)

Hallo,

Es kann ja aber sein, dass
es hier zB spezialisierte 1-Bit-I/O-Karten für 64 bit-PCI o.ä.
gibt, die die Ergebnisse selbstaendig in den Speicher schieben.

Nene, auch die können nicht zaubern.
Die lesen erstmal ihren internen Puffer voll und schieben den dann per DMA ins RAM des PC.
1Bit-I/O sind mir aber nicht bekannt, das kleinste hat 16Bit.
Okay, Bastlerlösungen gibt es auch mit 8Bit - aber natürlich mit viel kleineren Abtastraten.
Gruß
loderunner