Forum: FPGA, VHDL & Co. Schnittstelle Pc-FPGA


von Felix O. (felixanius)


Lesenswert?

Hallo alle,

ich lese mich gerade in das Thema ein und habe mal eine Frage. Ich habe 
an meinem Spartan 3E Starter Kit eine RS 232 Schnittstelle, die wohl am 
ehesten für die Verbindung in Frage kommt.
An meinem PC habe ich diese aber nicht. Es gibt aber scheinbar auch 
USB-RS232 Adapter. Ich will mein FPGA mit VHDL in gang bekommen. Kann 
ich jetzt einfach so tun, als hätte mein PC eine RS 232 Scnittstelle, 
wenn ich den Adapter verwende, oder muss ich das jetzt anders 
programmieren? Ich hatte vor eine UART-Schnittstelle zu programmieren 
für die Übertragung der Daten. Wie ist jetzt die Verbindung zwischen der 
UART, die ich mit VHDL schreibe (habe gelesen es gibt da auch Hardware, 
die will/darf/soll ich aber nicht benutzen) und den Schnittstellen. Da 
ist noch ein kleines großes Fragezeichen in meinem Kopf :)

Bin noch neu in dem Themengebiet und verstehe oft noch nicht ganz, was 
ich selbst machen muss und was automatisch funktioniert.

Danke!

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Für den FPGA ein Core, der RS232 kann und am PC einen USB2RS Converter.
Das Protokoll bleibt gleich.

von Gustl B. (-gb-)


Lesenswert?

Hallo, also du kannst RS232 verwenden inklusive der Pegelwandler, oder 
ohne Pegelwandler.

Mit Pegelwandler kannst du das danach einfach an die RS232 COM-Port 
Buchse vom PC anschließen, aber die ganz hohen Datenraten kannst du wohl 
vergessen, die allermeisten COM-Ports machen "nur" 115,2kBit/s.

Ohne Pegelwandler Brauchst du irgendeinen Baustein, der das serielle 
UART TTL/CMOS Signal empfängt und auf eine andere Schnittstelle 
übersetzt. Z.B. den CP2102. Sehr günstige Adapter gibt es bei eBay.

Der Adapter hat auf der einen Seite USB und auf der anderen eine 
serielle Schnittstelle bei der du aber nur RX, TX und GND benutzen 
musst. Wenn du am PS nur empfangen willst, sogar nur RX und GND. Die 
Pins kannst du direkt mit dem FPGA verbinden ohne Zusatzelektronik 
dazwischen.

Am PC gibt es dann verschiedene Software wie Realterm (Windows) oder 
Cutecom (Linux) mit der du die ankommenden Daten sogar aufnehmen kannst 
in eine Datei. Beide Programme können auch höhere Datenraten wie 
921,6kBit/s.

Im FPGA brauchst du also nur einen UART zu beschreiben, ein 
Schieberegister. Und schon kannst du ziemlich einfach Daten an den PC 
schicken.

-gb-

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Gustl Buheitel schrieb:
> die allermeisten COM-Ports machen "nur" 115,2kBit/s

Ich habe schon 230k am PC empfangen und gesendet, bei Linux 460k.

von Gustl B. (-gb-)


Lesenswert?

Klar kommt vor und manche wenige können das. Ich habe hier einige 
verschiedene Dells, Compaqs und auch einige billige Adapter getestet und 
fast alle konnten maximal 115,2kBaud. Ein paar konnten mehr, und keiner 
konnte die von mir gewünschten 921600Baud. Ein recht teurer Adapter 
konnte das dann.

Und dann habe ich die Pegelwandler weggelassen und habe die recht 
günstigen cp2102 Chips verwendet, die funktionieren super. FTDI habe ich 
nie getestet aber diese Profilic 2303 die auch echt günstig sind können 
auch 921600, das funktioniert auch, aber schickt man denen dauerhaft 
Daten, dann bekomme ich UART Overrun Fehler unter Windows und falsche 
Daten unter Linux.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Und dann habe ich die Pegelwandler weggelassen und habe die recht
> günstigen cp2102 Chips verwendet, die funktionieren super.

Wieviel baud hast du bei den CP2102 rüberbekommen?

von Gustl B. (-gb-)


Lesenswert?

Hallo,
921600 mehr habe ich aber auch nicht getestet weil die meisten Terminal 
Programme, vor allem Realterm und Cutecom nicht mehr können. Zumindest 
kann man da nicht mehr einstellen. Aber 921600 funktioniert auch über 
sehr lange Zeit uns mit vielen Daten ohne Probleme oder Fehler.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Gustl Buheitel schrieb:
> Hallo,
> 921600 mehr habe ich aber auch nicht getestet weil die meisten Terminal
> Programme, vor allem Realterm und Cutecom nicht mehr können. Zumindest
> kann man da nicht mehr einstellen. Aber 921600 funktioniert auch über
> sehr lange Zeit uns mit vielen Daten ohne Probleme oder Fehler.

Das Beispiel uartassistant ist sehr einfach für Win und Linux umsetzbar. 
Es ist auch möglich höhere Baudraten zu setzen. Wäre mal interessant ob 
es mit QT sicher geht.

http://docs.qextserialport.googlecode.com/git/1.2/examples-uartassistant.html



void QextSerialPort::setBaudRate(BaudRateType baudRate) [slot]

Sets the baud rate of the serial port to baudRate. Note that not all 
rates are applicable on all platforms. The following table shows 
translations of the various baud rate constants on Windows(including 
NT/2000) and POSIX platforms. Speeds marked with an * are speeds that 
are usable on both Windows and POSIX.

RATE          Windows Speed   POSIX Speed
-----------   -------------   -----------
 BAUD50                   X          50
 BAUD75                   X          75
*BAUD110                110         110
 BAUD134                  X         134.5
 BAUD150                  X         150
 BAUD200                  X         200
*BAUD300                300         300
*BAUD600                600         600
*BAUD1200              1200        1200
 BAUD1800                 X        1800
*BAUD2400              2400        2400
*BAUD4800              4800        4800
*BAUD9600              9600        9600
 BAUD14400            14400           X
*BAUD19200            19200       19200
*BAUD38400            38400       38400
 BAUD56000            56000           X
*BAUD57600            57600       57600
 BAUD76800                X       76800
*BAUD115200          115200      115200
 BAUD128000          128000           X
 BAUD230400               X      230400
 BAUD256000          256000           X
 BAUD460800               X      460800
 BAUD500000               X      500000
 BAUD576000               X      576000
 BAUD921600               X      921600
 BAUD1000000              X     1000000
 BAUD1152000              X     1152000
 BAUD1500000              X     1500000
 BAUD2000000              X     2000000
 BAUD2500000              X     2500000
 BAUD3000000              X     3000000
 BAUD3500000              X     3500000
 BAUD4000000              X     4000000

von Gustl B. (-gb-)


Lesenswert?

Vielen Dank! Die 921600 reichen mir aber. Ich übertrage darüber 9byte 
Packete mit Wert und Zeitstempel von radioaktiven Zerfällen. Ich schaffe 
also grob 10k Zerfälle/s mehr macht der Detektor sowieso nicht mit. Ich 
schreibe das derzeit in eine Datei mit Cutecom und baue später Spektren 
daraus. Wenn alles fertig ist soll ein Programm alles machen, also über 
Netzwerk den Messrechner finden, da die angeschlossenen Detektoren und 
dann schön remote Spektren bauen und so. Aber das Programm werde nicht 
ich schreiben, ich kann kein GUI ;-)

von Duke Scarring (Gast)


Lesenswert?

Gustl Buheitel schrieb:
> Ich übertrage darüber 9byte
> Packete mit Wert und Zeitstempel von radioaktiven Zerfällen. Ich schaffe
> also grob 10k Zerfälle/s mehr macht der Detektor sowieso nicht mit.
Ist das ein privates Projekt oder verdienst Du Dein Geld damit?

Duke

von Gustl B. (-gb-)


Lesenswert?

Privat, also naja mein Vater hat ein Labor und verwendet noch ziemlich 
alte Hardware die da die Spektren erstellt, und die geht jetzt so nach 
und nach kaputt (Speicherfehler) und die gibt es auch nicht zum 
Nachkaufen, also wenn man noch zusätzlich welche will. Ausserdem macht 
die alte Hardware nur Spektren und speichert keine Einzelimpulse mit 
genauer Zeit. Letzteres ist ziemlich interessant weil man dadurch die 
Messungen verbessern kann. Hat was mit Zerfallsreihen zu tun.
Es steckt aber noch in den Kinderschuhen, ich kann bisher den Handshake 
mit einem alten ADC machen und dann dem Wert eine sehr genaue Zeit 
dazugeben und das an den PC schicken, dort aufnehmen und dann daraus 
Spektren errechnen. Noch geht da viel händisch auf der Komandozeile aber 
das wird hoffentlich noch schön.

Geld verdienen mit Entwicklung auf FPGAs würde mir schon Spaß machen, 
aber dazu müsste ich das mal ordentlich lernen, ich bin Student für 
Lehramt.

von Duke Scarring (Gast)


Lesenswert?

Gustl Buheitel schrieb:
> Es steckt aber noch in den Kinderschuhen, ich kann bisher den Handshake
> mit einem alten ADC machen und dann dem Wert eine sehr genaue Zeit
> dazugeben und das an den PC schicken, dort aufnehmen und dann daraus
> Spektren errechnen.
Danke für Deine Antwort. Du kannst ja mal ein schönes Spektrum zeigen, 
wenn Du magst. Wie Du allerdings mit einer Zeitmessung bei zufälligen 
Prozessen noch was verbessern möchtest, verstehe ich nicht. Es sei denn 
Du hast eine pulsierende Strahlenquelle.

Duke

von Uwe (Gast)


Lesenswert?

Also ich hab mit nem FTDI2232 und nem ST202 1MBit geschaft.

von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Doch die Zeitmessung bringt schon was, Da zerfällt etwas spontan in ein 
kurzlebiges Isotop das dann nach sehr kurzer Zeit wieder weiterzerfällt. 
Wenn man jetzt die Werte mit den Zeiten hat kann man da Zeitfenster 
setzen und solche Zerfälle erkennen und rausfiltern oder aus diesen 
extra Spektren bauen.

Ich habe auch mal ein Spektrum angehängt, keine Ahnung was das für eine 
Messung war, ich mache zwar Lehramt Realschule Physik/Mathe, aber habe 
mit den Messungen hier nicht viel am Hut ausser, dass ich das technisch 
neuer und einfacher machen möchte.

von Gustl B. (-gb-)


Lesenswert?

Es gibt auch noch etwas Anders zu dem Zeiten gut sind: Koinzidenz

Man hat zwei Detektoren, der eine misst die Probe direkt und der andere 
umgibt die Probe und misst alles was von aussen kommt.

Dann gibt es auch Hardwaregeräte die dann beide Signale angucken und nur 
Impulse ins Spektrum zählen wenn der Impuls uch nur aus der Probe kam, 
aber wenn man die Zeitwerte hat, kann man auch mit beiden Detektoren je 
ein Spektrum aufnehmen und das dann nachträglich rausrechnen. Man muss 
halt die Messungen Zeitgleich starten/die Uhren synchron laufen lassen 
und kann dann wieder Zeitfenster setzen.

Im FPGA habe ich derzeit vier Anschlüsse für Detektoren oder besser 
ADCs, und man kann auch auswählen, dass zwei oder mehrere mit der exakt 
gleichen Zeit laufen.

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Gustl Buheitel schrieb:
> Doch die Zeitmessung bringt schon was, Da zerfällt etwas spontan in ein
> kurzlebiges Isotop das dann nach sehr kurzer Zeit wieder weiterzerfällt.
> Wenn man jetzt die Werte mit den Zeiten hat kann man da Zeitfenster
> setzen und solche Zerfälle erkennen und rausfiltern oder aus diesen
> extra Spektren bauen.
Dann muß man aber auch so schnelle Detektoren haben.

> Ich habe auch mal ein Spektrum angehängt, keine Ahnung was das für eine
> Messung war,
Sieht aus wie Radon. Und verwendet wurde offenbar ein Detektor, der 
schöne scharfe Peaks macht.

Gustl Buheitel schrieb:
> Es gibt auch noch etwas Anders zu dem Zeiten gut sind: Koinzidenz
Das ist richtig. Kann man aber erst machen, wenn man mehrere Detektoren 
hat. Die meisten Leute (z.B. ich) haben ja nicht mal einen :-)

> Im FPGA habe ich derzeit vier Anschlüsse für Detektoren oder besser
> ADCs,
Sampelst Du direkt oder hängt da noch ein Vorverstärker mit Peak-Hold 
dazwischen?

Duke

von Trundle T. (shaheed)


Lesenswert?

Was ist denn das für ein Detektor? Energie dispersiver Detektor, 
Wellenlängen dispersiver oder ein anderer?

und noch ne Frage Einheiten und Skalierung auf der x-Achse -> eV, keV 
oder was anderes?

ich schätze mal y-Achse cps oder kcps als Einheit oder?

von Gustl B. (-gb-)


Lesenswert?

Ja der ist schnell, also ist ein Germaniumdetektor der liefert 
Spannungsimpulse und die entsprechen der Energie. Ich sample da gar 
nicht, ich hole mir den fertigen Wert von einem alten ADC der in so 
einem NIM Einschub steckt. Ja davor ist noch ein Verstärker, der macht 
aus den kurzen Spannungsspitzen lange (ca. 2us) schöne Gauss Spitzen die 
dann an den ADC gehen.

Ich habe hier in einem anderen Thread auch ein VGA FPGA Oszi gebaut, 
also ich habe einen 100MHz 8Bit ADC und den habe ich auch mal auf diese 
langen Impulse losgelassen. Dann habe ich auch daraus ein Spektrum 
gebaut und man konnte zumindest erkennen was es seien sollte. Die Peaks 
waren etwas breiter und nicht so schön aber mit einem besseren ADC 
könnte man das auch selber machen ohne das alte ADC Gerät.

Die Einheiten sind die Energie auf der X Achse und die Anzahl auf der Y 
Achse. Ich kann aber nicht sagen wie lange diese Messung lief, aber das 
können durchaus mehrere Tage sein.

von Trundle T. (shaheed)


Lesenswert?

wow Germanium is ja mal ein richtig antikes Stück.
Also wenn dein Vater nen modernes SDD-Detektor-System kaufen möchte... 
pm an mich, mach ich Sonderpreis ;)

ps. der Verstärker macht aus den Spannungsspitzen keine Gaußglocke, das 
ist eine Eigenschaft von energiedispersiven Detektoren.
Wenn man das nicht will muss man wellenlängendispersive Detektoren 
benutzen, Zählrohre + nen Haufen Mechanik + Prisma, aber die sind 
wesentlich langsamer.

von Gustl B. (-gb-)


Lesenswert?

Ja ne, die Germanium Detektoren sind eigentlich ziemlich gut und 
brauchbar. Für die Alpha haben wir Photomultiplier.

Der Verstärker ist so ein Puls shaping Teil der an den Vorverstärker 
angeschlossen ist und am Ende einen Gauss rausgibt der deutlich länger 
ist wie das Eingangssignal.

Was sind denn SDD Detektoren? Oder was können die besser? Höhere 
Energieauflösung?

von Trundle T. (shaheed)


Lesenswert?

SDD-Detektoren haben ein wesentlich besser Verhältnis von 
Energieauflösung/Zählrate als Germanium-Detektoren.
Das kommt von Material = Silizium, vom Aufbau des Kondensator an den 
Polen des Halbleiters und durch den auf dem Detektor integrierten ersten 
MOSFET-Transitor, der die erste Verstärkerstufe darstellt.
Und soweit ich mich errinnere haben Germanium-Detektoren mehr und 
"nervigere"
Escapepeaks als Silizium-Detektoren, die dein Ausgangsspektrum 
verzerren.

Kurz zur Erklärung woher die Gausskurve kommt:

Wenn ein Röntgenquant auf den Detektor trifft, erzeugt es entsprechend 
seiner Energie so und soviele Elektronen-Loch-Paare, welche dann auf 
ihrem Weg zu den Polen des Halbleiters weitere Landungsträger 
freisetzten (ne Art Minikettenreaktion), wie viele Ladungsträger am Ende 
an den Polen des Detektors (durch die Geometrie) vorhanden Kondensator 
aufladen, ist statisch normalverteilt (Gaussglocke) und skaliert mit 
einem Detektormaterial - abhängigen Faktor.

Der Vorverstärker ist eigentlich da um die beiden Formen von Rauschen 
die bei den geringen Spannungshüben am Kondensator beträchtlichen Anteil 
haben, herauszufiltern und den Kondensator wieder zureseten (und 
natürlich das Signal nochmals zu verstärken).

Darf ich fragen von welcher Firma der Detektor+Verstärker ist?

von Gustl B. (-gb-)


Lesenswert?

Beide sind von Ortec/Canberra. Aber wir sind eigentlich ziemlich 
zufrieden damit, also die Auflösung ist schon ziemlich gut.

von high tec ing (Gast)


Lesenswert?

Trundle Trollkönig schrieb:
> Wenn ein Röntgenquant auf den Detektor trifft, erzeugt es entsprechend
> seiner Energie so und soviele Elektronen-Loch-Paare, welche dann auf
> ihrem Weg zu den Polen des Halbleiters weitere Landungsträger
> freisetzten (ne Art Minikettenreaktion),

Woher kommen die ihre Energie? Ein Elektron-Loch-Paar hat doch eine 
festgelegte Energiemenge in Elektronvolt, gemäss Banddiagramm. Will es 
ein weiteres generieren muss es seine Energie abgegeben, meine ich. 
Damit rekombiniert es weg und die Summe bleibt gleich. (?)

von Trundle T. (shaheed)


Lesenswert?

Das Röntgenquant hat mehr Energie als es für die reine Erstellung eines 
Elektronen-Loch-Paars bräuchte, so das dann die entstehenden 
Ladungsträger wiederrum genug Energie haben um weitere Ladungsträger 
freizusetzten.

Ich glaub man brauchte ca. 3.81 eV (minimum) um ein Elektronen-Loch-Paar 
zu erstellen was weitere Elektronen-Loch-Paare erstellen kann. Die reine 
Bindungsenergie ist dabei irgendwie 1.1eV ( alle Angaben für Silizium)

: Bearbeitet durch User
von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

Die Ladungsträger haben die übermäßige Energie? Wie geht das, wenn die 
Energie doch dem entspricht, was eingespeist wurde? Ich dachte, dass das 
Röntgenphoton einen Teil der Energie abgibt und dann weitere generiert?

Oder steckt die Energie im Impuls?

von Felix O. (felixanius)


Lesenswert?

Gustl Buheitel schrieb:
> Hallo, also du kannst RS232 verwenden inklusive der Pegelwandler, oder
> ohne Pegelwandler.
>
> Mit Pegelwandler kannst du das danach einfach an die RS232 COM-Port
> Buchse vom PC anschließen, aber die ganz hohen Datenraten kannst du wohl
> vergessen, die allermeisten COM-Ports machen "nur" 115,2kBit/s.
>
> Ohne Pegelwandler Brauchst du irgendeinen Baustein, der das serielle
> UART TTL/CMOS Signal empfängt und auf eine andere Schnittstelle
> übersetzt. Z.B. den CP2102. Sehr günstige Adapter gibt es bei eBay.
>
> Der Adapter hat auf der einen Seite USB und auf der anderen eine
> serielle Schnittstelle bei der du aber nur RX, TX und GND benutzen
> musst. Wenn du am PS nur empfangen willst, sogar nur RX und GND. Die
> Pins kannst du direkt mit dem FPGA verbinden ohne Zusatzelektronik
> dazwischen.
>
> Am PC gibt es dann verschiedene Software wie Realterm (Windows) oder
> Cutecom (Linux) mit der du die ankommenden Daten sogar aufnehmen kannst
> in eine Datei. Beide Programme können auch höhere Datenraten wie
> 921,6kBit/s.
>
> Im FPGA brauchst du also nur einen UART zu beschreiben, ein
> Schieberegister. Und schon kannst du ziemlich einfach Daten an den PC
> schicken.
>
> -gb-

Hi nochmal,

also ich möchte vom PC aus nur senden, habe also in meinem VHDL Code 
fürs FPGA ein UAR (soll nur receiven, nicht transmitten) eingebaut. Ich 
muss wohl ein USB-RS-232 Adapter benutzen müssen, da mein PC keinen 
passenden Anschluss hat (warum auch immer). Das Senden vom PC aus möchte 
ich mit einer selbst geschriebenen Java Software durchführen.
Wenn ich das richtig verstanden habe benutzt der PC +12/-12V Signale für 
1 und 0, aber mein FPGA arbeitet mit 5V max, also muss hier ein 
Pegelwandler eingesetzt werden.

Muss ich den Pegelwandler kaufen, oder ist der schon irgendwo mit 
eingebaut? Wie gesgat ich nutze ein Spartan-3E Starter Kit und möchte 
ein USB-RS-232-Adapter benutzen. Ist der Pegelwandler einfach ein 
Bauteil, dass ich zwischen RS-232 Kabel und Buchse am FPGA setze?

Danke

von Gustl B. (-gb-)


Lesenswert?

Das kommt auf deinen USB Adapter an. Verwendest du einen mit 
Pegelwandler, brauchst du auch am FPGA wieder einen solchen um den Pegel 
zurückzuwandeln. Du kannst aber auch einen USB Adapter verwenden der 
direkt TTL/CMOS macht und sparst dir Pegelwandler.

Ich verwende solche sehr günstige mit cp2102 drauf, den kannst du direkt 
an einen Pin deines FPGA hängen. Da du nur senden willst musst du nir 
Masse und TX verbinden.

Bei eBay einfach mal nach CP2102 suchen, die kosten dur wenige €/Stück 
und lassen sich schön einfach verlöten wenn man das will, oft sind aber 
auch Jumpercabels dabei.

Wenn dein FPGA Board aber schon eine serielle Schnittstelle anbietet, 
mit Pegelwandler, dann kannst du auch diesen nutzen und einen USB 
Adapter mit Pegelwandler kaufen.

Hängt jetzt davon ab ob du das an einen FPGA Pin irgendwie direkt hängen 
willst oder über eine Sub-D 9 Buchse machen willst.

Zum Testen empfehle ich Terminalprogramme wie Realterm oder Cutecom.

Edit:

Das Xilinx Spartan-3E Starter Kit hat RS232 Buchsen mit Pegelwandlern, 
du kannst also einen USB Adapter mit Pegelwandler verwenden. Eigentlich 
alle USB Adapter auf SUB-D 9 haben einen Pegelwandler eingebaut.

: Bearbeitet durch User
von Felix O. (felixanius)


Lesenswert?

Danke sehr!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.