quinta-feira, fevereiro 01, 2024

Display LCD Gráfico Monocromático 128x64 (LCD 12864-06D) - Parte 3

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: