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.