Neste guia vamos montar um projeto que usa a porta paralela do PC para controlar dispositivos externos. Estes podem ser pequenos circuitos eletrônicos, lâmpadas, alarmes de segurança, etc. Montaremos um controle de LEDs para testes com a porta paralela.
A porta paralela utiliza a tecnologia TTL (Transistor-Transistor Logic). Circuitos digitais baseados nesta tecnologia trabalham em nível alto à 5VDC, o que significa que temos um bom nível para emitir e receber sinais pois muitos circuitos operam em TTL.
Devido à seu nome, sabemos que a porta paralela transmite os sinais de modo paralelo e veremos na tabela abaixo a função de cada um dos 25 pinos do conector padrão da porta paralela.
De acordo com a tabela, que representa a porta paralela do PC (parte traseira do gabinete), temos oito pinos de bits de dados - saída do PC - que poderemos usar para controlar dispositivos externos de uma maneira bem prática.
A disposição física dos pinos é como sugere a imagem abaixo:

A contagem dos pinos começa da direita, na linha superior e segue para a esquerda. Depois passa para a linha de baixo já no pino 14.
Já com os conceitos da pinagem, fixados acima, podemos partir para o interfaceamento da porta paralela.
Em sistemas Windows o acesso direto ao hardware não é permitido. A saída mais prática é usar um driver que faça o interfaceamento desta tarefa. Neste artigo usaremos o Direct I/O (www.direct-io.com), um driver com um belo frontend que funciona por 30 dias. Após esta data é necessário comprá-lo por 29 dólares.
A primeira coisa a fazer é identificar o intervalo de E/S onde que a porta paralela utliza em seu PC. Em geral, é de 378h até 37Fh, o que garante para a porta, oito posições para usar como entrada ou saída. Essa identificação pode ser feita pelo Gerenciador de dispositivos, que pode ser acessado clicando com o botão direito em Meu computador e escolhendo Gerenciar.
Procure pelo item Portas (COM & LPT) e acesse as propriedades do item Porta de impressora. Na guia Recursos você verá o intervalo de E/S reservado para a porta em questão, como na imagem abaixo:

Anote este intervalo. O sitema de numeração usado aqui é o hexadecimal. Portanto, podemos dizer que, em decimal, a porta paralela está de 888 até 895.
É hora de baixar o Direct I/O, se ainda não o fez e instalá-lo. Ao terminar a instalação, será criado um ícone com o nome do programa no Painel de Controle. Entre nesta configuração para informar os endereços da porta paralela (no meu caso, 378h - 37Fh).
Use estes endereços para configurar a porta no Direct I/O, através de seu ícone no Painel de Controle. A tela de configuração é bem simples:

Usaremos um conjunto de LEDs para servirem de saída visual dos sinais que enviaremos pela porta. Cada LED deve ser ligado em série a um resistor limitador de corrente antes de ser conectado ao pino do conector DB-25.
Aqui usamos um protoboard para a montagem do circuito dos LEDs mas sem os resistores pois o circuito foi montado só para um teste rápido. O material que utilizamos foi:
1 conector Db-25 fêmea.
1 cabo paralelo (cabo de impressora normal)
8 LEDs vermelhos.
8 resistores de 56 ohms e 1/8W.
9 pedaços de fio.
1 alicate de corte.
1 ferro de solda e um pedaço de solda fina.
O conector DB-25 fêmea será conectado ao PC através do cabo paralelo. Segue uma foto dele:

Cada LED deve ser posto em série com um resistor e ter seu anodo conectado aos pinos 2 a 9 do conector DB-25 fêmea, cada LED em um pino. E depois o cabo paralelo deve ser conectado, com o PC desligado, ao PC. Veja:


Usamos um protoboard e colocamos todos os catodos dos LEDs em comum ligação. Qualquer um dos terra (GND) deve ser ligado aos catodos dos LEDs.
Depois de todos os LEDs conectados, precisamos programar uma interfce. No site do Direct I/O há alguns exemplos de programação para porta paralela. Compilamos um pequeno programa para disponibilizar aqui. Esta é a tela do programa:

A única função do programa é acender os LEDs conectados à porta paralela. O número abaixo dos LEDs representa, em decimal, a seqüência que estamos enviando através dos 8 pinos de dados. Por exemplo, o número 255 significa que enviamos 11111111, ou seja, setamos todos os 8 pinos para 5V.
Porém antes de rodar o programa, é necessário dar permissão para o nosso programa rodar, através do Direct I/O. Como toda configuração neste driver, isto é feito no ícone do Direct I/O no Painel de controle:

Temos que adicionar o programa nesta lista de processos permitidos (Allowed Processes) mas isso não é tudo, ainda falta uma interface que proverá funções para controle da porta. No caso, é a WIN95IO.DLL. Náo se espante com a "idade" desta DLL. Ela só funciona nos Windows atuais por causa do Direct I/O.
O programa foi feito em Visual Basic 6 e o código-fonte está incluso no arquivo RAR disponível para download em nosso repositório de arquivos. A DLL de interface também está disponível para download.
Agora vamos entender o que as declarações do Direct I/O e da WIN95IO.DLL fazem dentro do código-fonte do programa, no VB.
Código-fonte:
Private Sub Form_Load() 'Checagem de permissão do programa para usar o Direct I/O. Dim hDevice As Long hDevice = CreateFile("\\.\DirectIo0", GENERIC_READ Or GENERIC_WRITE, _ FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&) If hDevice = INVALID_HANDLE_VALUE Then MsgBox "Impossível abrir o driver (cód. de erro = " & Err.LastDllError & _ "). Terminando..." End End If
'Inicialização da variável Valor e zeragem dos bits da porta. Valor = 0 txtValor.Text = Valor vbOut 888, 0 End Sub Private Sub L1ac_Click() 'Valor recebe seu valor diminuido de uma unidade. Valor = Valor - 1 'A varável Valor é escrita na porta paralela. vbOut 888, Valor 'A imagem do LED aceso é escondida, enquanto a LED apagado é mostrada. L1ac.Visible = False L1ap.Visible = True 'O valor do campo txtValor é atualizado. txtValor.Text = Valor End Sub Private Sub L1ap_Click() Valor = Valor + 1 vbOut 888, Valor L1ac.Visible = True L1ap.Visible = False txtValor.Text = Valor End Sub
Bons projetos!
|