- UNI-T-Messgeraete    Werbung      
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

    E-Bike Praxistest
    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= Bild   dann kann ich dem Wert ja einen Offset (+4 Bild   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
    Benutzer Stammmitglied
    Registriert seit
    21.10.2004
    Ort
    Mannheim
    Beiträge
    80
    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
    Benutzer Stammmitglied
    Registriert seit
    21.10.2004
    Ort
    Mannheim
    Beiträge
    80
    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
    Benutzer Stammmitglied
    Registriert seit
    21.10.2004
    Ort
    Mannheim
    Beiträge
    80
    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 ! Bild  

    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 Bild  

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

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

Berechtigungen

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

    Werbung      LiFePO4 Speicher Test