Wie sende ich eine double Variablen an mein VBA-Programm

Gast #64722
Lesenswert?

Hallo Mikrocontroller Freunde

Ich möchte über die Serielle Schnittstelle eine double Variable z.B
13.432 an mein VBA-Programm am meinem PC senden und dort anzeigen
lassen.

Das senden von Ganzzahlen wie 15, 16 ,255 ist kein Problem

Mein Problem:  Warscheinlich liegt es an der Typumwandlung

Ich würde mich freuen wenn jemand eine Lösung für mich hat

Mit freundlichen Grüßen
Christian Hölscher


Mein Quellcode in C

void main(void)
{
    unsigned int x;
    double Variable_1 = 12.23;

    PCON = 0x80;
    TMOD = 0x22;
    TH1 = 250;
    TL1 = 250;
    TMOD = 0x22;
    TR1 = 1;
    SCON = 0x52;
    ET1 = 0;

    while(1)
    {
         SBUF = Variable_1;
         for(x=0;x<=1000;x++);
    }
}


Mein Quellcode in VBA:

Sub form_load()
  MSComm1.RThreshold = 8             '3 Variablen einlesen
  MSComm1.Settings = "9600,N,8,1"
  MSComm1.PortOpen = True
End Sub

Private Sub Serielle_auswerten_1()

  Dim Wert1 As double
  Dim Ergebnis As double

  sdata = MSComm1.Input ' Get Data (2 Bytes = 1 Wort)

  'Wert1 = Asc(Mid$(sdata, 1, 2))    Kommentar so lese ich char
   Me.txtwert1.Text = sdata          Hier müste der Fehler liegen!!!

End Sub
Gast #64723
Lesenswert?

Vielleicht solltest Du erst die Zahl in Text wandeln (im µC) und in VB
dann entsprechend decodieren (in float wandeln) oder einfach nur
Anzeigen, wenn du sie nicht weiter verarbeiten willst.
zur Umwandlung von Zahlen in Text gibt es in der Libc diverse
Funktionen. Das würde die Übertragung etwas verlangsamen, da mehr als
nur die beiden Bytes übertragen werden. Nämlich für jede Ziffer ein
Byte.
Sonst solltest du dir mal anschauen, wie double im µC codiert sind
(Mantisse und so [wie der andere Teil der Zahl heisst weiß ich gerade
nicht]).

Gruß Rahul
Gast #64726
Lesenswert?

Hallo Mikrocontroller Freunde
ich habe jetzt eine Convertierung von String nach float gefunden
ich brauche aber float nach String.

Hat jemand eine Idee...

Mit freundlichen Grüßen
Christian


#include <stdlib.h>
float atof (void *string);   /* string to convert */


#include <stdlib.h>
#include <stdio.h>                      /* for printf */

void tst_atof (void)  {
  float f;
  char s [] = "1.23";

  f = atof (s);
  printf ("ATOF(%s) = %f\n", s, f);
}
Gast #64729
Lesenswert?

OK, ich bin vom AVR-GCC ausgegangen, weil der hier sehr verbreitet ist.
Falls Du sie da nirgends findest, müsstest du dir die Funktion selber
bauen. Dafür brauchst du eigentlich nur wissen, wie der Datentyp
"flaot" aufgebaut ist. Schliesslich handelt es sich dabei auch nur um
Bits (4 Byte?).
Gruß Rahul
Gast #64730
Lesenswert?

Hallo Rahul
vielen Dank für deine Hilfe aber ich glaube da muss ich mich erst noch
weiter einlesen. Das bekomme ich leider nicht so einfach hin.
(Erfahrung fehlt).

Oder kannst du mir noch ein wenig weiter helfen. Ich hoffe ich nerve
nicht.

Mit freundlichen Grüßen
Christian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren