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.
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. |
Display em ação com fonte 32x16 mostrando diferentes níveis de brilho. Abaixo dele está placa com o MSP430G2452. |
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 lockEnvia 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