Hallo,
jetzt möchte ich fragen und zwar , wie man Bits aus ADC mit
STD_LOGIC_VECTOR zu real bzw. integer umwandeln könnte.
ich hab einen code geschrieben aber kriegt immer fehlermeldung
<<Line 75. * can not have such operands in this context.
ERROR:HDLParsers:164 -
Line 77. parse error, unexpected INTEGER_LITERAL, expecting OPENPAR or
IDENTIFIER>>
danach müssen die Messwerte in 8 databits über rs232 übertragen werden.
was ist die beste Möglichkeit ? bit zu Ascii zu konvertieren
ich hab mir überlegt, erst HEXdez und dann Ascii bin aber nicht sicher
Coole Sache.
Erste mal 0.5, danach durch 524288.
Hätte man nicht gleich durch 10485476 teilen können.
Oder besser noch die letzen 20 Bits weglassen. Wäre wohl zu trivial
gewesen.
Aber so sieht das schon gut aus. Man lernt nie aus.
----------------------------------------
was ist die beste Möglichkeit ? bit zu Ascii zu konvertieren
---------------------------------------
Wenn die Daten zum PC gehen sende ich mit meinem DE-1-Board immer die
Daten als reine Byte mit 38400 Baud zb und löse die dann am PC auf,
entweder als Text oder auch nur als Binärdaten.
GRuss
A. ZANAM schrieb:> was ist die beste Möglichkeit ? bit zu Ascii zu konvertieren> ich hab mir überlegt, erst HEXdez und dann Ascii bin aber nicht sicher
Überleg nochmal...
Du musst den Wert erst mal nach BCD wandeln, und dann aus einer Tabelle
einfach den passenden ASCII Wert lesen und den dann über die serielle
Schnitte ausgeben. Dazu noch ein CR/LF und der Tag ist gerettet...
http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung> * can not have such operands in this context.
JEDE VHDL Beschreibung beginnt VOR dem Schlüsselwort entity. Was steht
da bei dir?
> result_1 <= REAL(0.5 * calc_1)/ADC_2_div;
Mal vom bereits erwähnten real abgesehen: eine Division in Hardware ist
einiges aufwendiger als das, was da steht...
http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html
Lothar Miller schrieb:> A. ZANAM schrieb:>> was ist die beste Möglichkeit ? bit zu Ascii zu konvertieren>> ich hab mir überlegt, erst HEXdez und dann Ascii bin aber nicht sicher> Überleg nochmal...> Du musst den Wert erst mal nach BCD wandeln, und dann aus einer Tabelle> einfach den passenden ASCII Wert lesen und den dann über die serielle
Wozu Tabelle? Einfach bit 7-4 auf "0011" setzen.
Lothar Miller schrieb:>>> result_1 <= REAL(0.5 * calc_1)/ADC_2_div;> Mal vom bereits erwähnten real abgesehen: eine Division in Hardware ist> einiges aufwendiger als das, was da steht...> http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html>> * can not have such operands in this context.> JEDE VHDL Beschreibung beginnt VOR dem Schlüsselwort entity. Was steht> da bei dir?
du meinst wahrscheinlich die libs
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.all;
--use ieee.math_real.all;
> Überleg nochmal...> Du musst den Wert erst mal nach BCD wandeln, und dann aus einer Tabelle> einfach den passenden ASCII Wert lesen und den dann über die serielle> Schnitte ausgeben. Dazu noch ein CR/LF und der Tag ist gerettet...> http://www.lothar-miller.de/s9y/categories/44-BCD-Umwandlung
ich habs mir auch so gedacht aber wenn ich BCD verwerde dann kommen
andere werte -___-
A. ZANAM schrieb:> ich habs mir auch so gedacht aber wenn ich BCD verwerde dann kommen> andere werte -___-
Ok. Welche?
Lattice User schrieb:> Wozu Tabelle? Einfach bit 7-4 auf "0011" setzen.
Ähm, richtig. Es ist ja schon BCD. Ich hatte das mit der Umwandlung von
Binärzahlen nach Hex-ASCII verwechselt...
Lothar Miller schrieb:> Ok. Welche?>
siehe Anhang. der oben dargestellte Wert muss dem oben dargestellten
wert entsprechen Also ich wünsch mir dass ich den oben Wert krieg und
dann eine Rechnung durchführen
> Lattice User schrieb:>> Wozu Tabelle? Einfach bit 7-4 auf "0011" setzen.
was ist bit 7-4. du meinst 4 bits zu 8 bits wegen UART.
ich dank euch ^^
A. ZANAM schrieb:> was ist bit 7-4.
Ein jedes Byte hat 8 Bits. Die sind entsprechend ihrer binären
Wertigkeit durchnummeriert: 7,6,5,4,3,2,1,0
Das kommt von "zwei hoch Bitwertigkeit":
1
7 6 5 4 3 2 1 0
2
2 2 2 2 2 2 2 2
3
=
4
128 64 32 16 8 4 2 1
Welches sind jetzt also die Bits 7..4?
A. ZANAM schrieb:> siehe Anhang.
Du kannst einen 20 Bit Binärwert nicht in einem 20 Bit BCD Vektor
unterbringen. Ausserdem musst du dir den BCD-Vektor hinterher natürlich
als Hex-Wert anzeigen lassen. Das ist Anfängermathematik mit
Zahlensystemen...
Was zur?! Wieso denn überhaupt ASCII in VHDL? Wenn du statt der rohen
binären Daten das nach Hex und ASCII wandelst weil es hybscher aussieht,
dann sinkt bei gleicher Datenrate auf der Schnittstelle die
Informationsrate. Ja ist als Mensch besser zu lesen, können aber viele
Terminal Programme automatisch anzeigen wenn die binär empfangen, also
wie ein Hexeditor. Und man kann dieses ASCII nicht so leicht
weiterverarbeiten. Also wozu die Mühe?
Gustl Buheitel schrieb:> Wieso denn überhaupt ASCII in VHDL?
Das hat mit VHDL nichts zu tun. Bleibt also die Frage:
> Wieso denn überhaupt ASCII...?
Antwort: weil es mit JEDEM verfügbaren Terminal (mit)lesbar und
protokollierbar ist. Weil man die damit empfangenen Daten ganz einfach
in weiterverarbeitende Programme übernehmen kann. Weil es darin
Steuerzeichn für den Datenfluss gibt. Weil man dann eine '0' von einer 0
(Stringende in C) unterscheiden kann. Weil man dann ganz leicht
zusätzliche Prüfsummen anhängen kann. Weil, weil, weil...
Es gibt zig Gründe, die dafür sprechen, ein ASCII basiertes Protokoll zu
verwenden, aber nur 1 einzigen, der dagegen spricht: es müssen mehr
Zeichen übertragen werden. Und da gibt es idR. oft die Möglichkeit, mit
der Baudrate nach oben zu gehen.
Warum gibt es textbasierte Dateiformate wie Intel-Hex oder
Motorola-S-Records, wenn man das auch alles platzsparend in eine
Binärdatei packen könnte?
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.