mikrocontroller.net

Forum: FPGA, VHDL & Co. Speichern/Versenden von Daten


Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich hätte hier folgendes Problem.
Ich habe vor Daten die mit sehr hoher Geschwindigkeit(40Msample/s)
ankommen zu einem PC zur Weiterverarbeitung zu senden. Das Problem ist,
dass ich die Daten aufgrund der hohen Geschwindigkeit nicht direkt zu
dem PC senden kann. Ich habe mir überlegt, die Daten
zwischenzuspeichern und dann über eine programmierbaren
Baustein(Serielle Schnittstelle) zum PC zu versenden.
Mein Problem ist, dass ich noch nie etwas ähnliches gebastelt habe. Ich
habe wenig Erfahrung hiermit.
Daher wollte ich wissen, ob einer von euch ähnliches schon mal
gebastelt hat, und mir vielleicht mit einigen Tips weiterhelfen kann.
Was für einen Speicher sollte ich eurer Meinug nach einsetzen? Was für
einen Baustein sollte ich eurer Meinung nach zum Bearbeiten und
Versenden der Daten einsetzen?(was wäre einfacher?)
ich würde mich auf jeden noch so unwichtig erscheinenden Hinweis und
Hilfe freuen und bedanke mich im Voraus für eure Hilfe.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In welcher Form kommen die Daten genau an. In welchen Intervallen

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Daten kommen kontinuierlich von einem A/D-Wandler an. Ich möchte
aber jedesmal nur einen begrenzten Datenbereich
aufzeichnen(Aufzeichnungs-Start durch ein Triggersignal
festgelegt-->Einlesevorgang)
Nachdem ich den Speicher eine gewisse Zeit lang gefüllt habe möchte ich
diese Daten zu einem PC senden(Auslesevorgang), und erst dann wieder
einen Einlesevorgang in den Speicher beginnen
Das Intervall ist somit nicht so wichtig

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommen die Daten über SPI, UART oder sontigem vom A/D-Wandler?

Prinzipiell müsste es aber relativ einfach sein. In irgendeinen z.B.
AVR in einen Ringpuffer Dateneinlesen und gleichzeitig über UART an den
PC verschicken. Bis der Speicher voll ist und dann Messsung abbrechen.

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ulrich,

zuerst möchte ich mich für die schnelle Antwort bedanken.

Ich bekomme aus einem A/D-Wandler Daten von 14-Bit Breite.
Diese will ich für eine vereinfachte Bearbeitung mit zwei Nullen
versehen auf 16-Bit aufwerten und den Datenstrom aufzeichnen.

Mit einem Triggersignal bekomme ich bescheid, dass ein Datenstrom von
endlicher Länge kommt. (Länge unbekannt).
Mit Hilfe des Triggersignals möchte ich den Speichervorgang starten.
Das Speichern soll ca. 400µs dauern. Also kann ich ca. 16.000 Messwerte
aufzeichnen.
Wie das Speichern vor sich gehen soll habe ich noch keine genaue
Vorstellung.
Wichtig ist, dass ich die Daten nachdem die 400µs um sind auslesen und
seriell zum PC weitersenden kann. Danach Speicher leeren, auf neues
Triggersignal warten,...

Autor: Fly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich habe vor Daten die mit sehr hoher Geschwindigkeit(40Msample/s)
ankommen zu einem PC zur Weiterverarbeitung zu senden."

Das wären 80MByte/s
Das schreit mir förmlich nach einem grossen, schnellen RAM, kein
anderer Speicher ist schnell genug um dem Datenstrom gerecht zu werden!

Wenn dein RAM voll ist oder du die Sampleanzahl erreicht hast, musst du
die Daten zum PC kriegen. Da es sich um eine so grosse Datenmenge/Zeit
handelt, kenn ich nur USB 2.0 / Firewire das passt, ausser du möchtest
nach jeder Messung ca 100 Mal so lange warten bis die Daten beim PC
sind.

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es aus deiner Erfahrung einen Speicher, den du empfehlen würdest?
Ich habe bis jetzt für Übertragungen nur die serielle Schnittstelle
verwendet.
Gibt es bei Einsatz von USB 2.0/Firewire bekannte Schwierigkeiten, mit
denen ich rechnen müsste?
Was für Bausteine würdest du einsetzen, um Probleme zu vermeiden?
(Speicher, Controller,...)

Autor: Fly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nur deine Rahmenbedingungen analysiert, Erfahrungen habe ich
mit solchen Anforderungen leider keine.

Am einfachsten wäre wohl ein SRAM als Speicher, ob es so schnelle gibt
wie du brauchst weiss ich nicht! Die Übertragung zwischen ADC und SRAM
würde ich mit einem CPLD lösen, da rel. einfach, preiswert und
sauschnell! Die Datenübertragung zum PC mittels USB 2.0 / Firewire
ist komplex und benötigt einen sehr schnellen Controller, nix AVR, nix
zuHauseBastelaufbau. Dein Vorhaben ist kein
samstagnachmittagschlechtwettervorhaben! Ich glaube eine USB2.0 /
Firewire implementation kriegst du nicht hin.
Was hast du eigentlich vor? Evtl. kannst du dir was vom Logikanalyser
Projekt was abkupfern.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IDE oder SCSI könnte als PC-Interface interessant sein, das sollte
deutlich einfacher zu implementieren sein als Firewire.

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar gehe ich davon aus, dass ich mit meinem Wissensstand länger als ein
paar Monate brauche.
Mein Problem ist, dass ich noch nicht genau weiss, wo und wie ich
anfangen soll, das Problem zu lösen, bzw. mich einzuarbeiten.
Es sieht so aus, dass die Daten aus dem A/D-Wandler gesteuert über
einen CPLD in einen "schnellen Speicher" reingeschrieben werden
müssen. Also CPLD und Speicher aussuchen.
Die Geschwindigkeit für das Senden der Daten vom Speicher zum PC ist
vorerst nicht wichtig. Dafür reicht die serielle Übertragung aus, und
sollte viel Arbeit ersparen und Probleme auch. Aber später möchte ich,
wenn das ganze mal steht und funktioniert auch einen USB2.0 verwenden.
Es ist eine Arbeit, um ein analoges Signal zu analysieren.
Ich sammle gerade meine Erahrungen auf diesem Gebiet, und habe noch
viel dazuzulernen.

Autor: Dirk Bxxxxx (dirk-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Nimm ein PQ208 FPGA (Spartan2 200k) und lege die Daten in ein SRAM
deiner Wahl (Cypress hat schoenen ZBT kompatiblen Speicher). Du
koenntest im FPGA noch eine Datenkompression vornehmen (Timestamp
setzen bei Aenderungen). Die Timestampgeschichte kannst du im internen
Blockram erledigen. Die eigentlichen Nutzdaten kannst du per Burst
Betrieb ins SRAM packen. Die Burst-schreib/lesefunktion erspaert dir
den Adresszaehler. Als USB Schnittstelle zum Anfang wuerde ich dir den
FT245BM Chip empfehlen. Du sparst dir den FLASH Speicher fuer den FPGA,
weil der FTDI Chip den FPGA konfigurieren kann.

Der FTDI Chip ist nur USB1.1 und kann bis zu 1Mbit uebertragen, aber
bei deinem Wissensstand (nicht boese gemeint) sollte man versuchen sich
bis dahin durchzukaempfen.

Bei Xilinx liegen fertige Appnotes zur Ansteuerung von ZBT SRAM.
Der SRAM (4Mbit) lag bei knapp 20 Euro bei RS und der FPGA bei ca 30
Euro bei Digikey.

Ohne PCB bist du dann bei ca 55 Euro.

Gruß,
Dirk

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

danke dir für die Hilfe.
Ich werde mich in den nächsten tagen mal damit beschäftigen.
Kann ich ohne weiteres an diesen FPGA einen Speicher von 128MB
anschliessen?
Ich möchte ohne Datenkompression arbeiten.

Autor: Fly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rtfm oder lass es, vorkauen werden wir es dir nicht!

Autor: Markus Brenner (elektronik-bastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Fly,

ich möchte hier nichts Vorgekautes. Ich möchte das Projekt selbständig
erarbeiten und dachte dass nichts falsch dabei wäre ein paar Profis
nach einem Ratschlag zu fragen. Man kann sich dadurch besser
orientieren.
Erfahrung gewinnt man mit der Zeit durch Arbeit, und das erwartet
mich.
Danke trotzdem.

Autor: Dirk Bxxxxx (dirk-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann ich ohne weiteres an diesen FPGA einen Speicher von 128MB
>anschliessen?

Du meinst sicherlich handelsueblichen DDRAM für den PC. Natuerlich
kannst du nen Memory Controller fuer DDRAM /SD Ram programmieren.
Einige Anhaltspunkte findest du in Appnotes bei Xilinx. Ich meine die
haben auch fertige Core's.

Fang aber erstmal mit simplen Sachen an. Ein einfacher SRAM Memory
Controller mit Adresszaehler dauert als Anfaenger schon ein bischen.

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.