segunda-feira, 14 de abril de 2014

Código alternativo para LCD 16x2 - μLiquidCrystal

Retomando os trabalhos com o Netduino vamos a algo prático e simples que se trata de escrever em um LCD 16x2. A maior parte dos artigos ensina como fazer isso com IC que converte de paralelo para serial isso porque muitas vezes o LCD não fica exatamente perto do dispositivo e mais ainda mais fios complicam ainda mais a criação do protótipo.


Fato é que o barramento paralelo utilizado pelo LCD 16x2 não é necessário para escrever os careceteres básicos, coisa de 98% do que se pretende escrever, só são necessárias 7 vias conforme mostrado por Jeroen em seu blog.

A maioria dos displays alfanuméricos estão baseados no controlador HD44780 por uma questão apenas de padronização para aplicações "plug-and-play". Dentro dessa interface paralela boa parte dos 8-bit são referenciados a controle de fluxo de dados, o barramento paralelo de fato são apenas 4-bits que levados a I/O vamos utilizar só 4! Para muitos metódicos isso seria muito e podemos dizer que um barramento serial só de ida utilizaria uma unica I/O, mas convenhamos, não temos Hardware adicional algum o que vale muito a pena.

Como eu me mudei estou sem a minha banca completa com todas as ferramentas que eu tinha antes e muitos dos meus componentes, fazer uma placa é quase impraticável ainda, foi desse ponto que decidi procurar uma maneira mais fácil de escrever as coisas no LCD e encontrei esse artigo no blog do Jeroen que fala sobre a uLiquidCristal uma implementação completa para comunicação do microframework com o LCD's.

Como temos 90% das vezes queremos uma coisa "easy-to-use" nada de escovação de bit's.... Então vamos a aplicação simples e clara.

Meu primeiro passo foi ir atrás da informação sobre o display que eu tinha disponível. Não foi difícil, uima rápida busca no Google consegui encontrar o Datasheet do dito cujo que me informava a pinagem correta.

O projeto não tem um Release para download no Codeplex então, você vai ter que baixar o código fonte e compila-lo, o que não é nenhum problema. Uma vez compilado basta você ir na sua solução e adicionar a *.dll no "References" do seu projeto.


public class Program
{
    public static void Main()
    {
        // create the transfer provider, use direct GPIO provider
        // Initialize the library with the numbers of the interface pins
        // Use wiring shown here http://arduino.cc/en/uploads/Tutorial/lcd_schem.png
        var lcdProvider = new GpioLcdTransferProvider(Pins.GPIO_PIN_D12,    // RS
                                                        Pins.GPIO_PIN_D11,    // ENABLE
                                                        Pins.GPIO_PIN_D5,     // D4
                                                        Pins.GPIO_PIN_D4,     // D5
                                                        Pins.GPIO_PIN_D3,     // D6
                                                        Pins.GPIO_PIN_D2);    // D7
 
        // create the LCD interface
        var lcd = new Lcd(lcdProvider);
 
        // set up the LCD's number of columns and rows:
        lcd.Begin(20, 2);
 
        // print a message to the LCD.
        lcd.Write("Hello world!");
 
        while (true)
        {
            // set the cursor to the first column on the second line
            lcd.SetCursorPosition(0, 1);
 
            // print the number of milliseconds since reset:
            lcd.Write((Utility.GetMachineTime().Ticks / 10000).ToString());
 
            Thread.Sleep(100);
        }
    }
}


Espero mais uma vez ter ajudado, estou voltando pouco a pouco a minhas atividades normais, vou tentar terminar algumas coisas como o medidor de nível de caixa d'água e o sensor de temperatura para depois partir para novos projetos.


Nenhum comentário:

Postar um comentário