Binärausgabe

Hallo alle zusammen,

ich habe ein kleines Problem, beziehungsweise ich weiß nicht recht weiter und finde leider auch nirgendwo passende Antworten zu meinem Problem.

Ich will die Zeit ab einem gewissen Datum hochzählen im Sekundentakt und zwar in Binärer Form. Beginnend bei 0 bis 604799sec (0000 0000 0000 0000 0000 - 1001 0011 1010 0111 1111).
Das Problem ist Arduino kann binär bloß max. 8Bit. Allerdings brauche ich um bis 604799sec hochzuzählen 20bit. Weiß irgendjemand ob das überhaupt mit Arduino funktioniert ?

Es gäbe zwar die Möglichkeit die Sekunden auch Dezimal hochzuzählen allerdings muss ich die Dezimalzahlen dann alle wieder in Binäre Form umwandeln und da bin ich mit meinem Latein am Ende weil ich wenig Erfahrung bisher habe.
Die Codes die ich bisher zur Umwandlung von Dezimal in Binär gefunden hab helfen mir bei dem Problem auch wenig weiter. Entweder sie spucken gar nix aus oder Hieroglyphen aber keine Binärzahl.

Vielleicht hat jemand hier, eine Lösung für das Problem.

LG sihu

Du musst nur das Link in Code umsetzen.

Das geht geht gut in C und ist eine super Übung für Anfänger.

Das Problem ist Arduino kann binär bloß max. 8Bit.

Das stimmt nicht.

Das "Buchstabe, dezimal binär hex und oktal" betrifft nur die ein/ausgabe.

Intern ist immer binär.
Auch gerne mit 32 und 64 Bit

Klappt mit Arduino Hausmitteln:

void setup() {
  Serial.begin(115200);
  Serial.println(F("\nStart"));
  Serial.println(604799UL, BIN);
}

void loop() {

}

Angeben, dass es größer als int ist!

print kann mindestens:

    size_t print(unsigned char, int = DEC);
    size_t print(int, int = DEC);
    size_t print(unsigned int, int = DEC);
    size_t print(long, int = DEC);
    size_t print(unsigned long, int = DEC);

@TO was willst du wirklich?

sihu:
Es gäbe zwar die Möglichkeit die Sekunden auch Dezimal hochzuzählen allerdings muss ich die Dezimalzahlen dann alle wieder in Binäre Form umwandeln und da bin ich mit meinem Latein am Ende weil ich wenig Erfahrung bisher habe.

Ich habe da mal eine Lib dafür geschrieben.

Gruß Tommy

Danke für die Antworten haben mich aufjedenfall schon ein bisschen weitergebracht :slight_smile:

@Tommy56 noch eine Frage zu deinem Code. Die Binärzahlen werden in 4-bit,8-bit,16-bit,32-bit und 64-bit ausgegeben. Ist es auch möglich dass ich sie in 20-bit ausgeben lassen kann ?

LG sihu

Ob du das kannst, muss ich nach dieser Frage bezweifeln.

Was hast du denn überhaupt für Probleme mit deinen 20 Bit?

Wo klemmt es?

sihu:
Ist es auch möglich dass ich sie in 20-bit ausgeben lassen kann ?

Möglich ist es. Du brauchst es nur anders zu programmieren.

Gruß Tommy

print(..., BIN) gibt keine führenden Nullen aus. Wenn du das willst, also in jedem Fall 20 bit anzeigen, musst du entweder

  • die richtige Anzahl '0' - Zeichen davorschreiben oder
  • statt print(..., BIN) etwas anderes machen. Dann könntest du auch gleich das Ganze lesbarer ausgeben (zwanzigstellige Zahlen sind (für mich) nicht lesbar)

Hi

Habe ich den Sinn dieses Thread überlesen?
Klar: Zahl binär mit 20 Bit - bekämen wir schon hin denk
Aber: WOFÜR??
Die Aufteilung in 4er-Gruppen riecht förmlich nach BCD - wobei Da selten Nibbles über 9 vorkommen.
Auch hätten wir dann nur 5 Ziffern.

Irgend etwas muß Da mit den 20 Bit zusammen hängen, was ich noch nicht gefressen habe.
Wenn's nur der Zahlenbereich ist, Der mindestens gebraucht wird - Das geht genau so gut mit 32 Bit - und Die kann der Arduino 'von Haus aus' - dann sind eben vorne ein paar unnötige Nullen, Die wir einfach ignorieren - fertig.

MfG

postmaster-ino:
Die Aufteilung in 4er-Gruppen riecht förmlich nach BCD

Nö, das ist einfach besser lesbar, als 32/64 Bit hintereinander. Man könnte meine Lib dahingehend anpassen, dass bei 32 Bit die vorderen Bit einfach nicht ausgegeben werden, wenn es denn unbedingt 20 sein sollen.

postmaster-ino:
Wenn's nur der Zahlenbereich ist, Der mindestens gebraucht wird - Das geht genau so gut mit 32 Bit - und Die kann der Arduino 'von Haus aus' - dann sind eben vorne ein paar unnötige Nullen, Die wir einfach ignorieren - fertig.

"Von Haus aus" gibt print keine führenden Nullen aus.

Gruß Tommy

Hi

Führende Nullen macht print (zumindest bei mir) eh nicht - dafür habe ich eigene Funktionen.
Mir ging Es ‘nur’ darum, daß auf den 20 Bit gepocht wird, wo’s dermaßen wurscht ist, wie viele Bits ‘links von den 20’ einfach nicht benutzt werden - eben ignoriert.
Ich muß ja auf Nichts über 0x7FF 0xFFFFF reagieren - und wenn ich die Bits oberhalb nicht bespaße, steht Da auch nie was Anderes, als die zuvor initialisierte Null.
Wenn doch - ein wert & 0x7FF 0xFFFFF löscht die Bits über 20 zuverlässug.

MfG

Edit
Wir in #12 richtig bemerkt wurde - besteht jede vollständige HEX-Ziffer nur auf 4 Bit (FF = 255 = 8Bit).
Somit sind meine 7FF keine 20, sondern 4+4+3=11 Bit … passiert mir irgendwie öfter, daß ich das Nibble auf 8 Bit bringe …
Danke für die Korrektur!

Nur falls jemand verwirrt ist:
0x7FF sind natürlich nur 11 Bit
Mit 20 Bit kommt man 5 Hex Ziffern weit (0xFFFFF)

Jeder der mit solchen Bitmustern zu tun hat
0b11111111111111111111
bevorzugt natürlich die Hex-Schreibweise.

Zurück zur Ausgangsfrage:

Allerdings brauche ich um bis 604799 hochzuzählen 20bit

1001 0011 1010 0111 1111 ist etwas leichter zu lesen als 10010011101001111111 , stimmt.
Aber was gegen 93A7F spricht, sehe ich nicht.

Reine Neugier, was für eine Magic Number ist 604799 ?

Da hast Du grundlegend Recht, aber manchmal will man es eben auch binär sehen.

Gruß Tommy

Fröhliches Magic-Raten:
604799 / 60 [min] / 60 / 24 [d] = 7 (fast)
Eine Woche.

Ja, stimmt: 604799 ist die letzte Sekunde einer Woche
7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden.

Und das braucht jemand in Binärdarstellung? Na gut, von mir aus.

michael_x:
Ja, stimmt: 604799 ist die letzte Sekunde einer Woche
7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden.

Wenn deine Rechnung stimmt, dann würde ich das mittlerweile in meinem Programm so kodieren:

Millis zeitraum { 7_dy - 1_sec };

oder so ähnlich...

michael_x:
Und das braucht jemand in Binärdarstellung?

Naja... ich befürchte, dass da ganz was anderes gemeint ist.
Aber bisher... KA, was ...

michael_x:
Na gut, von mir aus.

Von mir aus auch.
Aber dann sehe ich das Problem nicht.