Ledmatrix 32x64 RGB mit 12bit-Farben. Wie machen die das?

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Mitch64 wrote:

      Warum wird in dem Macro

      1. !SUBI R24,0xFF
      2. !SBCI R25,0xFF
      ausgeführt und nicht
      1. ADIW r24,1

      damit du diese Frage stellst :D
      Nein, der Operationscode ist imho der Gleiche wie bei Adiw. Das ich es übernahm rührt aber daher, das ich mir zuvor das Kompilat der verschiedenen Varianten zum Vergleich angesehen habe und für einen um 2 Takte schnelleren Vorschlag, aus Bequemlichkeit den Code zusammengeschoben habe.
      Ist aber nicht ungewöhnlich, das Additionen auf ein einzelnes Register mit dem imediate-Sub Befehl und Kompliment bewerkstelligt werden. Es gibt nun mal kein ADDI.
      Aber ja, Adiw macht's Gleiche.


      Mitch64 wrote:

      Man könnte doch auch die Addition von Hand machen mit ADD und ADC. :!:
      Sicher Das. Probier doch mal aus :12 Takte und nur mit 2 Register.
      Es ist etwa doppelt soviel Getippe.
    • Die Variante zu Inkremntieren mit dem SUBI und SBIC war mir neu.
      Kann ich aber logisch nachvollziehen.

      Mit ADD und ADC war mir klar, dass es aufwendiger ist, schließlich muss man das per Register machen, die müssen auch zuvor geladen werden.

      ADIW wird auch nicht von allen Controllern unterstützt.
      So gesehen ist das ein guter Weg, Werte zu Inkrementieren.

      Schön ist, dass sich das auch erweitern lässt auf Erhöhung um 2 oder mehr und man nicht auf 16-Bit Werte beschränkt ist.
      Es klappt auch wunderbar mit Long und DWord Werten.

      Danke nochmal für deine Erklärung.
      Kaum macht man es richtig - und schon geht's!
    • Mitch64 wrote:

      Danke nochmal für deine Erklärung.
      Selbstredend.


      Mitch64 wrote:

      Mit ADD und ADC war mir klar, dass es aufwendiger ist, schließlich muss man das per Register machen, die müssen auch zuvor geladen werden.
      So ganz viel mehr ist es dann ja auch nicht

      BASCOM Source Code

      1. macro incr_w2
      2. !LDS R24,{w}
      3. !LDI R25,1
      4. !ADD R24, R25
      5. !STS {w},R24
      6. !CLR R25
      7. !LDS R24, {w+1}
      8. !ADC R24,R25
      9. !STS {w+1} , R24
      10. end macro
      Display All
      Wenn nun einer auf die Idee käme die Zeilen 4 und 5 gegen INC R14 auszutauschen, wird beim Überlauf des Low-Bytes auf den von mir in Beitrag #39 erwähnten Unterschied stoßen - das Carry-Flag wird nicht gesetzt. Das aber nur nebenbei.



      Doch sind 12 Takte aber auch nicht das Ende der Fahnenstange. Nicht das nachher einer glaubt, 12 sind das Limit :D Es geht auch in 10!

      Source Code

      1. macro incr_w3
      2. !LDS R24,{w}
      3. !LDs R25,{w+1}
      4. !ADIW R24 ,1
      5. !STS {w}, R24
      6. !STS {w+1} , R25
      7. end macro


      Mitch64 wrote:

      ADIW wird auch nicht von allen Controllern unterstützt.
      Echt? Hast du ein Beispiel?
    • Das steht so im "Instruction Set" zum AVR auf Seite 33.

      Kandidaten sind z.B Tiny 11,12

      Auszug aus dem Dokument:

      7. ADIW – Add Immediate to Word

      7.1. Description
      Adds an immediate value (0 - 63) to a register pair and places the result in the register pair. This
      instruction operates on the upper four register pairs, and is well suited for operations on the pointer
      registers.
      This instruction is not available in all devices. Refer to the device specific instruction set summary.
      Kaum macht man es richtig - und schon geht's!