Forum: Mikrocontroller und Digitale Elektronik FPGA->RS232 PC, wie Variablen und Werte auseinander halten


von Lukas (Gast)


Lesenswert?

Hallo

Bin leider noch ein ziemlicher Neuling in der FPGA Welt.

Nun habe ich aber erfolgreich einen Cylone2 dazu gebracht per SPI einen 
ADC auszulesen und per Serieller die Daten an den PC zu senden. freu

Als nächsten Schritt habe ich nun mehrere Variablen die ich übertragen 
möchte.

Jetzt rätsle ich nur in welchem "Format" ich Daten übertragen soll, 
sodass ich Sie am PC auch wieder richtig zuordnen kann.

Ich könnte zum Beispiel einen ganzen String übertragen wie 
"Variable_1=247 Variable_2=135"
Mir würde aber auch eine Kurzform genügen: "12C2" (12=Variablen ID 
C2=Wert)
Leider kann ich dann am PC nicht mehr feststellen ob 12 oder C2 die 
Variablen ID ist, falls ein Paket verloren geht.
Einen ganzen String zu übertragen ist (für mich) in VHDL auch nicht so 
einfach ;)

Könnte natürlich auch zuerst eine Anfrage vom PC schicken "bitte schick 
mir Variable 12, dass wäre aber auch wider unnötige Arbeit da der FPGA 
entscheiden soll was der PC wann bekommt. -.-

Eigentlich müsste für eine eindeutige Identifizierung der Variablen 
name/code immer länger sein als der größte Wert...

Wie löst Ihr dieses Problem, wie macht man so eine Übertragung am 
saubersten?

Hoffe ich hab mein Problem überhaupt verständlich formuliert ;)

Danke für alle Tipps
Schönen Abend
lg Lukas

von Lehrmann M. (ubimbo)


Lesenswert?

Ich würde dir einfach anraten das parity-Bit zu nutzen. Zusätzlich 
könnte man noch überlegen (wenns wirklich so genau sein muss ob man 
hashen könnte). Alternaiv alles gleich zweimal senden ...

von Falk B. (falk)


Lesenswert?

@  Lukas (Gast)

>Jetzt rätsle ich nur in welchem "Format" ich Daten übertragen soll,
>sodass ich Sie am PC auch wieder richtig zuordnen kann.

Nimm ASCII. Das ist einfach und zu Debugzwecken menschenlesbar.

>Mir würde aber auch eine Kurzform genügen: "12C2" (12=Variablen ID
>C2=Wert)
>Leider kann ich dann am PC nicht mehr feststellen ob 12 oder C2 die
>Variablen ID ist, falls ein Paket verloren geht.

Genau. Deshalb erstmal ASCII.

12C2<RET>

>Einen ganzen String zu übertragen ist (für mich) in VHDL auch nicht so
>einfach ;)

Wo ist das Problem? Für jede 8 Bit Variable müssen zwei Bytes erzeugt 
werden. Das kann man mit einer kleinen State Machine. Siehe 
Festkommaarithmetik. In VHDL ist das sogar einfacher, eine einfach 
Tabelle/Dekoder mit 16 Werteb wandelt von BCD in ASCII.

>Eigentlich müsste für eine eindeutige Identifizierung der Variablen
>name/code immer länger sein als der größte Wert...

Nö.

MG
Falk

von Knut _. (_knut_)


Lesenswert?

Hallo

Danke für Eure Antworten.


Ich glaub da muss ich dann wohl wirklich zu ASCII greifen -.-
Oder ich Bau mir gleich vernünftige Pakete, hmm...

Danke nochmals

lg Lukas

von peterguy (Gast)


Lesenswert?

Du solltest dir ein eigenes, kleines rotokoll definieren. Jeder 
Datenwert den du schickst kommt in ein Paket, daß entsprechend dem 
Protokoll aufgebaut ist

Darin enthalten sein sollte
- Länge (evtl. optional wenn über die ID bestimmbar)
- ID
- Daten

Beide Seiten (PC und FPGA) müssen natürlich wissen, welche ID zu welchen 
Daten gehört, sonst macht das ganze keinen Sinn.

von peterguy (Gast)


Lesenswert?

Nachtrag: "rotokoll" soll natürlich "Protokoll" heißen :-)

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.