uint16_t in Hex umrechnen

#6991411
Lesenswert?
• ▲
▼
Falls es um die String Ausgabe von Hex mit einem AVR ueber die serielle 
geht:

const unsigned char HEX[] PROGMEM = {"0123456789ABCDEF"};

void Printc(char c) {
   while(!(UCSR0A & (1 << UDRE0)));
   UDR0 = c;
}
.....
  unsigned char bl = pgm_read_byte(&HEX[val & 0x0F]);
  unsigned char bh = pgm_read_byte(&HEX[val >> 4]);
  Printc( bh );
  Printc( bl );
Beitrag #6991460 wurde von einem Moderator gelöscht.
OP (Firma: Hochschule Karlsruhe - Technik) #6991469
Lesenswert?
• ▲
▼
Oliver S. schrieb:
> Was meinst du mit "umrechnen"? Als Zahlenwert gibt es da nichts
> umzurechnen, einen Hex-String erzeugt dir (s)printf mit %x.
>
> Oliver


Die Situation :

Ich habe einen Sensorwert (uint16_t). Ich will den Wert in einem Message
Buffer von einem CAN-Modul schreiben, damit ich den Wert über CAN Bus
übertragen kann. Diese generierte Sensordaten müssen in Hexadezimal
umgewandelt werden, damit sie in den Message Buffer eingebunden werden
können.

Gruß, Nader
Gast #6991473
Lesenswert?
• ▲
▼
Nader A. schrieb im Beitrag #6991460:
> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
> damit sie in den Message Buffer eingebunden werden können.

Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer 
geschrieben werden.

Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht, 
Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)
OP (Firma: Hochschule Karlsruhe - Technik) #6991481
Lesenswert?
• ▲
▼
A. S. schrieb:
> Nader A. schrieb im Beitrag #6991460:
>> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
>> damit sie in den Message Buffer eingebunden werden können.
>
> Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer
> geschrieben werden.
>
> Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht,
> Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)

Insgesamt habe ich 4 Sensoren. In einer CAN-Nachricht kann man 8 Bytes 
Nutzdaten übertragen. Jeder Sensorwert hat zwei Bytes. Immer zwei Bytes 
für jeden Sensorwert werden in den Message Buffer geschrieben.
Gast #6991491
Lesenswert?
• ▲
▼
Nader A. schrieb:
> A. S. schrieb:
>
>> Nader A. schrieb im Beitrag #6991460:
>>> Diese generierte Sensordaten müssen in Hexadezimal umgewandelt werden,
>>> damit sie in den Message Buffer eingebunden werden können.
>>
>> Wenn der Wert 0 ist, welche Bytes (und wie viele) sollen in den Puffer
>> geschrieben werden.
>> Wenn Du dir darüber klar bist, das gleiche für den Wert 30. Falls nicht,
>> Code oder Doku des CAN-Moduls (nicht HW sondern deren SW)
>
> Insgesamt habe ich 4 Sensoren. In einer CAN-Nachricht kann man 8 Bytes
> Nutzdaten übertragen. Jeder Sensorwert hat zwei Bytes. Immer zwei Bytes
> für jeden Sensorwert werden in den Message Buffer geschrieben.

Du bekommst 2 Byte und sendest 2 Byte ... Das einfachste wäre, das 
gleiche Datenformat zu nehmen. Dann kannst Du die Bytes kopieren.

Wenn das nicht geht, musst Du uns sagen, wie die Datenformate sind. Hex 
hat dabei viele oder keine Bedeutung.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.