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
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
Hallo Rahul vielen Dank für die schnelle Hilfe. Mit freundlichen Grüßen Christian
Hallo Mikrocontroller Freunde für weitere Ideen bin ich jeder Zeit offen Mit freundlichen Grüßen Christian
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);
}
dtostrf vielleicht? Guck mal in der Libc danach. Ich hoffe, Du kannst Englisch... Gruß Rahul
Hallo Rahul ich verwende den Compiler von Keil uvision2 gibt es da auch die Libc oder wo finde ich die? Christian
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
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
Hallo Christian ich hoffe du hast alles hin bekommen hast
Hat vieleicht jemand noch einen Guten Beitrag? christian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.