INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Serial.print() mit uint64_t
09.12.2015, 09:44
Beitrag #1
Serial.print() mit uint64_t
Hallo,
ich würde gerne über Serial.print() eine 64-bit große Variable versenden. Leider habe ich bisher keine passende Lösung dazu gefunden, da Serial.print() nur maximal für 32-bit variablen gedacht ist
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 12:39
Beitrag #2
RE: Serial.print() mit uint64_t
(09.12.2015 09:44)chhec schrieb:  Hallo,
ich würde gerne über Serial.print() eine 64-bit große Variable versenden. Leider habe ich bisher keine passende Lösung dazu gefunden, da Serial.print() nur maximal für 32-bit variablen gedacht ist

Hi,
also bislang kenne ich keinen Variablentyp beim Arduino wo 64 Bit hätte außer einem String oder Array.
Aber vielleicht hilft dir die Bytemühle von Arne weiter.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 13:06
Beitrag #3
RE: Serial.print() mit uint64_t
Ich verwende einen uint64_t.
Mit Hilfe dieses Links:
http://forum.arduino.cc/index.php?topic=143584.0
Kann ich nun auch 64 bit senden. Zumindest mit Konstanten klappt das. bei der Berechnung die ich anstrebe hakts noch aber denke es sollte so zu lösen sein
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 13:45 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2015 13:46 von HaWe.)
Beitrag #4
RE: Serial.print() mit uint64_t
64 bit hat int64_t (longlong) und double beim Due.

Viele Leute scheinen auch seltsamerweise immer noch zu denken, "Arduino" sei mit "AVR" gleichzusetzen... Undecided

Ich mache allerdings grundsätzlich immer erst die String-Umwandlung per sprintf und anschließend die Ausgabe per Serial (oder auf dem Display):

Code:
char sbuf[50];
int64_t  ivar;
double  fvar;
sprintf(sbuf, "%ld   %f", ivar, fvar);
Serial.print(sbuf);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 14:00
Beitrag #5
RE: Serial.print() mit uint64_t
Zitat:Viele Leute scheinen auch seltsamerweise immer noch zu denken, "Arduino" sei mit "AVR" gleichzusetzen...

Entschuldige bitte aber wie ist diese Aussage gemeint?

Ich gebe Zeiten in ns per Serial.print() aus. Manuelle löse ich einen Interrupt ca. alle 10 sekunden aus und lasse mir die Zeiten darstellen. Ich habe das Problem, das die Daten zunächst mal ab ca. 50 sekunden falsch sind. Werte Größer 100s werden wieder richtig dargestellt. Die ergebnisse sind reproduzierbar. Vielleicht sieht jemand das Probelm.
Hier mal eine Liste der Ausgaben:

13436651592 // ca.13s
23436142200
33002340744 // ca.33s
43700830296
18446744024174176024 // ca. 53s
18446744034475579792
18446744044462643488 // ca. 73s
18446744053839621016
18446744064570965680 // ca. 93s
104238786480 //ca. 103s
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.12.2015, 09:29
Beitrag #6
RE: Serial.print() mit uint64_t
Die Berechnung sieht wie folgt aus:

Code:
/*
    uint64_t timer;
    uint64_t overfl;
In diesen Variablen werden dann der Timerwert und der Timerüberlauf gespeichert
Darauf folgt die Berechnung in ns
Leider kommen die oben angegebenen daten raus
*/

timer=(timer+overfl*TIMER_MAX)*(uint8_t) 24;
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.12.2015, 11:10
Beitrag #7
RE: Serial.print() mit uint64_t
Meine Aussage bezog sich auf Bitklopfer's Aussage
Zitat:also bislang kenne ich keinen Variablentyp beim Arduino wo 64 Bit hätte außer einem String oder Array.
lgbk
was ntl absolut falsch ist, denn mit ARM Arduinos klappt es ja prima!

(09.12.2015 13:45)HaWe schrieb:  64 bit hat int64_t (longlong) und double beim Due.

Viele Leute scheinen auch seltsamerweise immer noch zu denken, "Arduino" sei mit "AVR" gleichzusetzen... Undecided

Ich mache allerdings grundsätzlich immer erst die String-Umwandlung per sprintf und anschließend die Ausgabe per Serial (oder auf dem Display):

Code:
char sbuf[50];
int64_t  ivar;
double  fvar;
sprintf(sbuf, "%ld   %f", ivar, fvar);
Serial.print(sbuf);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.12.2015, 15:03
Beitrag #8
RE: Serial.print() mit uint64_t
Ich habe das ganze jetzt mal etwas weiter aufgedröselt.
Der Timerwert wird mit dieser zeile berechnet:
Code:
timer=((Spike_data[buffer.out].data[11]<<24)+(Spike_data[buffer.out].data[10]<<16)+(Spike_data[buffer.out].data[9]<<8)+(Spike_data[buffer.out].data[8]));

Hier werden einfach aus 4 Bytes ein 32-Bit Integer geformt.
Bis zu dem binären wert: 01111111111111111111111111111111 (2147483647) ist alles in Ordnung. Sobald sich das Bit_31 Allerdings auf 1 (100000000000000000000000000000000) verändert kommt ein falscher wert raus. Wo könnte hier das Problem liegen? Hat das irgendwsa mit dem Vorzeichen zu tun?

Hier nochmal zwei Beispielwert:
Für den Wert 55332060976 sollte als Ergebnis 110011100010000011000011111100110000 angezeigt werden, aber es erscheint
so etwas: 1100110011001100110011001100001111101100110111011100110010001.

Ich weiss es sind ziemlich viele Zahlen was nicht so ganz übersichtlich ist. aber vllt kann hier jemand ein Schema erkennen, wodruch der Fehler erzeugt wird
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ausgabe Serial Monitor zu viele Byt`s Hannes 0 98 12.11.2016 20:29
Letzter Beitrag: Hannes
  Speicher sparen bei serial.print?? DL1AKP 3 194 02.09.2016 13:32
Letzter Beitrag: hotsystems
  Serial Monitor ASCII 1 schreiben BennIY 11 580 01.08.2016 16:42
Letzter Beitrag: Mathias
  Serial.write Mathias 6 384 29.07.2016 17:06
Letzter Beitrag: Mathias
  Serial Monitor Rudi 5 632 02.06.2016 11:37
Letzter Beitrag: Bitklopfer
  Serial.printeln, Stellen verschwinden Mathias 6 259 27.05.2016 17:44
Letzter Beitrag: Mathias
  Kommunikation Serial Monitor --> Arduino BennIY 7 357 24.05.2016 07:48
Letzter Beitrag: hotsystems
  Serial Monitor Eingabe über Code Maxi290997 4 522 12.05.2016 18:57
Letzter Beitrag: SkobyMobil
  Software serial umschaltzeit BennIY 3 384 13.03.2016 18:51
Letzter Beitrag: hotsystems
  Frage zu Serial SMoTH 3 464 09.03.2016 18:13
Letzter Beitrag: SMoTH

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste