Manual

do

Maker

.

com

Como controlar N displays SPI no mesmo barramento

Como controlar N displays SPI no mesmo barramento

Eu havia citado em outro artigo que mostraria como controlar 2 displays SPI no mesmo barramento, para tentar deixar mais claro a parte de controle. Mas o que eu pretendia para esse artigo era outra coisa, então vamos ver duas condições diferentes em dois artigos.

Antes de começarmos, permita-me recomendar a aquisição dos displays ST7789 na Curto, uma das melhores lojas de embarcados do Brasil.

Barramento SPI para display

Basicamente, o barramento SPI é composto pelo MISO, MOSI, CLK e CS (se bem que pode ser dispensado, conforme o caso).

MISO ou CIPO

O conceito master-slave é o tradicional, mas infelizmente estão adotando uma nova nomenclatura, como citei em outro artigo.

MISO - Master In Slave Out

É a entrada de de dados; o que sai do Slave entra no Master. Master é o controlador, Slave é o dispositivo.

CIPO - Controller In Peripheral Out

É a mesma mer... digo, a mesma coisa. O que sai do Slave entra no Master. Na biblioteca TFT_eSPI o uso do tradicional MISO-MOSI ainda é atual. Pode ser modificado em algum momento futuro, mas se ver algo diferente, já sabe como lidar com isso.

MOSI ou COPI

MOSI - Master Out Slave In

O que sai do Master, entra no Slave.

COPI - Controller Out Peripheral In

Igual, com outro nome.

CLK - Clock

O clock é utilizado para sincronismo da comunicação no barramento. Essa temporização é abstraída pela biblioteca SPI, que leve mais uma camada da biblioteca que pilota o dispositivo - no caso do exemplo aqui, TFT_eSPI.

CS - Chip Select

Podemos ter tantos periféricos quanto o número de pinos disponíveis para CS. O pino CS é o ativador do dispositivo que será controlado. Cada dispositivo precisa ter seu pino CS.

DC - Data/Command

Se tratando de display, o pino DC é utilizado para determinar o que é um comando para o CI do display e o que é dado a ser exibido. normalmente o DC em nível baixo indica ao dispositivo que serão enviados comandos. Com o nível lógico alto, significa dados a serem exibidos ou armazenados.

No caso de um dispositivo touch (lembrando que display é um dispositivo, touch é outro), ele não tem o que armazenar ou exibir, por isso não tem um pino para DC.

Colocar 2 displays SPI no mesmo barramento

Por fim, será necessário carregar o driver do respectivo display. Um ST7789 e um ILI9341 no mesmo barramento não funcionaram, certamente. Porém, tendo 2 displays do mesmo modelo não teremos problema.

Tendo citado os conceitos, fica fácil notar que tudo o que precisamos fazer é diferenciar o pino CS!

ST7789 com Arduino

Nesse artigo foram conectados 3 ST7789. Esse display é espetacular, já usei ele como display do Raspberry, fiz uma interface em Qt para ele e outras coisas mais. Esse display é sem dúvidas uma excelente aquisição. Mas tem um porém; ele não tem pino CS, de modo que não dá pra fazer exibição de coisas diferentes em cada display. Assim sendo, todos os 3 displays estão no mesmo barramento, mas também recebem o mesmo comando. Para fazer um par de olhos, pode ser suficiente.

Biblioteca TFT_eSPI

É sempre um bom ponto de partida a biblioteca TFT_eSPI. No artigo "Display LCD GC9A01" mostrei a configuração parametrizada da biblioteca. O exemplo foi com ESP32, mas a diferença está exclusivamente na definição dos pinos. Se quiser widgets prontos para montar menus, procure na caixa de Busca rápida no início da página por lvgl. Surpreenda-se com o material. Em nosso canal no youtube tem uma playlist da LVGL. Também recomendo.

Múltiplos displays I2C

Se te interessa o tema, escrevi esse artigo onde coloco 3 displays OLED com o mesmo endereço, mostrando informações diferentes. É no mínimo interessante.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.