-         

Ergebnis 1 bis 8 von 8

Thema: Byte Invertieren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.06.2008
    Ort
    Nürnberg
    Alter
    24
    Beiträge
    94

    Byte Invertieren

    Anzeige

    Hallo,

    ich bin gerade dabei, eine LED matrix mit einem Schieberegister aufzubauen.
    Da ich den Code übersichtlich halten will, und man als Spaltenansteuerung immer eine 0 für "Spalte an" setzen muss, wollte ich das komtplette Bitmuster invertieren. Da ich für die nächste Spalte das Bitmuster einfach eins nach rechts shifte, wird das neu enstehende Bit ja 0, daher aber auch die Spalte wieder an.

    Heißt:

    Z = &B01111111
    Shift Z , Right

    wird zu &B00111111, was ich ja nicht will, ich will dass &B10111111 draus wird. Ich kenn mich mit Bitrechnen nicht so gut aus, kann man das auch durch addideren, dividieren erreichen? Durch invertieren wäre das kein Problem.


    Ich weiß nicht ob sowas ohne Hardware möglich ist?!

    Gruß,

    Tom

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Ich würde nach dem Shiften einfach das oberste Bit auf 1 setzen. Bei dir wäre das so:
    Z.7 = 1
    Die Nummerierung fängt rechts bei 0 an, entsprechend der Wertigkeit der Bits.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Nimm einfach den Rotate Befehl.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    13.06.2008
    Ort
    Nürnberg
    Alter
    24
    Beiträge
    94
    Danke für die Antworten.

    @for_ro Danke, diese Funktion kannte ich noch garnicht!

    @ MagicWSmoke Wie meinst du das? Der Rotate Befehl dreht doch nur das Muster um

    00111 wird zu 111000 oder täusche ich mich da?

    Gruß

    EDIT:

    Muss mich korrigieren! Danke Magic, habs ausprobiert und das ist genau das was ich gesucht habe! So wird ja alles noch einfacher! Kann man da auch größere Bytes verschieben? Ich denke da z.B. an ein 64bit Byte oder so

    Gruß

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Kann man da auch größere Bytes verschieben?
    Die Bascom Hilfe ist Dein Freund

    Das höchste der Gefühle ist ein Long, also 32 Bit. Wobei Du mir auch erstmal eine 64 Bit Variable in Bascom zeigen müsstest

    Solltest Du mal etwas richtig negativ sehen wollen, so nimm NOT:

    Code:
    N = NOT N
    negiert alle Bits in N.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    13.06.2008
    Ort
    Nürnberg
    Alter
    24
    Beiträge
    94
    Hallo,

    danke, ich hab mich ein bisschen schlecht ausgedrück und nicht nachgedacht.
    Ich will nicht unbedingt größere Zahlen verschieben, sondern:
    Ich habe z.B. 8 kaskardierte Schieberegister, die jeweils die Spalten in meiner Matrix aktivieren. Die Zeilen werden über einen Treiber geschalten.

    Daraus ergeben sich 7 Zeilen mal (8*7)+1 Spalten = 399 Leds.
    Um das ganze jetzt in einer Matrix anzusteuern, wollte ich in den Schieberegistern halt jeweils eine 0(= Spalte an) komplett durchschieben, also erst in Q1 des ersten Registers, dann Q2... bis es dann bei Q8 des 8ten Regsisters angekommen ist.
    Ich hatte noch die Idee, einfach am Anfang eine 0 in die Schieberegister zu schieben und per "Shiftout" einfach immer 1er nachzuschieben, und zwischendrinnen immer den Zustand übernehmen. Dadurch bekomme ich auch die 0 durch alle durchgeschoben, das muss ich noch ausprobieren.

    Hoffe das war verständlich

    Tom

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Es ist aber ein Unterschied, ob Du ein Schieberegister bedienst, oder das auf lokale Variablen abbilden willst. Beim Schieberegister reicht einmal 0 und 63 mal 1 schieben, wenn die 0 überall durchgeschoben werden soll.

    Nur zwischendrin wirst Du nicht viel übernehmen können, dazu müsstest Du Dein Schieberegister erst wieder auslesen. Also alles wieder rausschieben, nicht sehr effizient.

    Solltest Du dagegen den Zustand auf 8 Bytes abbilden wollen, so würde es am einfachsten in Maschinensprache, also ASM Code gehen, die Sprache solltest Du dafür aber sinnvollerweise können.

    Einen unkomplizierten Befehl um 8 Bytes direkt in Basic zu rotieren gibt's nicht. Wenn's denn Basic bleiben muss, kannst Du den aus 2 Rotate Befehlen, mit einem bisserl Code zusammenbauen. Unsauberer als die ASM Lösung, aber klappen tät's sicher.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    13.06.2008
    Ort
    Nürnberg
    Alter
    24
    Beiträge
    94
    Ok, damit ich nicht soviel Zeit verschwende beim Multiplexen, werde ich einfach nicht wie gedacht über die Spalten multiplexen sondern über die Reihen.
    Dadurch muss ich nicht immer eine 0 durch die Schieberegister schieben, sondern das Bitmuster. Die Zeilen werden dann über ein 74HC259 jeweils von oben nach unten auf 0 gesetzt(schön ist auch, das der den ausgang gleich invertiert) Dann noch nen Treiber davor und los gehts

    Danke nochmal für die Hilfe

    Tom

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •