OLED-Display mit SSD1322-Controller und 256x64 Pixel

  • 1
  • 2
  • Page 2 of 2
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: OLED-Display mit SSD1322-Controller und 256x64 Pixel

 · 
Posted: 20.12.2022 - 23:09  ·  #9
Hi Harry,
hättest du meinen Rest ASM noch dazu gefügt, wäre es schneller :)

SPIOutD(@DispData,4); hat einen riesen Overhead, das kann man gleich in der Umwandlung abschicken
dann wird auch DispData nicht mehr gebraucht.
Die dicke For Schleife wird dann auch schlanker .

Da bleibt für den Opti nichts übrig :)
miparo
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: OLED-Display mit SSD1322-Controller und 256x64 Pixel

 · 
Posted: 21.12.2022 - 10:15  ·  #10
Hi Miparo,

erst nach dem ich es getestet hab ;)

[Edit] getestet 14.21ms :) und ich glaube, schneller geht jetzt nicht mehr. Miparo deinen ASM-Code für WriteOLED_D und WriteOLED_C hab ich nicht übernommen, da die Adressierung des Display-RAMs nur einmal am Anfang des Refreshs nötig ist und es somit nicht viel bringen wird. Danke dir :) und ASM würde ich auch gerne können .....

Code

Procedure chDispRefresh;                               // 7.85ms @ 64MHz
  Begin
    OLED_CD:=0;                                        // Befehl
    SPIOutByteD($15);                                  // Output Arg
    OLED_CD:=1;                                        // Daten
    SPIOutByteD(28);
    SPIOutByteD(91);
    OLED_CD:=0;                                        // Befehl
    SPIOutByteD($75);                                  // Output Arg
    OLED_CD:=1;                                        // Daten
    SPIOutByteD(0);
    SPIOutByteD(63);
    OLED_CD:=0;                                        // Befehl
    SPIOutByteD($5C);                                  // Output Arg
    OLED_CD:=1;

    ASM;
      LDI        _ACCCLO, GraphColArr AND 0FFh
      LDI        _ACCCHI, GraphColArr SHRB 8           // Z Pointer auf GraphColArr
      LDI        _ACCFLO, 007FFh AND 0FFh
      LDI        _ACCFHI, 007FFh SHRB 8                // Zähler laden 2047

      REFRESH_L1:
      LD         _ACCB, Z+                             // PTR^ GraphData laden , PTR erhöhen
      LDI        _ACCALO, 4                            // 4 x BYTES

      REFRESH_L2:
      CLR        _ACCA                                 // Ausgangspunkt data:=0
      SBRC       _ACCB, 7                              // Bit 7 in ARG testen
      LDI        _ACCA, $F0                            // wenn gesetzt DATA:=$F0
      LSL        _ACCB                                 // ARG nach links schieben
      SBRC       _ACCB, 7                              // Bit 6 ... jetzt testen  SkipRegisterBitClear
      ORI        _ACCA, $0F                            // gesetzt  Data := data or $0F
      call       SYSTEM.SPIOutByteD                    // nur _ACCA wird zerstört
      LSL        _ACCB                                 // ARG shift left um oben Bit 5 ... zu testen
      DEC        _ACCALO                               // wenn Loop var nicht 0 nochmal
      BRNE       REFRESH_L2

      SBIW       _ACCFLO, 1
      BRNE       REFRESH_L1                             //
    EndASM;
  End chDispRefresh;


Gruss
Harry
  • 1
  • 2
  • Page 2 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 13   50   63 · Page-Gen-Time: 0.026719s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI