mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hex in Array einlesen und als Charakter erkennen.


Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich habe jetzt folgendes heikles Problem:

Ich möchte über eine Software einen Hex Wert einlesen, beispielsweise 
den Wert F, welcher eben als Hexadezimalwert fungiert, also 1111bin.

Dieser Wert soll über eine getCharakter Funktion eingelesen werden, und 
in ein Feld des Arrays gespeichert werden (z.B. array [0] = getchar(); )

Nun speichere ich aber nur 4 Bit in das Feld...
Erste Frage, wie wird das Feld ausgefüllt? Mit 00001111? Was mir eben am 
logischsten erscheinen würde, da ich die höherwertigeren Bits ja in dem 
Sinne nicht beschreibe.

Und im Endeffekt habe ich eben das Problem, dass ein Hex Wert "F" im µC 
als Charakterwert F erkennt werden soll, obwohl der eigentliche 
Dezimalwert nicht übereinstimmt...

Jemand eine Idee?

Liebe Grüße

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Notation von Zahlen (sog. Literale) gibt es in C Konventionen 
(sowie das nicht-standard-gemässe 0bxxxxxx in gcc). Wenn Du Deine Frage 
unter Verwendung dieser Notationen neu formulierst, gibst Du Dir selbst 
schon die Antwort.

Autor: Marcus Overhagen (marcus6100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies mal ein Buch über C Programmierung.

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrrr schrieb:
> Wenn Du Deine Frage
> unter Verwendung dieser Notationen neu formulierst, gibst Du Dir selbst
> schon die Antwort.

Könntest du mir mal nen ordentlichen Google Link geben? Vllt hast ja 
einen im Gedächtnis.... Wäre dir dafür sehr dankbar, möcht hier auch 
nicht nur herumfragen, sondern mich selber darin einlesen :-)

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Overhagen schrieb:
> Lies mal ein Buch über C Programmierung.

Leicht zu sagen ;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Fragestellung ist sehr verworren.
Deine eigentliche Aufgabenstellung geht da nicht wirklich daraus hervor.

Aber ich vermute einfach mal, dass du im Grunde einfach nur eine 
Codiertabelle suchst. Du gehst mit dem Binärwert in die Tabelle und 
erhältst als Ergebnis den Character, der dem Index (der Zahl) 
enstpricht.

Wozu du da das von dir angedachte Feld benötigst ist nicht wirklich klar

char Codes[] = { '0', '1', '2', '3', '4', '5', '6', '7',
                 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };


 unsigned char Wert;
 char          Character;

 Wert = PINB;   // zb vom Port B einlesen
 Character = Codes[ Wert & 0x0F ];


das wäre zb eine Möglichkeit. Es gibt auch noch andere ...
... wenn, ja wenn ich deine Frage richtig erraten habe.

Und ja, du solltest tatsächlich ein Buch lesen.

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Und ja, du solltest tatsächlich ein Buch lesen.

Habe ich schon gemacht, jedoch war das in einer Ecke gelegene Buch etwas 
verstaubt und ein großteil von den Seiten war schon von Buchwürmern 
zerfressen.
Werde mir in den nächsten Tagen ein neues kaufen, frisch gedruckt, und 
wohlriechend nach Druckerschwärze...

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Deine Fragestellung ist sehr verworren.
> Deine eigentliche Aufgabenstellung geht da nicht wirklich daraus hervor.
>
> Aber ich vermute einfach mal, dass du im Grunde einfach nur eine
> Codiertabelle suchst. Du gehst mit dem Binärwert in die Tabelle und
> erhältst als Ergebnis den Character, der dem Index (der Zahl)
> enstpricht.
>
> Wozu du da das von dir angedachte Feld benötigst ist nicht wirklich klar
>
> char Codes[] = { '0', '1', '2', '3', '4', '5', '6', '7',
>                  '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
>
>
>  unsigned char Wert;
>  char          Character;
>
>  Wert = PINB;   // zb vom Port B einlesen
>  Character = Codes[ Wert & 0x0F ];
>
>
> das wäre zb eine Möglichkeit. Es gibt auch noch andere ...
> ... wenn, ja wenn ich deine Frage richtig erraten habe.
>
> Und ja, du solltest tatsächlich ein Buch lesen.

Edit:

Versuche mich jetzt nochmal auszudrücken:

Ich lese über dir RS232 einen Hexwert ein, und speichere diesen Wert in 
ein Feld. Gut.
Jetzt möchte ich aber den Hexwert "F" eben so erkennen, damit er dem 
Charakter "F" entspricht, also 46hex.
Das Gleiche soll bei einem A passieren.
In das Feld wird der Wert 1010bin geschrieben, jedoch soll dieser Wert 
als Character A erkennt werden, eben 41hex.

Ich hoffe, ich konnte mich verständlicher ausdrücken, ansonsten bin ich 
für Beleidigungen gerne offen ;-P

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich lese über dir RS232 einen Hexwert ein

Nein, einen Binärwert (z.B. 0100 1011). Um eine Hex-Darstellung zu
erreichen, mußt Du jedes Nibble in die entsprechende Hexadezimalzahl
umwandeln. Beim High-Nibble genügt es 30h zu addieren, um die Zahl 4 zu
erhalten (ASCII-Code 34h). Und beim Low-Nibble...
Aber das kannst Du Dir jetzt selber ausdenken.

Autor: Johnny Knot (johnny_knoxville) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du möchtest scheinbar aus dem Nichts erahnen was ich einlese?
Ich weiß, dass es Hexadezimalzahl ist

Okay, wenn ich über den Interrupt immer 8 Bit einlese, sprich einen 
Character sieht die Sache natürlich anders aus... Ich habe eher gedacht, 
dass der µC nachdem er die vier Bit bekommt, auf keine weiteren mehr 
wartet, weil diese nicht in einem Frame gesendet werden.
Werde mir deine Vorschläge mal zu Gemüte ziehen, danke.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die meisten UARTs lassen sich auf 5..9 Bits einstellen, 4 Bit geht also 
nicht.

5Bit hat man früher mal für Fernschreiber verwendet (Ratterkisten, die 
Lochstreifen ausspuckten).

Bei RS232 sind 8Bit das gängige Format und bei RS485 9Bit (zur 
Adressierung).


Peter

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du möchtest scheinbar aus dem Nichts erahnen was ich einlese?
>Ich weiß, dass es Hexadezimalzahl ist

Der war gut!
Da mußte ich heute früh schon einmal herzhaft lachen.
Es scheint, daß Du nicht nur ein Buch über C lesen mußt.

Noch ein Hinweis: Umwandlungszeichen für printf ansehen, z.B. " %X ".

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot (johnny_knoxville) schrieb:
> Du möchtest scheinbar aus dem Nichts erahnen was ich einlese?

Nein, wir raten nur und benutzen gedanklich die gängisten Varianten.
Von dir kommt ja keine brauchbare Information.

Autor: Johnny Knot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, vielleicht bin ich nicht ein perfekter Mikrocontroller Moderator, 
aber ums nochmal kurz zu halten. Daten kommen daher, Daten sind (wie ich 
jetzt weiß) zwei Hexwerte, also 8 Bit. Diese Acht Bit (zb FFhex)gehören 
gesplittet und somit einzeln als zwei Character erkannt: eben die 
Character F und F. Ich hoffe, den hohen Anforderungen dieses Forums 
gerecht zu werden, ansonsten gibt es auch noch andere Foren wie 
Planet-Liebe, worin ich euch vllt auch so anschnautzen könnte ;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot schrieb:
> Tja, vielleicht bin ich nicht ein perfekter Mikrocontroller Moderator,
> aber ums nochmal kurz zu halten. Daten kommen daher, Daten sind (wie ich
> jetzt weiß) zwei Hexwerte, also 8 Bit. Diese Acht Bit (zb FFhex)gehören
> gesplittet und somit einzeln als zwei Character erkannt: eben die
> Character F und F. Ich hoffe, den hohen Anforderungen dieses Forums
> gerecht zu werden, ansonsten gibt es auch noch andere Foren wie
> Planet-Liebe, worin ich euch vllt auch so anschnautzen könnte ;-)

Dann tu das doch bitte.
Von nichts eine Ahnung, noch nicht mal sein Problem vernünftig 
beschreiben können (mit jedem Posting verändert sich die 
Aufgabenstellung) und dann auch noch eine große Lippe riskieren. Das 
geht vielleicht bei DSDS aber nicht hier.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Got sei Dank, endlich einmal klare Worte an diesen selbsternannten
"Software-Guru".

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]
  • [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.