Nesta terceira parte vamos usar um dos fontes de caracteres que está na ROM do display. Como vimos na parte 1, esta ROM tem uma interface SPI. Vamos ligar na mesma porta SPI que o controlador do display, mas com o sinal de seleção em um pino separado:
O acesso à ROM é simples: enviamos o comando "Read Data Bytes" seguido de três bytes de endereço (o código abaixo é para o ambiente Arduino):
void ROM_read (uint32_t addr, byte *dest, int size) { // Start transaction LCD_SPI.beginTransaction(SPI_CONFIG_ROM); digitalWrite(pinROM_CS, LOW); // Send read data command and address LCD_SPI.transfer(ROM_READ_DATA); LCD_SPI.transfer(addr << 16); LCD_SPI.transfer((addr << 8) & 0xFF); LCD_SPI.transfer(addr & 0xFF); // Read the bytes for (int i = 0; i < size; i++) { dest[i] = LCD_SPI.transfer(0); } // End transaction digitalWrite(pinROM_CS, HIGH); LCD_SPI.endTransaction(); }
Vamos usar o fonte ASCII 7x8, onde todos os caracteres ocupam oito bytes na ROM (o último byte é sempre zero, é o espaçamento entre caracteres) e o primeiro caracter disponível é o espaço (0x20). O cálculo do endereço inicial para o caracter c é
0x66C0 + 8*(c - 0x20)
Coloquei no github (https://github.com/dquadros/LCD12864) dois exemplos completos:
FontDump lista um ou mais caracteres na ROM. Fiz este programa para testar o acesso. Uma descoberta importante é que na ROM o bit menos significativo corresponde ao ponto na linha mais alta. Esta convenção é o contrário do usado no display na orientação que eu adotei.
UseRomFont é uma demonstração simples de uso do fonte para escrita de caracter. Para cada caracter a escrever, a sua definição é lida da ROM, os bits são invertidos de posição e depois a definição é escrita na memória do display.
Nenhum comentário:
Postar um comentário