quarta-feira, 20 de agosto de 2014

Como conectar um LCD 16x2 no Raspberry Pi

LCD 16x2 no Raspberry Pi

Sabemos que alguns projetos não necessitam de telas grandes, coloridas, mas LCDs comuns de baixo custo como os famosos 16x2. A ligação desse tipo de lcd é um pouco mais trabalhosa e necessita de 6 GPIOs do Raspberry Pi.

O LCD que tenho foi comprado na Dx, mas diversos modelos similares são facilmente encontrados até em lojas nacionais, entretanto compre LCDs com controlador HD44780 ou compatíveis pois o suporte a esse tipo já existe para Raspberry Pi.

Algo a se observar também, é que existem LCDs sem pinos ( meu caso ) e com pinos soldados na placa, aconselho a compra de LCDs com pinos, caso contrário será preciso soldar ao menos 12 fios.

Como ligar o LCD 16x2 ao Raspberry Pi


Iremos utilizar o LCD no modo 4 bits que necessita de menos fios, além de conectá-lo à 5v. Como vamos só mandar dados ao LCD, colocaremos ele somente em modo de escrita, ligando o pino RW ao GND, o que impedirá que ele envie pulsos de 5v para o Raspberry Pi cujo GPIO trabalha em 3.3v.

LCD 16x2
LCD 16x2

Os pinos de alimentação são VSS(GND) e VDD(VCC). Do lado direito marcados como A e K temos os pinos de alimentação do backlight. No caso do nosso LCD, o backlight é composto por um led, que irá precisar de um resistor de 1k ohm para limitar a corrente. O pino V0 serve para controle de contraste, normalmente utilizam um trimpot ou potenciômetro para esse fim, entretanto iremos utilizar somente um resistor de 2.2k ohm que irá regular de modo apropriado.

Os demais pinos RS,E,D4,D5,D5,D7 serão ligados ao Raspberry Pi da seguinte maneira:

RS = GPIO17
E   = GPIO27
D4 = GPIO22
D5 = GPIO10
D6 = GPIO9
D7 = GPIO11

Eles não precisam estar obrigatoriamente nesses GPIOs, porém será preciso alterar o software caso queira utilizar outros pinos.

Segue o diagrama:

Diagrama de ligação do LCD 16x2 com o Raspberry Pi
Diagrama de ligação do LCD 16x2 com o Raspberry Pi

Software e programação do LCD 16x2 no Raspberry Pi


Na parte de software iremos utilizar novamente a wiringPi pois ela já contém o suporte necessário para comunicação com o controlador HD44780. Caso ainda não a tenha instalado, faça o seguinte:

Baixe a lib utilizando o GIT:

$ git clone git://git.drogon.net/wiringPi

Caso não tenha o git instalado:  

$ sudo apt-get install git-core

Entre no diretório e rode como root ou sudo:

$ ./build

Esse comando irá compilar e instalar automaticamente a biblioteca.




Copie o código e compile com:

$ gcc lcd.c -lwiringPi -lwiringPiDev -o lcd

O código de exemplo irá escrever no lcd o primeiro argumento que lhe for passado.

# ./lcd "Raspberry Pi"

 Ligação do LCD 16x2 com o Raspberry Pi
Ligação do LCD 16x2 com o Raspberry Pi

A função lcdInit() é onde passamos os parâmetros de configuração.

int  lcdInit (int rows, int cols, int bits, int rs, int strb, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;

lcdInit (2, 16, 4, 0, 2, 3, 12, 13, 14, 0,0,0,0);

Rows e cols são referentes a linhas e colunas, bits é o modo com que será feita a comunicação, em nosso caso 4 bits, rs e strb são os pinos referentes aos GPIOs em que estão conectados os fios de RS e E, os demais referentes aos Ds. Quando em modo 4 bits os 4 ultimos argumentos são ignorados, portanto devemos passar os valores dos pinos D4,D5,D6,D7 nos argumentos d0,d1,d2,d3. Lembrando que os números referentes à GPIOs dentro da biblioteca wiringPi são diferentes, podem ser conferidos verificando a man page com man gpio.

A biblioteca tem algumas outras funções básicas para lidar com esse LCD, como lcdHome para voltar o cursor ao início, lcdPosition para posicionar o cursor, lcdCursor que torna o cursor visível entre outras que podem ser conferidas em /usr/local/include/lcd.h .

Um lcd simples, mas de baixo custo e que pode ser utilizado para diversos projetos.

4 comentários:

  1. A utilização de resistores para este fim é obrigatória ou apenas para este modelo específico de monitor?

    ResponderExcluir
    Respostas
    1. É obrigatório, entretanto parece que já vi um modelo vendido pela adafruit que já contém o resistor do backlight( e somente esse ), mas de modo geral isso não está incluso, se estiver vai estar especificado.

      Excluir
  2. É possível de usar tal procedimento em uma placa CubieTruck?
    Também gostaria de saber, quais as informações que são possíveis de serem exibidas no LCD. :D

    ResponderExcluir
    Respostas
    1. Olá, é possível sim, mas o software é diferente, a wiringpi é feita só para raspberry pi. Quanto as informações, quaisquer que você queira desde que não ultrapasse o limite de caracteres do lcd, existe ainda como manipular o lcd de outras formas sem ser enviar caracteres. ( mas pelo que me recordo a wiringpi já não dá suporte a isso, teria que programar ).

      Excluir