- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: Wandlung hex -> ASCII um über UART zu senden

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Beiträge
    11

    Wandlung hex -> ASCII um über UART zu senden

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich will Daten über den UART mit Mega8 an den PC senden. Das senden und empfangen klappt wunderbar. Allerdings werden die Daten ja im hex-Format gesendet und im ASCII-Format angezeigt.
    Wenn ich z.B. einen Wert der nur eine Stelle enthält (z.B. den Inhalt einer Variablen, z.B. variable= dann kann ich dem Wert ja einen Offset (+4 geben damit er richtig angezeigt wird.
    Ein String zu senden ist ja auch kein Problem da dies ja direkt in ASCII umgewandelt und jedes Zeichen einzeln gesendet wird.

    Wenn ich aber jetzt einen Wert einer Variablen senden will, z.B. variable=512, wie mache ich das?!?!?!
    Die Variable besteht ja aus 2 Byte. Ein ASCII-Zeichen ja aus 1 Byte. Wie kann die 2 Byte also sozusagen auftrennen und einzeln senden, und so dass der Wert dann eben auch stimmt...

    Vielleicht hatte jemand von Euch ja schon mal dasselbe Problem...
    Danke.

  2. #2
    Mal ein Vorschlag. Es gibt viele Möglichkeiten das zu machen.


    #include <stdlib.h>


    .....

    char *myString[7];

    myString = itoa(variable, myString, 10);

    dann solltest Du die Zahl als String in der Variable myString haben.
    Die kannst Du dann ueber die serielle Schnittstelle senden.

    itoa(interger Variable, string zum speichern, radix ( 2 = Binär, 16 = hex etc. )

    Gruss
    Frank

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Beiträge
    11
    Danke für die schnelle Antwort!

    Habe es ausprobiert, aber leider kommt beim compilieren die Fehlermeldung "Incompatible types in assignment"...
    Habe es genau so gemacht wie Du es gepostet hast.

    Die include-Datei habe ich ebenso eingebunden.

    Also meine Variable hat z.B. den Wert 512 und die ist auch als integer deklariert.

    Hmm... was mache ich da falsch?!?!

  4. #4
    Sorry, da habe ich wohl etwas vorschnell geschrieben.
    Also -. ich habe eben folgendes probiert - un ddas ging



    char myCharBuffer[20];
    char *myCharPtr;
    myCharPtr = myCharBuffer;
    myCharPtr = itoa(min,myCharPtr,10);

    Gruss
    Frank

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Du kannst die beiden bytes auch einzeln schicken.
    Code:
    short s;   //bit 0-15
    unsigned char low;  // bit 0-7
    unsigned char high; // bit 8-15
    
    // auseinanderbauen:
    low = (unsigned char) (s & 0x00ff);
    high = (unsigned char) (((s>>8) & 0x00ff);
    
    //zusammen setzen
    s = ((short) high << 8) | low;
    Den Overhead das in ein String zu konvertieren brauchst du nicht, das geht am PC einfacher mit itoa oder sprintf.

    Oder ganz ohne Überflüssigen Code mit einem Komposit:
    Code:
    typedef union
    {
       unsigned short s;
       struct
    	{ 
    		unsigned char low;
    		unsigned char high;
    	};
    } __attribute__((packed)) data_t;
    
    data_t data;
    
    // Zugriff über data.s, data.high und data.low

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    826
    Ja. Das Problem bei deinem ersten Code beispiel war glaub ich einfach das *. Das war zuviel.
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  7. #7
    Zitat Zitat von Andun
    Ja. Das Problem bei deinem ersten Code beispiel war glaub ich einfach das *. Das war zuviel.
    So kommts wenn man schnell was schicken will.
    Statt Pointer ein Pointer auf Pointer.
    Nun gut - nächstes mal passe ich besser auf !

    Gruss
    Frank

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Beiträge
    11
    Dank an Frank und den aderen!!!

    Hat jetzt hingehauen

    Vielen Dank!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Wenn doch nur alles so einfach wäre...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress