sexta-feira, 16 de dezembro de 2016

Display OLED amarelo com o controlador SSD1322.

        Dando sequencia ao post de displays OLED, testei um baseado no controlador Solomon Systech SSD1322, amarelo, com 16 niveis de intensidade em cada pixel, resolução de 256x64 pixels e interface SPI.
        Este display também tem a mesma pinagem do baseado no SSD1306, portanto pude usar a mesma placa com o MSP430G2452 sem alterações. Ao contrário do SSD1306 cujos pixels estão ou acesos ou apagados, o SSD1322 possui 16 níveis de intensidade, tem a resolução de 480x128 pixels mas neste display usa 256x64.
        Já usei diversos displays nos meus projetos, mas este foi o mais difícil de usar por causa da sua maneira peculiar de enviar os dados. Nos display monocromáticos, cada bit é um pixel e no colorido, cada byte é um pixel desde que seja usado o modo de 8 bit de cores, mas neste, só ativa os pixels após o envio de 2 bytes, em uma linha horizontal de 4 pixels independentemente do modo de incremento seja horizontal ou vertical. Cada pixel usa metade do byte (4 bits), ou seja, envio 2 bytes e ativa 4 pixels na horizontal, tente desenhar um caractere assim!
        Decidi usar uma fonte de 32x16 pixels (haja memória!), pois já a uso em outras aplicações e para ter um display com 2 linhas de 16 caracteres, formando assim um display 16x2 bem mais bonito.

Vista frontal do display.

Vista inferior. Note que este usa um regulador step-up para acionar os pixels e o SSD1322 fica na "fita" e não no vidro como nos outros. Note que também substituí os dois reguladores de tensão por um resistor de 0R.

Display em ação com fonte 32x16 mostrando diferentes níveis de brilho. Abaixo dele está placa com o MSP430G2452.


Inicialização do SSD1322:
        Esta é a sequência de inicialização que usei para este display, os parâmetros podem variar portanto use por conta e risco.
        Note que no SSD1322, os parâmetros dos comandos são enviados como dados, não como comandos como no SSD1306 e SSD1331.

1
Aplica-se um pulso de RESET por no mínimo 3µs.

2
Command lock
Envia comando 0xFD, Command lock/unlock
Envia Dado 0x12, Unlock OLED MCU interface from entering command

3
Sleep mode
Envia comando 0xAE, Set sleep mode ON (Display OFF)

4
Display clock divider/oscillator frequency
Envia comando 0xB3, Set Display Clock Divide Ratio/Oscillator Frequency
Envia dado 0x91, Oscillator frequency = 0x09, Clock Divider = divide by 2

5
MUX ratio
Envia comando 0xCA, Set multiplex ratio
Envia dado 0x3F, MUX ratio = 64

6
Display vertical offset
Envia comando 0xA2, Set display vertical offset
Envia dado 0x00, Vertical scroll by COM = 0

7
Display start line
Envia comando 0xA1, Set display start line
Envia dado 0x00, Display Start Line = 0

8
Remap & dual COM line mode
Envia comando 0xA0, Set Remap & Color Depth
Envia dado 0x14, COM Split disabled, Scan=COM(n-1)~COM0, Nibble remap enabled, Column remap disabled, Vertical address increment
Envia dado 0x11 ,Dual COM line mode enabled

9
GPIO
Envia comando 0xB5, Set GPIO
Envia dado 0x00, GPIO1 disabled, GPIO0 disabled

10
VP Supply
Envia comando 0xAB, Select VCC
Envia dado 0x00, External VDD selected

11
Display enhancement A
Envia comando 0xB4, Set display enhancement A
Envia dado 0xA0, External VSL enabled
Envia dado 0xFD, Enhanced low GS display quality

12
Contrast current
Envia comando 0xC1, Set contrast current
Envia dado 0x8C, ISEG current=140

13
Contrast current
Envia comando 0xC7, Set master contrast current control
Envia dado 0x0F, Output currents for all colors = 16/16

14
Gray Scale Table
Envia comando 0xB9, Set default linear gray scale table

15
Phase 1 & 2 period adjustment
Envia comando 0xB1, Set Phase 1 & 2 period adjustment
Envia dado 0xE2, Phase2 = 14DCLKs, Phase1 = 5DCLKs

16
Display enhancement B (VSL & Gray Scale Display Quality)
Envia comando 0xD1, Set display enhancement B
Envia dado 0x82, Normal
Envia dado 0x20, Não está claro na documentação porque tem que enviar este byte

17
Pre-charge voltage
Envia comando 0xBB, Set pre-charge voltage
Envia dado 0x1F ;Pre-charge voltage = 0.60*VCC

18
Second Pre-charge period
Envia comando 0xB6, Set Second Pre-charge period
Envia dado 0x08 ;2nd Pre-charge period = 8DCLKS

19
VCOMH
Envia comando 0xBE, Set VCOMH
Envia dado 0x07, Deselect voltage level = 0.86*VCC

20
Display
Envia comando 0xA6, Set display mode to normal display

21
Partial display
Envia comando 0xA9, Exit partial display mode

22
Apaga o conteúdo da memória do display
Envia comando 0x15, Set column address
Envia dado 0x00, Column address start = 0
Envia dado 0x77, Column address end = 119
Envia comando 0x75, Set row address
Envia dado 0x00, Row address start = 0
Envia dado 0x7F, Row address end = 127
Envia comando 0x5C, RAM memory write
Envia dados: 30720 bytes com valor 0x00

23
Sleep mode
Envia comando 0xAF, Set sleep mode OFF (Display ON), display pronto para ser usado.

Falta ainda descobrir por que o display apaga quando o sinal CS vai para nível baixo, isso faz o display piscar em cada atualização.


Nenhum comentário:

Postar um comentário