quarta-feira, 7 de dezembro de 2016

Display OLED colorido com o controlador SSD1331.

        Finalmente chegou mais um lote de displays OLED que havia pedido. Dentre eles está um colorido de resolução 96x64 pixels com controlador Solomon Systech SSD1331 e interface SPI.
        Este display 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 SSD1331 possui 3 sub-pixels retangulares (vermelho, verde e azul), modulados em 64 ou 32 níveis de intensidade. Por padrão, ele usa 16 bits de cor (5bits para o vermelho, 6 bits para o verde e 5bits para o azul ou R4~R0, G5~G0 e B4~B0) devendo ser transmitidos 2 bytes para acionar cada pixel. Como na minha aplicação não precisa uma fidelidade de cor tão precisa, optei por usar o formato 8 bits, ou seja, será enviado um byte por pixel no formato [Red2, Red1, Red0, Green2, Green1, Green0, Blue1, Blue0]. Considerando a resolução, usei uma fonte de 16x12, tendo assim 4 linhas de 8 caracteres, formando assim um display 8x4.

Display com o SSD1331 (esquerda) ao lado do monocromático com o SSD1306. Note que ambos tem a mesma pinagem.

Vista inferior. Assim como nos outros dislays, retirei o regulador de 3,3V (U2), contornando-o com um resistor de 0R. Note que o display colorido usa um regulador step-up externo e o outro usa o charge-pump interno.
Display em ação com um firmware de teste na placa com o MSP430G2452.

Inicialização do SSD1331:
       Esta é a sequência de inicialização que usei para este display, os parâmetros podem variar portanto use por conta e risco.



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

2
Command lock
Comando 0xFD ;Comando para travar/destravar envio de comandos.
0x12 ;para destravar o envio de comandos

3
Display
Comando 0xAE ;Display desligado (modo sleep)

4
Remapeamento & número de bits por cor
Comando 0xA0 ;Comando para ajustar o rempeamento e definir o número de bits por cor
0x23 ;8bit/pixel, COM split enabled, Scan COM0~COM(n-1), Left-right swapping disabled, RGB order, RAM column map inverted, Vertical address increment

5
Display start line
Comando 0xA1 ;Define start line
0x00 ;start line=0

6
Display vertical offset
Comando 0xA2 ;Define vertical offset
0x00 ;vertical offset=0

7
Modo do Display
Comando 0xA4 ;Display ajustado para modo normal

8
Multiplex ratio
Comando 0xA8 ;Define multiplex ratio
0x3F ;1/64 duty

9
VP Supply
Comando 0xAD ;Seleciona VCC
0x8E ;Seleciona VCC externo, usa o regulador step-up do módulo.

10
Modo Power save
Comando 0xB0 ;Define modo power save
0x0B ;Modo Power save desabilitado

11
Ajuste do período da fase 1 & 2
Comando 0xB1 ;Set phase 1 & 2 period adjustment
0x31 ;Fase 2 = 3DCLK, Fase 1= 1DCLK

12
Divisor do Clock e frequencia do oscilador
Comando 0xB3 ;Define divisor do Clock e frequência do oscilador
0xF0 ;Fosc = ~890kHz, divisão = 1

13
Second Pre-charge
Comando 0x8A ;Define Second Pre-charge para vermelho
0x64
Comando 0x8B ;Define Second Pre-charge para verde
0x78
Comando 0x8C ;Define Second Pre-charge para azul
0x64

14
Nivel Pre-charge
Comando 0xBB ;Define nível pre-charge
0x3A ;pre-charge=0.475xVCC

15
VCOMH
Comando 0xBE ;Set VCOMH
0x3E ;VCOMH=0.83Vref

16
Master current control
Comando 0x87 ;Define master current
0x06 ;Master current=9/16 (160uA)

17
Contraste
Comando 0x81 ;Contraste cor 'A'
0x91
Comando 0x82 ;Contraste cor 'B'
0x50
Comando 0x83 ;Contraste cor 'C'
0x7D

18
Coluna
Comando 0x15 ;Define coluna inicial e final
0x00 ;coluna inicial = 0
0x5F ;coluna final = 95

19
Linha
Comando 0x75 ;Define linha inicial e final
0x00 ;coluna inicial = 0
0x3F ;coluna final = 63

20
Limpa a RAM
Envia 6144 bytes de valor 0x00 para limpar a memória do display

21
Display
Comando 0xAC ;Display ON, display pronto para o uso.






















Nenhum comentário:

Postar um comentário