terça-feira, 27 de setembro de 2016

Displays OLED 64x32 com controlador SSD1306

Finalmente chegaram os displays OLED 64x32 brancos que havia pedido no Aliexpress. São incrivelmente pequenos e, junto a placa com os componentes auxiliares, são um pouco maior que um DIP de 8 pinos.

Display OLED ao lado de dois PIC de 8 pinos. Veja como é pequeno.
Face inferior. Retirei o regulador de tensão contornando com um resistor de 1R e retirei os resistores de pull-up de 4k7 da interface I²C.
Display em ação com uma placa controlada por um PIC16F1503.
Placa com o MSP430F2230. Menor placa de desenvolvimento que você já viu!

Estes displays usam o famoso e bem documentado controlador SSD1306, porém o mapeamento dos pixels é diferente e me custou algumas horas para descobrir como era. Normalmente o SSD1306 é usado com displays com resolução de 128x64 usando toda sua memória gráfica de 1024 bytes, mas quando o OLED tem menos pixels (64x32 neste caso) o fabricante do OLED define como os pixels serão ligados ao controlador.

Mapa do display para a resolução normalmente usada de 128x64.
Mapa para este display. Note que por ter menos pixels, somente as páginas 4 a 7 e colunas 32 a 95 são mostradas. Isso é definido pelo fabricante do OLED, portanto podendo variar.
Há vários métodos para escrever um caractere nestes displays, o que uso consiste definir na inicialização o sentido de escrita de cima para baixo e da esquerda para a direita. Antes de enviar os bytes contendo os pixels do caractere, envio os comandos de início e final das páginas e colunas, formando uma pequena janela do tamanho exato do caractere (neste caso 2 páginas por 8 colunas, ou 16x8 pixels). Em seguida, aponto para o endereço correspondente do caractere na tabela na memória do microcontrolador e envio os bytes correspondentes.
Exemplo mostrando a janela bem como a ordem de escrita.








Nenhum comentário:

Postar um comentário