Clique aqui para ler esse artigo em PDF.
Boa Idéia - Expert
Controle de Hardware com Delphi
Usando um LCD no Delphi
Neste artigo veremos |
·Breve histórico de acesso ao hardware em diferentes versões do Windows; ·Acesso ao hardware através de funções em Assembly; ·Acesso ao hardware através de dlls como o InpOut32.dll; ·Detalhes sobre LCDs (Arquitetura e Funcionamento); ·Construção de uma classe de controle de LCDs (THD44780); ·Projeto de um programa de Controle de LCDs. |
Qual a finalidade? |
·Controle e manipulação de LCDs do tipo HD44780 pela porta paralela. |
Quais situações utilizam esses recursos? |
·CaseModding, hobbistas de eletrônica e projetos de interfaceamento de dispositivos eletrônicos. |
Resumo do DevMan
Durante a época do MS-DOS e Windows 3.1, 95 e 98 tínhamos como desenvolver facilmente programas para envio de informações ao hardware utilizando diversas linguagens. Uma delas era o próprio Delphi em sua primeira versão. A utilização da porta paralela para interfacear hardware era comum, porém, hoje, nos deparamos com um grande problema: a dificuldade em se enviar comandos para a porta paralela usando programas de modo usuário.
Nesse artigo veremos como fazer uso do Delphi e do componente LPTPort para criar um exemplo que manipula um display de LCD.
Engenheiros, hobbistas e outros interessados em utilizar o computador para manipular hardware externo, durante muito tempo utilizaram o Turbo Pascal e o Delphi 1, pois estas ferramentas possuíam uma combinação de poder e velocidade de compilação, facilitando o interfaceamento de circuitos e outros dispositivos eletrônicos. Esta flexibilidade e poder de programação eram ótimos em DOS, também no Windows 3.1 e Windows 95 com o Delphi 1, que possuía comandos de acesso as portas do PC. Mas a partir do Delphi 2 em diante, juntamente com o Windows NT, a manipulação direta do hardware não é mais permitida e devido a isto o acesso nativo ao hardware pelas linguagens visuais modernas foi retirada.
Neste artigo faremos uma revisão dos métodos mais utilizados para acesso ao hardware através do Delphi, e mostrar todas as formas utilizadas de acesso ao hardware através da evolução do Windows e do Delphi. E para demonstrar as capacidades de controle do Delphi controlaremos um LCD de 16x2 pela porta paralela (Figura 1) utilizando o componente LPTPort.
Nota DevMan
A porta paralela é uma ferramenta de controle simples e barata para construção de dispositivos e projetos. A simplicidade e facilidade de programação fazem da comunicação paralela a mais popular dos hobbistas eletrônicos, ela também é utilizada em robôs controlados por computador, programadores de micro controladores, automação doméstica, etc, por isso sua utilização nesse artigo é indispensável, visto que conseguiremos elaborar um exemplo simples, mas bastante detalhado.
Figura 1. Interfaceamento de módulos LCD
A saga do acesso ao hardware
No final dos anos 80, caso alguém desejasse acender LEDs através do computador teria de ligá-los a um cabo de impressora, e escrever um programa que alterasse o valor armazenado em um endereço específico de memória (no caso o endereço da porta paralela). Em Turbo Pascal era possível utilizar o comando Port a seguir:
Port[Endereço] := Valor;
Este comando funcionava sem dificuldades nas primeiras versões do Windows e Delphi 1, já que o Delphi 1 era 16 bits e até meados de 1995 ainda possuía um comando Port de 8 bits e PortW de 16 bits. Então o Windows ficou “melhor”. Acesso direto a localizações específicas se tornou uma má idéia, e a partir do Delphi 2 o comando foi retirado. Apesar de não ser mais comercializado, o Delphi 1 acompanha versões subseqüentes do Delphi. Em sua primeira versão é possível produzir programas que rodam nas versões 3.1, 95 e 98 do Windows, porém nada de Windows NT 4.0.
A partir da versão 2 em diante, ainda era possível acessar o hardware do computador de forma direta através de instruções em assembly como na Listagem 1.
Listagem 1. Código para escrita e leitura na porta paralela nas versões do Windows 95 e 98
procedure WritePort(Port: word; Value: byte);
asm
push word ptr Port
mov al, Value
pop dx
out dx, al
end;
function ReadPort(Port: word): byte;
asm
mov dx, Port
in al, dx
end;
Nota: Essas funções, WritePort e ReadPort, funcionavam apenas nas versões do Windows 95 e 98.
A título de curiosidade, veja que o cabeçalho das funções é Delphi, mas o corpo em si é todo Assembly. Inclusive diversas funções que utilizamos no dia-a-dia são desenvolvidas em Assembly, como IntToStr, por exemplo.
A era das restrições
Como vimos, escrever programas para controlar a porta paralela no tempo do velho MS-DOS era muito simples, assim como na época do Windows 95/98." [...] continue lendo...