Was passiert denn ich HEX-Werte als GPIO.output parameter uebergebe?

  • Was passiert denn ich HEX-Werte als GPIO.output parameter uebergebe?? Schau mal ob du hier fündig wirst!

  • 0x80 ist ein Bitmuster, nämlich 1000000

    Im Code sind die Muster für die 7-Segment-Zeichen von 0 bis F hinterlegt, z. B.für die "1" 0x06 = 00000110

    Der Code schiebt nun in einer Schleife nacheinander die Bits nach links und führt jeweils ein bitweises UND mit dem Bitmuster oben aus (erster Schritt noch ohne Verschiebung).

    10000000

    & 00000110 (nicht verschoben)

    = 00000000 = 0 => LED-Segemnt 7 aus

    10000000

    & 00001100 (eins nach links verschoben)

    = 00000000 = 0 => LED-Segemnt 6 aus

    ...

    im sechsten Schritt sind die Bits so weit nach links verschoben, dass es erstmals ein "Ein" gibt

    10000000

    & 11000000 (fünf nach links verschoben)

    = 10000000 = >0 => LED-Segemnt 2 ein.

    Wenn der Wert 00000000 = 0 = LOW (FALSE) ist, wird der GPIO ausgeschaltet. Jeder andere Wert (nicht nur 1, sondern jede andere Zahl) entspricht HIGH (TRUE) und schaltet den GPIO ein. Ob das ein Dezimal-, Hexadezimal- oder Binärwert ist, ist dabei egal.

    Diese ein/aus-Signale werden also nacheinander an das Schieberegister geschickt und stellen dann an den Ausgängen des Schieberegisters (Q7-Q0) die entsprechende Ziffer auf dem 7-Segment-Display dar.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (28. Oktober 2021 um 06:47)

  • Du nutzt doch Python und kannst ausprobieren.

    Vielleicht trägt das zur Erklärung bei:


    Die gleiche Methode wird auch verwendet, um die GPIO-Register zu beschreiben.

    Den Code sieht man nur nicht, da er in C implementiert ist.

  • Wenn der Wert 00000000 = 0 = LOW (FALSE) ist, wird der GPIO ausgeschaltet. Jeder andere Wert (nicht nur 1, sondern jede andere Zahl) entspricht HIGH (TRUE) und schaltet den GPIO ein. Ob das ein Dezimal-, Hexadezimal- oder Binärwert ist, ist dabei egal.

    Danke, das ist genau der Teil, der mir gefehlt hat (dachte, es muesste entweder 1 oder 0 sein)! :)

  • Code
    MAX_VALUE : 0010000000
    Data VALUE : 0000000101
    bit=0 shifted_data=0000000101 masked_value=0000000000, bool_result=False
    bit=1 shifted_data=0000001010 masked_value=0000000000, bool_result=False
    bit=2 shifted_data=0000010100 masked_value=0000000000, bool_result=False
    bit=3 shifted_data=0000101000 masked_value=0000000000, bool_result=False
    bit=4 shifted_data=0001010000 masked_value=0000000000, bool_result=False
    bit=5 shifted_data=0010100000 masked_value=0010000000, bool_result=True
    bit=6 shifted_data=0101000000 masked_value=0000000000, bool_result=False
    bit=7 shifted_data=1010000000 masked_value=0010000000, bool_result=True

    Danke fuer das Beispiel, das hilft!

  • Man könnte statt 0x80 im Quelltext auch 0b10000000 oder 0b1000_0000 schreiben. Auch wenn alten Hasen natürlich sofort klar ist, dass 0x80 ein gesetztes Bit 7 ist, macht es die Binärdarstellung der literalen Konstante deutlicher. Insbesondere auch Lesern die das nicht schon im Schlaf aufsagen könnten.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!