www.mikrocontroller.net

Forum: Compiler & IDEs double Variable über RS232 übertragen und auswerten?


Autor: Malte S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gerne eine Variable dessen Wert im EEPROM abgespeichert wird
per RS232 an einen PC übertragen und dort anzeigen bzw. verstellen und
wieder an den µC zurück senden damit dieser den Wert im EEPROM ändern
kann.

Ich möchte quasi die Konfiguration meines Programms ohne neu Flashen zu
müssen über RS232 mit einem selbst geschriebenen Programm ändern.

Kann mir jemand einen Tipp geben wie ich dies möglichst einfach mit
double werten realisieren kann?

Der einfachheit halber hatte ich zuerst überlegt alles mit unsigned char
zu übertragen aber bei einigen Variablen kann ich im µC nur mit double
rechnen bzw. eine Umrechung wäre zu aufwendig und die Auflösung zu
ungenau.
Daher werde ich um eine Double übertragung nicht herum kommen.

Leider hab ich mit doubles bisher wenig Erfahrung und ich finde diese
Rechnung mit Mantisse und co wenig intuitiv...

aber vielleicht weis ja von euch jemand eine einfache und geniale Lösung
für mein Problem.

Gruß
Malte.

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
wenn's einfach gehen soll: mit sprintf in ein array und dieses raus auf 
die leitung. umgekehrt mit scanf einlesen.
bye kosmo

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

wenn Du eine double-Variable d hast, dann kanns Du sowas machen:
uart_putchar(((char*)&d)[0]);
uart_putchar(((char*)&d)[1]);
uart_putchar(((char*)&d)[2]);
uart_putchar(((char*)&d)[3]);
uart_putchar(((char*)&d)[4]);
uart_putchar(((char*)&d)[5]);
uart_putchar(((char*)&d)[6]);
uart_putchar(((char*)&d)[7]);

Das heisst Du lässt den Compiler die Adresse von d nehmen, diese zu 
einer Adresse eines chars casten und dann die 8 bytes wie ein Array 
verschicken.

Der Empfänger schreibt die 8 Bytes in ein Array und macht dann
double d=*(double*)(array);

MfG Mark

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Mark Prediger:
Das geht aber nur dann gut, wenn das Zielsystem 100%ig das selbe 
double-Format hat und die selbe Reihenfolge der Bytes! Die einzige 
Möglichkeit, die eigentlich immer geht, ist die mit einem ASCII-String, 
den man auch nicht unbedingt mit (s)printf erzeugen muss, sondern mit 
den deutlich sparsameren Funktionen dtostr(f/e) bzw. zurück mit strtod.

Autor: Malte S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, stimmt schon... irgendwie sind doubles immer blöd... ich werde mal 
sehen, evtl. normiere ich das ganze auch auf unsigned int und übertrage 
alles als 16 Bit Interger variable... ist dann immer noch kürzer als die 
32 Bits eines Doubles... dann schreibe ich meine UART Transmit/Receive 
Funktion eben so um das alles in u-int übertragen wird. Dann ist 
wenigstens wieder alles einheitlich.

Das was ich im µc unbedingt als double speichern muss, kann ich nach dem 
Emfang ja wieder umwandeln, natürlich mit Auflösungverlust aber ich 
rechne mal ob sich das was tut... hoffe das es passt... 8-bit sind 
jedenfalls zu wenig, das weis ich schon.

Wie würdet ihr denn allgemein so ein Protokoll implementieren (jetzt 
nicht als sourcecode, sondern eher als Pseudocode mal grob skiziert) 
wenn es darum geht:

1.) eine reihe von einzelnen Variablen vo µc -> PC zu übertragen um 
diese dort dann in einem Programm bequem ändern zu können

und

2.) das ganze wieder vom PC auf den µc schieben um die geänderte Config 
zu "laden"

gleichzeitig sollte mit dem ganzen auch noch ein Datalogging von 
Sensorinformationen vom µc an den PC (selbes Programm) möglich sein um

1.) Debuggen zu können
und
2.) daten über längere Zeit aufzeichnen zu können, z.B. Temperatur über 
24h oder so... ohne Speicherprobleme zu bekommen oder eben die Daten mit 
Excel und co. grafisch aufzubereiten.

Bin mir da nämlich auch noch nicht ganz schlüssig wie ich das am 
sinnvollsten implementiere.

Gruß
Malte.

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schreibst du die Double-Variable in das EEPROM? Genauso kannste die 
auf den USART ausgeben/einlesen.

Autor: R. Fischer (firo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich stehe vor einer ähnlichen Aufgabe, werde mich erstmal damit 
beschäftigen müssen. Bei mir müssen Korrekturwerte irgendwie ohne 
Programmierung in eine Mega128. Ich denke mal da bleibt nur das E²PROM 
oder geht da was anderes?

Ob man 24h damit auskommt, hängt ja stark von den zu protokollierenden 
Daten und der Zeitauflösung ab.

Schönen Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.