Olá Pessoal,

Hoje estou postando uma pequena aplicação do do Netduino acionando um display LCD. Pensei em fazer uma biblioteca para fazer acesso ao LCD, mas pesquisando na comunidade do próprio Netduino, encontrei aqui uma classe prontinha para essa aplicação e como não quero ficar reinventando a roda usei a mesma para o teste.

A classe Lcd implementada no exemplo, possui diversos métodos que podem ser usados para controle do LCD e é baseada no padrão de display mais comum(HD44780). Uma das classes mais importante é o mapeamento da pinagem do LCD x Pinos saída do Netduino que está descrita abaixo:

 

private static class LcdPins
{
public const Cpu.Pin DB0 = Pins.GPIO_NONE;
public const Cpu.Pin DB1 = Pins.GPIO_NONE;
public const Cpu.Pin DB2 = Pins.GPIO_NONE;
public const Cpu.Pin DB3 = Pins.GPIO_NONE;
public const Cpu.Pin DB4 = Pins.GPIO_PIN_D3;
public const Cpu.Pin DB5 = Pins.GPIO_PIN_D4;
public const Cpu.Pin DB6 = Pins.GPIO_PIN_D5;
public const Cpu.Pin DB7 = Pins.GPIO_PIN_D6;

public const Cpu.Pin E = Pins.GPIO_PIN_D2;
public const Cpu.Pin RW = Pins.GPIO_PIN_D1;
public const Cpu.Pin RS = Pins.GPIO_PIN_D0;
}

 

Com essas definições já sabemos como ficará a montagem do circuito, utilizando as saídas digitais D0 a D2 para controle e D3 a D6 para dados. Ainda fica faltando ligar alguns pinos do LCD, que são o pino 1 --> GND, pino 2 --> VCC, pino 3 -->VO(potenciômetro de 10K),  e pinos 15 e 16(Backlight).

 

O código para escrever no display ficou dessa forma:

 

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using NETDUINO.LCD;

namespace LCDNetduino
{
public class Program
{
private static Lcd lcd;

public static void Main()
{
lcd = new Lcd(false) { IsCursorBlinkOn = false, ShowCursor = false, IsDisplayOn = false };
lcd.WriteString("TESTE NETDUINO COM LCD.");
lcd.IsDisplayOn = true;

while (true)
{
lock (lcd)
{
lcd.ShiftDisplay();
}
Thread.Sleep(500);
}
}
}
}

 

 

Utilizei também o exemplo do blog citado onde o push botton do netduino serve como "clear". O resultado segue abaixo:

 

 

É isso ai pessoal, seguem abaixo alguns links que pesquisei pra fazer o exemplo:

http://netmf-source.blogspot.com/2011/02/hello-and-character-lcd.ht...

http://en.wikipedia.org/wiki/HD44780_Character_LCD

http://arduino.cc/en/Tutorial/LiquidCrystalDisplay

http://forums.netduino.com/

 

Próximo passo: Utilzar um módulo Xbee para transmitir/receber dados com Netduíno...Em breve postarei os resultados..

 

abraços

 

 

 

 

 

Exibições: 394

Respostas a este tópico

Alexandre,

 

Parece muito interessante a implementação que você utilizou ...

 

A maioria dos que escrevem bibliotecas para acesso a LCDs padrão HD44XXX não usa o pino R/W .. por que será .. eu mesmo já fiz uma lib para C e Renesas que não usa o pino R/W ... 

 

Vou começar a estudar esta lib e ver como posso portá-la para o FEZ Domino!

 

Parabéns pelo POST!

Valeu Xará,

Então, creio que  é pelo fato de maioria das aplicações apenas escrever no LCD e não se preocupar em ler. Realmente eu nunca utilizei a função de leitura..mas é interessante manter na biblioteca essa função deixando ela pronta para qualquer tipo de uso.

Acho que será bem fácil por a biblioteca para o FEZ Domino, afinal é tudo NETMF. Talvez alguns pequenos ajustes no mapeamento dos pinos... 

 

abraços

Alexandre Pereira (PACMAN) disse:

Alexandre,

 

Parece muito interessante a implementação que você utilizou ...

 

A maioria dos que escrevem bibliotecas para acesso a LCDs padrão HD44XXX não usa o pino R/W .. por que será .. eu mesmo já fiz uma lib para C e Renesas que não usa o pino R/W ... 

 

Vou começar a estudar esta lib e ver como posso portá-la para o FEZ Domino!

 

Parabéns pelo POST!

Xará ...

 

Na verdade ter o feedback do pino de R/W é muito bom pois otimizamos os tempos de comunicação com o LCD ... só por isso já é uma senhora vantagem.

Dei uma olhada e é bem simples mesmo ... eu só vou fazer uma coisa diferente ...

Implementar uma parte da memória como VRAM ... e ele fica gerando por uma thread a atualização automática ...

Assim é só escrever na posição X,Y da VRAM que o mesmo será refletido no LCD ...

Aí mapeamos da esquerda para direita ... para inclusive aqueles LCD enormes antes dos LCDs gráficos ... sim .. eu já vi LCD de 80x25 caracteres ... um show ... e bem caro também !...

 

[]s

Pacman!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço