Introdução a Porta Paralela

 

‘Escrevendo’ bits via Delphi

A exigência dos consumidores faz com que os processos automatizados estejam cada vez mais presentes no cotidiano, o que faz a automação de processos, algo de grande valor no mercado.

Tal automatização pode ser baseada em diversos tipos de dispositivos controladores, tais como: Micro-Controladores, Controladores Lógicos Programáveis – CLP, computadores PC dentre outros. A visão mais simplista deste processo envolve sempre algum tipo de dispositivo micro-processado que faz uso de portas de entradas e saídas para comunicação com o meio externo.

Neste contexto, propostas simples como acender uma lâmpada a partir do clique do mouse, envolvem soluções de software onde o processo de desenvolvimento extrapola a confecção de telas e interface com bancos de dados, exigindo um maior conhecimento acerca de tecnologias de acesso a hardware, bases numéricas, conceitos de eletrônica digital, dentre outras.

Com o objetivo de iniciar o leitor nestas tecnologias e prover conceitos básicos relacionados a automação de processos a partir de computadores PC, será abordado nesta série de artigos a mais simples dessas soluções: a porta paralela. No decorrer desta primeira parte, falaremos sobre uma breve introdução do dispositivo e à saída de dados.

 

A porta paralela como base do ensino da automação

 

Os conceitos técnicos apresentados neste artigo são base de uma metodologia mais ampla proposta, desenvolvida e aplicada nos cursos de Engenharia Mecatrônica e Mecânica da Universidade Salvador – UNIFACS, premiada com a Menção Honrosa do Prêmio Top Educacional Professor Mário Palmério 2008, promovido pela Associação Brasileira de Mantenedoras de Ensino Superior – ABMES, conforme descrito em Araujo (2008).

Com o intuito de incentivar a aplicação prática de conceitos teóricos abordados em sala, tornando o curso lúdico e desafiador para o estudante, de forma a aumentar seu interesse e reduzir os índices de evasão, foi implantada a estrutura de um programa interdisciplinar de práticas semestrais aplicadas de forma gradual, orientada e continuada, devidamente adequadas às grades curriculares dos cursos citados. Este programa, codinome ARHTE, prevê que desde o primeiro semestre o aluno realize atividades de desenvolvimento de projetos automatizados, inicialmente integrados com o computador via porta paralela, interagindo de forma empreendedora com o mercado, aumentando a abrangência de seus conhecimentos e culminando ao final do curso com o desenvolvimento de aplicações profissionais e inovadoras.

As possibilidades de projetos são vastas e os exemplos de sucesso já desenvolvidos são inúmeros, no entanto alguns merecem destaque pelo seu reconhecimento prévio.

Dois projetos desenvolvidos por estudantes da UNIFACS ficaram entre os vencedores do Concurso Idéias Inovadoras de 2008, realizado pela Fundação de Amparo à Pesquisa do Estado da Bahia (FAPESB) e Secretaria de Ciência, Tecnologia e Inovação do Estado (SECTI). Na categoria Graduando, conquistou o primeiro lugar e premiação de R$3.000,00, o projeto Sensor de Presença Veicular (SPV), desenvolvido por alunos de Engenharia Mecatrônica e Engenharia Mecânica. Na categoria Inventor Livre, o terceiro lugar e premiação de R$5.000,00, foi para o projeto de uma balança para botijão de GLP, de um estudante de Engenharia Mecatrônica. Ainda houve a participação no concurso de um terceiro grupo formado por estudantes de Engenharia Mecatrônica e Engenharia Elétrica, o grupo ficou entre os finalistas da categoria Graduando, com o projeto Dotbus, um sistema de automação de transporte público envolvendo acessibilidade, que permite aos passageiros selecionar o veículo desejado em um painel eletrônico instalado no ponto de ônibus.

O que há em comum nesses projetos? Todos começaram a partir de uma simples escrita e leitura de dados da porta paralela do PC como forma de interagir e comunicar com o mundo externo, permitindo que o software controle e automatize processos.

Para maiores informações sobre o programa ARHTE bem como acesso completo aos vídeos e detalhamentos dos projetos, acesse www.arhte.unifacs.br ou ainda os portais acadêmicos de alguns professores da universidade: www.igara.com.br/victory/solucoes.html, do professor Victory Fernandes e  www.harpia.eng.br/lp1.html, do professor Rafael Araújo.

 

Tipos de comunicação

 

No âmbito das comunicações de dados através de canais de entrada e saída, existem dois modos de comunicação básicos: comunicação serial e a comunicação paralela.

A comunicação serial, como o próprio nome indica, envia os dados em série. Os dados são enviados através de um único canal de comunicação, por onde as informações passam bit-a-bit.

Na comunicação paralela há mais de um canal de comunicação e dados podem ser enviados simultaneamente nos diversos canais.

 Na Figura 1 é possível visualizar, através de um gráfico de conjuntos, a diferença entre tais tipos de comunicação.

Figura 1: Comunicação Serial e Comunicação Paralela.

Fonte: http://i61.photobucket.com/albums/h61/southafrikanse/comfig12.gif

 

Conforme Tocci (2007), a informação é transmitida em formato binário e, geralmente, é representada por tensões na saída de um circuito transmissor que está conectado à entrada de um circuito receptor.

Para transmitir o texto “oi” de um computador para uma impressora, conectada à porta paralela LPT1, serão enviados de uma só vez, pelos 8 canais de dados da porta paralela, os 8 bits referentes à representação da letra “o” na tabela ASCII (0110-1111). Em seguida são enviados os 8 bits restantes referentes à representação da letra “i” na tabela ASCII (0110-1001). Um total de 16 bits enviados em 2 momentos ou tempos de comunicação.

Para a mesma aplicação desta vez utilizando o canal de dados serial, portas COM ou USB, faz-se necessário que os 16 bits sejam enviados um a um através do único canal de comunicação existente.

 

A porta paralela

 

Fisicamente falando, a porta paralela se apresenta diretamente conectada à placa mãe do computador como um conector de 25 pinos, DB25, mostrado na Figura 2. Devido ao fato de estar diretamente acoplada à placa mãe, surge um grande ‘perigo’ do uso indevido da porta, para o qual o leitor deve estar sempre atento, de forma a evitar danos.


Figura 2: Conector Macho DB25.

Fonte: http://highlyliquid.com/blog/up/db-25-kit.jpg

 

Todos os aspectos da porta paralela do computador pessoal são padronizados pela norma IEEE 1248, incluindo conectores, pinagem, níveis de tensão etc.

A porta paralela possui 5 canais de entrada (pinos 10 a 13, 15) e 12 de saída de dados (pinos 1 a 9, 14, 16 e 17). Além desses canais de entrada e saída, existem mais 8 canais para aterramento (pinos 18 a 25). Assim totalizam-se 25 canais apresentados, fisicamente, por pinos (macho) e encaixes (fêmea).

Os canais de entrada e saída são divididos em endereços de memória, identificados por números na base hexadecimal, e codinomes (portas), como pode ser visto na Figura 3.

 


Figura 3: Porta paralela e seus endereços de memória.

Fonte: http://i61.photobucket.com/albums/h61/southafrikanse/pinout.gif (editada)

 

Nas portas de Dados e de Controle concentram-se os 12 canais de saída de dados. Já na porta de Status, temos os 5 canais de entrada. Neste artigo são abordados os canais de saída, utilizados para escrever dados ou enviar informações para o meio externo. Os canais de entrada serão abordados na próxima edição.

As informações em um computador são interpretadas em níveis lógicos digitais ou, popularmente, os zeros e uns. Esses níveis lógicos são pulsos com magnitude de corrente e de diferença de potencial (ddp). No caso da porta paralela, são padronizados respeitando o padrão TTL (Transistor-Transistor-Logic) da eletrônica com 5 VDC (Volts Corrente Contínua) para representar bits com valor 1 (um), e 0 VDC para representar bits com valor 0 (zero).

As correntes geradas por um sinal da porta paralela são suficientes apenas para acionar LED’s, que são cargas que consomem correntes da ordem de miliampéres. Dessa forma, caso se queira controlar dispositivos mais robustos, é necessário o uso de circuitos auxiliares que serão abordados em seguida.

 

Acesso à porta paralela e o uso inpout.dll

 

Recentemente desenvolver um software para enviar bits para os dispositivos de entrada e saída do computador tornou-se um pouco mais complicado, devido ao bloqueio do acesso direto aos componentes de hardware dos computadores promovido pelos sistemas operacionais mais novos, a exemplo do Windows NT, XP e Vista.

Um dos dispositivos de hardware ‘bloqueados’ pelos sistemas operacionais, por motivos de segurança, foi a porta paralela.

Como forma de abstrair a complexidade de acesso à porta paralela em tais sistemas operacionais e simplificar o acesso a tais dispositivos é possível utilizar uma Dynamic Link Library (dll) disponível gratuitamente na internet: a inpout32.dll.

Na linguagem Delphi, em poucas linhas é possível disponibilizar as funções escritas na dll para a sua aplicação. A seguir é apresentado o código de declaração da função de escrita na porta paralela contida na dll:

procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32';

 

Os parâmetros recebidos pela função outportb são, respectivamente, o endereço da porta para o qual a informação deve ser enviada e a informação a ser enviada propriamente dita.

Como se pode verificar, o valor EndPorta é um valor do tipo Integer. Uma variável desse tipo pode receber valores em diversas bases numéricas, assim é possível o envio do valor da porta em qualquer base numérica. Vejamos um exemplo. Suponhamos que desejamos acessar a porta de controle da porta paralela cujo endereço é 37A16. Assim, utilizando o Delphi, podemos atribuir tal valor de duas formas equivalentes, passando o número na sua representação Decimal ou Hexadecimal, conforme mostrado a seguir.


EndPorta := 890;
EndPorta := $37A;

 

Assim como o parâmetro EndPorta, o parâmetro Valor também pode receber a informação em qualquer base numérica, tendo como padrão a base decimal.

O código apresentado a seguir executa a chamada à função de envio de dados, transmitindo para os pinos de Dados da porta paralela o número 1010 na base decimal, cuja representação equivalente na base binária representada com 8 bits é 0000-10102.


Outoportb($378, 10);

 

Para identificar quais pinos da porta paralela serão ‘ativados’ e ‘desativados’ após a execução deste comando, é preciso analisar a representação binária dos valores enviados. Cada algarismo do número binário representa um pino da porta paralela, como pode ser visto na Figura 4.

 

Figura 4: relação entre casas binárias e pinos da porta paralela.

Fonte: http://i61.photobucket.com/albums/h61/southafrikanse/pinout.gif (editada)
 

Assim, para a porta de Dados, o algarismo mais significativo representa o pino 9 e o menos significativo o pino 2.

Neste exemplo, após a transmissão do valor 1010 para a porta de dados, os pinos 5 e 3 da porta paralela ficariam ‘ativados’ com nível lógico alto de 5VDC e os demais ‘desativados’, com nível lógico baixo 0 VDC.

 

Escrevendo na porta paralela

 

Para exemplificar o processo de escrita na porta paralela de forma abrangente e simples, este artigo propõe o seguinte módulo de escrita na porta paralela, apresentado na Figura 5.

 

Figura 5: Laiute do programa de envio de bits pela porta paralela.

 

Fonte: Elaboração própria.

 

No RadioGroup é feita a escolha do endereço da porta para a qual o usuário deseja mandar a informação. A depender de qual opção esteja marcada, um valor será atribuído ao parâmetro EndPorta da função OutPortB.

No EditBox, o usuário digita o valor numérico inteiro que deseja enviar para a porta paralela.

Como já foi visto, a função outportb pode receber o valor a ser enviado em qualquer base numérica. Então, com o objetivo de tornar a interface com o usuário mais ‘amigável’, o valor será digitado na base decimal. Esse valor digitado será atribuído ao parâmetro Valor da função OutPortB.

Ao clicar no botão ‘Enviar!’, a função outportb será chamada com os parâmetros atribuidos pelo usuário. A seguir temos a rotina atribuída ao evento de OnClick do botão Enviar:


procedure TForm1.Button1Click(Sender: TObject);
var
  porta, valor: integer;
begin
try
 begin
  if radiogroup1.ItemIndex = 0 then
    begin
      Label2.Caption := InttoByteSTR(strtoint(edit1.Text), 8);
      porta := $378;
      valor := strtoint(Edit1.Text);
    end
  else if Radiogroup1.ItemIndex = 1 then
    begin
      Label3.Caption := InttoByteSTR(strtoint(edit1.Text), 8);
      porta := $37A;
      valor := strtoint(Edit1.Text);
    end
  else
    begin
      showmessage('Escolha para qual porta deseja mandar um valor antes de ligar o programa!');
      exit;
    end;
  outportb(porta, valor);
 end;
except
  on E: EConvertError do
    begin
      Showmessage('Esse texto não corresponde a um valor inteiro válido. Digite novo valor!');
    end;
 end;
end;

 

    
     Para que possamos então visualizar quais bits estão ligados ou desligados, precisamos implementar uma função de conversão decimal-binário.

Uma maneira rápida e prática de realizar tal conversão é fazer sucessivas divisões por dois (base do sistema binário) do número decimal a que se deseja representar em binário. Para maiores detalhes desse método leia a apostila sobre conversões de bases numéricas do sistema EAD do ICEA (Instituto de Controle do Espaço Aéreo) na seguinte url: http://www.icea.gov.br/ead/anexo/21201.htm

Assim fica fácil construir uma rotina que realize essa conversão. Seria ela:


function  InttoByteSTR(Value, Tam: integer): String;
var
  x: integer;
  temp: string;
begin
  temp := '';
  setlength(result, 8);

  while (value >= 1 ) do
    begin
      temp := temp + inttostr(value mod 2);
      value := value div 2;
    end;

  if length(temp) > Tam then
    begin
      ON_OFF; {rotina que trata de proprieties dos panels, radiogroups e editboxes}
      showmessage(Numero tem mais que a quantidade de bits estipulada');
    end
  else
    begin
      for x:= 1 to 8 do
        begin
          if (length(temp) < x) then
            result[9 - x] := '0'
          else
            result[9 - x] := temp[x];
        end;
    end;
end;

 

Aplicações de controle via Porta Paralela

 

Uma das aplicações mais simples de controle de dispositivos via porta paralela, é acender e apagar um LED (Light-emitting diode). Como foi discutido anteriormente, as correntes e as tensões disponibilizadas pela porta paralela são de baixa magnitude. Como o led é um dispositivo que não demanda elevadas correntes, este pode ser controlado diretamente pela porta paralela, sem o auxilio de amplificadores de sinal. Utiliza-se apenas um resistor da ordem de 470ohm para garantir que a corrente trabalhe na faixa de tolerância do led, algo em torno de 10 a 20 mA.

Assim, com o aplicativo proposto anteriormente, é possível controlar o acionamento de um led, através de um circuito bastante simples mostrado na Figura 6, a seguir.

 


Figura 6: Circuito de acionamento de LED via porta paralela.

Fonte: Elaboração própria.

 

Um exemplo de testes de funcionamento do circuito proposto na Figura 5 pode ser visto no vídeo postado no YouTube de cursos ministrados na UNIFACS, disponível no link http://www.youtube.com/watch?v=jp1OHKlNyTk

Existem dispositivos que necessitam de uma corrente e/ou tensão mais elevadas. Para que seus estados de ligado e desligado sejam comutados, bem como pode ser necessário comutar tensões alternadas para o caso de acionamento de lâmpadas e diversos outros dispositivos, para esses casos, utilizam-se transistores, drivers de potência e relés.

Para exemplificar o caso descrito anteriormente, mostraremos um circuito de comutação, através de um relé controlado pela porta paralela, de uma tensão alternada em uma lâmpada.
O relé é um dispositivo composto por uma bobina e uma chave de três contatos, como pode ser visto na Figura 7.

 


Figura 7: Estrutura do relé.

Fonte: http://www.jag-lovers.org/lumps/tech/basics/spst_relay.gif

 

Ao induzir uma corrente na bobina, um campo magnético é gerado, forçando o acionamento da chave. Devido às questões da estrutura física do relé, a corrente que possibilita o acionamento da chave é de magnitude elevada, não sendo compatível com a corrente disponibilizada pela porta paralela. Então é possível utilizar um circuito integrado (CI) que funcionará como um gatilho, amplificando o sinal original, este CI é o ULN2003 ou ULN2803. Dessa forma o circuito descrito apresenta-se como na Figura 8.

 


Figura 8: Circuito para acionar lâmpada.

Fonte: Elaboração própria.

 

Ao enviar um bit de valor 1 (um) para o pino 2 da porta paralela, o mesmo será ativado, fazendo com que o ULN libere uma tensão de 12VDC para acionamento do relé, que por sua vez fechará o circuito da lâmpada com a rede elétrica de 110 ou 220VAC, permitindo desta forma que você ligue e desligue uma lâmpada a partir do clique do mouse.

Agora você já sabe como controlar uma lâmpada através do seu software! O acionamento de sistema digitais baseados em transistores e relés é o princípio básico de qualquer processo de automação!

Conclusão

 

Neste artigo apresentamos os conceitos básicos relacionados à automação de processos a partir de computadores PC, utilizando acionamento de bits da porta paralela para controle de dispositivos externos através de aplicativos desenvolvidos em Delphi.

A aplicação desta metodologia no ensino da automação tem demonstrado excelentes resultados.

Na experiência da UNIFACS, há a indicação de que os alunos ingressam em semestres posteriores amadurecidos, com interesses profissionais, resultado das pesquisas e aplicação de conteúdos de eletrônica, programação, mecânica, materiais e automação realizados previamente. Os professores relatam que as aulas formais tornaram-se mais interessantes e dinâmicas, pois a responsabilidade de trazer conteúdos do mercado de trabalho deixa de ser atribuição exclusiva do professor da disciplina, que passa a compartilhar essa responsabilidade com o aluno.

Os resultados obtidos indicam uma modificação nas abordagens didáticas e comportamentais de discentes e docentes nos cursos de engenharia. Associado aos conteúdos técnicos, a proposta tem se mostrado eficaz na formação do engenheiro para o século XXI, com o processo de ensino-aprendizagem prazeroso, efetivo e de qualidade.

No próximo artigo daremos continuidade no estudo dos recursos da porta paralela, abordando a leitura de informações a partir de sensores acoplados à mesma, tornando possível que seu software adquira percepção do ambiente.

 

Referências

 

TOCCI, Ronal J.. Sistemas Digitais – Principios e Aplicações. 2007. Editora Pearson. 10a Edição. São Paulo - SP.

ARAUJO, Rafael; Fleming, Paulo Victor; Amorin, Targino; Fernandes, Victory; Marques Ederval. Ensino Interdisciplinar nas Engenharia Mecânica e Mecatrônica. Prêmio Top Educacional Professor Mário Palmério 2008. Salvador – BA.

MESSIAS, Antonio Rogério. Rogercom: O maior conteúdo brasileiro sobre porta paralela. Disponível em: <http://www.rogercom.com/>.

ARAÚJO, Rafael Gonçalves Bezerra de. Rafael Araújo: ENGENHARIA. Disponível em: <http://www.harpia.eng.br/>.

FERNANDES, Victory Santos. Victory Fernandes: Engenharia e Software. Disponível em: <http://www.igara.com.br/victory>.


Sobre o Autor

Juliana Andrade Carvalho é graduanda em Engenharia Mecatrônica pela UNIFACS e estagiária da TKS. Pode ser contatada em juliana@unifacs.edu.br.
Rafael Araujo
é Coordenador do Curso de Engenharia Mecatrônica da UNIFACS, Engenheiro com Mestrado em Regulação da Indústria de Energia. Pode ser contatado em rafael.araujo@unifacs.br, ou através do site www.harpia.eng.br.
Victory Fernandes é Professor do Departamento de Engenharia da UNIFACS, Engenheiro Mestrando em Redes de Computadores, e desenvolvedor sócio da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em victory@igara.com.br, ou através dos sites www.igara.com.brwww.igara.com.br/victory.

E-mail: juliana@unifacs.edu.br / rafael.araujo@unifacs.br / victory@igara.com.br

The Club - O Maior Clube de programadores do Brasil