www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2x8Bit -> 2x4Bit ->1x8Bit


Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte zwei Bytes in zwei 4Bitwerte umwandeln und dann in einem
Byte speichern. Hat jemand einen Vorschlag wie ich das am einfachsten
in C bewerkstelligen kann.

Um die 8Bit in 4Bit zu verwandeln kann ich sie ja einfach durch 2
teilen. Nur wie bekomme ich die beiden dann wieder zusammen in ein
Byte?

Jetzt schonmal Danke für eure Hilfe!

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn du 255 (0b1111 1111) durch 2 teilst (div) erhälst du doch 128
(0b0111 1111), was mehr als 4bit Daten enthält. Das Zusammenfügen geht
mit & und | mit entsprechenden Shifts (>> und <<).

Marcus

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marcus:
Ein Teilen von 255 durch 2 ist das Gleiche wie ein einzelnes
Rechtsshift. Dabei kommt 127 heraus...

@Sascha:
Wie sollen die Zahlen denn aussehen?
Um das obere Nibble (höherwertige 4 Bits) zu erhalten, shiftet man
viermal nach rechts (x>>4). Fertig.
Um das untere Nibble zu erhalten verundet man mit 0x0F. (x & 0x0F)
Fertig.

Was möchstest du denn genau machen?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char byte1,byte2,byte3
byte3=(byte1&0x0f)<<4 | (byte2&0x0f);
die low-nibbles von beiden bytes werden damit low bzw high-nibble von
byte3

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nochmal etwas genauer,
ich möchte 2 8Bit Werte aus dem ADC lesen und diese dann per Infrarot
übertragen, ich brauche aber keine 8Bit Auflösung bei den Werten.
Um die Packete für die IR-Übertragung möglichst klein zu halten möchte
ich deshalb die 2 Werte beim senden in einen zusammenfassen und beim
Empfänger die Werte wieder auseinanderdröseln.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für 2x 8 Bit Werte vom ADC? Zwei unterschiedliche, von zwei
verschiedenen Messungen, oder ein High und ein Low Byte von einer
Messung?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe das jetzt mal so, dass Du von zwei Messungen je einen
ADC-Wert in 8 Bit hast, wobei Dir 4 Bit Auflösung für die Übertragung
genügen. D.h. Du willst die High-Nibbles der zwei Bytes in einem
einzigen Byte speichern und verschicken, um sie am anderen Ende wieder
in zwei einzelne Bytes zu zerlegen.

Also auf Senderseite z.B.:

unsigned char ADWert1, ADWert2, SendeByte;
//...irgendwas...
SendeByte = (ADWert1 & 0xF0) | (ADWert2 >> 4);

Auf Empfängerseite:

unsigned char ADWert1, ADWert2, EmpfangByte;
//...irgendwas...
ADWert1 = EmpfangByte & 0xF0;
ADWert2 = EmpfangByte << 4;

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2 Messungen mit je 8 Bit....

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann müsste johnnys Lösung funktionieren. Beachte aber, dass du bei
dieser Variante nur noch 4-Bit Auflösung hast (Sprich: 16
"Spannungsstufen")

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dass du bei dieser Variante nur noch 4-Bit Auflösung hast
Naja, er sagt doch, das reicht ihm, gell?

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank vorerst mal an alle, ich glaube ich teste das mal mit dem
ansatz von johnny.m.
Ich muß eh erstmal testen ob die 4Bit Auflösung wirklich ausreichend
sind oder ob ich mich da verkalkuliert hab.

THX Sascha

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke inoffz...,

man hätte das binäre, das ja stimmt auch mal gegenrechnen können.

Marcus

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.