Manual
do
Maker
.
com
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.
Basicamente, o barramento SPI é composto pelo MISO, MOSI, CLK e CS (se bem que pode ser dispensado, conforme o caso).
O conceito master-slave é o tradicional, mas infelizmente estão adotando uma nova nomenclatura, como citei em outro artigo.
É a entrada de de dados; o que sai do Slave entra no Master. Master é o controlador, Slave é o dispositivo.
É 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.
O que sai do Master, entra no Slave.
Igual, com outro nome.
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.
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.
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.
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!
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.
É 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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.