-         

Ergebnis 1 bis 3 von 3

Thema: Bitmanipulation

  1. #1

    Bitmanipulation

    Anzeige

    Hallo,

    ich habe mehrere LED-Matrizen bekommen und habe sie mit Schieberegistern (Zeilen und Spalten) angesteuert. Zur Ansteuerung benutze ich erstmal die erweiterung M32 vom RP6. Dort benutze ich SPI und schreibe erst die Spalten-Bits und dann die Zeilen und ausgeben. Funktioniert super.

    Jetzt meine Fragen, ich habe mir natürlich vorgenommen eine Laufschrift zu programmieren. Ja, ich weis das gibt es schon mehrfach.
    Ich dacht mir ich erstelle Variablen für jede Zeile zwei Stück. Eine als Init-Variable (Inhalt z.B. 0b00000000...) und eine als Ausgangsvariable die dann auf die entsprechende Zeile geschrieben wird.
    Die Buchstaben/Zahlen würde ich auch ein Variablen speichern. Nun dachte ich mir ich nehme die Init-Var. und "ver-oder" die Bits mit den der Buchstaben und schreibe das Ergebnis in die Ausgangs-Var.
    z.B. Zeile1aus = Zeile1int | Zeile1buchstabe;
    Aber wie mache ich das, wenn Zeile1int und Zeile1aus z.B. 32Bit lang sind, der Buchstabe 8Bit und ich den Buchstaben an eine ganz bestimmte Stelle schreiben will? (z.B. nur Bits 10-17 mit den 8Bits des Buchstaben überschreiben)
    Und ist meine Überlegung für die Programmierung eines Lauflichts richtig? Ich habe nur bedenken wenn ich die großen Matrixen (16x96) ansprechen will. Denn ich denke das ein ATmega32 nicht mit eine Variable die 96Bitstellen hat umgehen kann.

    Ich hoffe auf eure Hilfe, denn mit diesem "Projekt" will ich mich in µC und die C einarbeiten, da ich bis jetzt "nur" alle Scriptsprachen durch habe. Mit Spriptsprachen habe ich schon mal eine Punkt-Matrix auf dem Bildschirm gezaubert und hatte dort auch die von mir beschriebenen Variablen genutzt.

    Gruß m1cha

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Du könntest z.b. deine 8Bit variable in eine 32 bit Variable casten. Also z.b. so:
    Code:
    uint8_t meineVar = 34;
    uint32_t mein2Var = (uint32_t)meineVar;
    und dann per bitshift an die passende Stelle verschieben. Z.b. so:
    Code:
    meine2Var = meine2Var << 8;

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Hi m1cha,

    hoffentlich treffe ich Dein Problem.
    ... Zeile1aus z.B. 32Bit lang ... Buchstabe 8Bit und ... an eine ganz bestimmte Stelle schreiben ...
    Ich hatte das in meinen PingPong-Projekten gemacht - Bits abfragen, setzen und löschen. Ungefähr so:
    Code:
    // - - - - - - - - - - - - - - -
    //#define SetL (xk,y)           ( L[xk] |= ((uint16_t)1 << (y)) 
    // Setzt Bit
     volatile uint16_t  L[20];      // LED-Reihe 1 bis 10, Rest ist Dummy
    // ...
    // - - - - - - - - - - - - - - -
    //      Jetzt altes Rack links löschen und neues setzen
          cli();                    //
          lPr       = RKL_POSa ;    // Positioniere auf alten LED-Platz
          L[lPr]   &= ~((uint16_t)1<<15);   // Lösche LEDBit lPr (rechtes Poti)
          L[lPr-1] &= ~((uint16_t)1<<15);   // Lösche LEDBit lPr-1
    // - - - - - - - - - - - - - - -
          lPr       = RKL_POSn + 12;        // Unterkante NEUES, rechtes Rack
          L[lPr]   |=  ((uint16_t)1<<15);    // Setze LEDBit lPr (rechtes Poti)
          L[lPr-1] |=  ((uint16_t)1<<15);    // Setze LEDBit lPr-1
          RKL_POSa  = lPr;          // Neuwert ist bereits alt
          sei();                    //// ...
    // - - - - - - - - - - - - - - -
    Sind nicht sooo lange LED-Bitmuster wie bei Dir, aber das System sollte passen.

    Dazu könne man natürlich z.B. mit den Defines
    Code:
      #define SetBit(ADDR,BIT)       ((ADDR)  |=  (1<<(BIT)))       // Setzt Bit
      #define ClrBit(ADDR,BIT)       ((ADDR)  &= ~(1<<(BIT)))       // Löscht Bit
      #define IsBitSet(ADDR,BIT)     (((ADDR)  &  (1<<BIT))?1:0)    // Fragt Bit = 1?
      #define IsBitClr(ADDR,BIT)     ((!(ADDR) & ~(1<<BIT)))        // Fragt Bit = 0
    das "Schiebegeschäft" bequem und übersichtlich erledigen. ABER - meine Laufschrift ist wegen anderer Projekte in den Kinderschuhen stecken geblieben.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Bitmanipulation: Problem
    Von teamohnename im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 08.01.2013, 01:26
  2. problem mit bitmanipulation
    Von _maddin im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 30.07.2008, 00:37
  3. Bitmanipulation
    Von raoul4 im Forum Assembler-Programmierung
    Antworten: 6
    Letzter Beitrag: 03.04.2007, 13:54
  4. Bitmanipulation in ASM
    Von teslanikola im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 11.04.2006, 13:19
  5. Bitmanipulation
    Von teslanikola im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 29.08.2005, 21:28

Stichworte

Berechtigungen

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