Informações sobre o curso.
Aquisição de dados
byte-a-byte através da Porta Paralela
Por: Antônio Rogério Messias
Página 1 de 1     Home  Índice  
AQUISIÇÃO DE DADOS BYTE-A-BYTE ATRAVÉS DA PORTA PARALELA
Para uso particular ou educacional.
Copyright(c) 1999-2006 ROGERCOM.COM
Todos os direitos reservados.


       O objetivo do circuito abaixo é enviar, para a Porta Paralela, 8 bits (1 byte) de cada vez usando o modo EPP.
       Para que esse projeto tenha uma boa utilidade usaremos o Conversor Analógico Digital ADC0804, com a intenção de criarmos um voltímetro digital.
       O Conversor Analógico Digital ADC0804 converte uma tensão elétrica entre 0 a 5v, com passos de 0,0196v, em um número de 8 bits.
       Criaremos um software para ler os 8 bits, através da Porta Paralela, no modo EPP convertendo-os em valores decimais, e exibindo-os no visor em escala de tensão elétrica.

Atenção!
Este circuito é um dos mais críticos em termos de proteção à Porta Paralela.
O circuito abaixo só poderá ser usado para medir tensões elétricas contínuas entre 0 à 5v. Não tente, de forma alguma, ultrapassar esse limite, podendo danificar tanto o ADC0804 como a Porta Paralela.
Observe que no circuito abaixo não foi utilizado nenhum componente para proteger a Porta Paralela. Utilize um Buffer ou acopladores óptico.
Também certifique-se de que a Porta Paralela esteja configurada para trabalhar no modo EPP.

       
Circuito ByteAByte

Esquema elétrico do circuito

Lista de materiais

 1 - Circuito integrado - ADC0804;
 1 - R1 - Resistor 10K ohm;
 1 - C1 - Capacitor 150 pF;
 1 - C2 - Capacitor 104 pF;
    
 Geral:
 1 - Fonte de alimentação de 5v;

 1 - Cabo Paralelo;
 Pontas de prova e fios.

 

Código fonte em C/C++

Listagem do programa LPTVolt.cpp
//---------------------------------------------------------------------------
// Objetivo: Medir tensão elétrica entre 0 à 5v através da porta EPP.
// Autor: Antonio Rogério Messias
// E-Mail: rogercom@rogercom.com
// Todos os Direitos Reservados
//---------------------------------------------------------------------------
#include  "vcl.h" 
#include  "stdio.h"
#pragma hdrstop #include "UnitPrincipal.h" #include "Porta.h" #include "ClassBinario.h" #define B0 0x01 #define B1 0x02 #define B2 0x04 #define B3 0x08 #define B4 0x10 #define B5 0x20 #define B6 0x40 #define B7 0x80 #define S3 B3 #define S4 B4 #define S5 B5 #define S6 B6 #define S7 B7 #define BASE 0x378 #define DADOS BASE + 0 #define STATUS BASE + 1 #define CONTROLE BASE + 2 #define EPPDATA BASE + 4 //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TformPrincipal *formPrincipal; TPorta *Porta;  //Declara objeto para controle da porta paralela. TBinario *Binario; //Declara objeto p/ converter um int numa string binária. unsigned char ByteADC; //Variável para armazenar o byte recebido através da porta. int TimeOut; //Váriável para armazenar o tempo de resposta do circuito. //--------------------------------------------------------------------------- __fastcall TformPrincipal::TformPrincipal(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TformPrincipal::TimerAquisicaoTimer(TObject *Sender) { char buf[7]; //Vriável para armazenar uma string de números. //IMPORTANTE: Para ativar um pino no ADC envia um 0 (zero) e para desativar 1 (um). //Inicializa a conversão do ADC enviando um pulso Baixo(0) no pino 14 C1,
  //momentaneamente.
Porta->Envia(CONTROLE,34); //34 0010-0010 aguarda mais ou menos 100 micro segundos. Porta->Envia(CONTROLE,32); //32 0010-0000 habilita a conversão. TimeOut=0; do{ //Loop para verificar o Sinal INTR do ADC0804. TimeOut++; }while(((Porta->Recebe(STATUS) & S3) == S3) && (TimeOut != 256)); //0000-1000. if(TimeOut == 256) { formPrincipal->Caption = "Erro!"; }else { //35 0010-0011 Porta->Envia(CONTROLE,35); //Pino 1 C0 Baixo(0),Habilita a saída(leitura) do ADC. ByteADC = Porta->Recebe(DADOS); //34 0010-0010 Porta->Envia(CONTROLE,34); //Pino 1 C0 Alto(1),Desabilita a saída(leitura) do ADC. sprintf(buf,"%0.2f",ByteADC*0.0196); //Calcula: Byte recebido x 0.0196v. labeVisor->Caption = buf; //Exibe valor. } } //--------------------------------------------------------------------------- void __fastcall TformPrincipal::SpeedButtonSairClick(TObject *Sender) { Porta->Envia(CONTROLE,0); //Desabilita a leitura EPP. Close(); } //--------------------------------------------------------------------------- void __fastcall TformPrincipal::SpeedButtonMiniClick(TObject *Sender) { WindowState = wsMinimized; } //---------------------------------------------------------------------------


Para testar o circuito:

       Com a interface ligada à Porta Paralela e o programa LPTVolt rodando, pegue uma pilha de 1,5 volt, posicione a ponta de prova de cor vermelha no pólo positivo e a ponta de prova preta no pólo negativo, verifique no visor se o valor medido está na faixa de +/- 1,5v. Se inverter as polaridades, o valor medido será sempre o limite de 5v.

Diagrama genérico de funcionamento do projeto.

No diagrama acima, WR, RD e INTR são controles de comunicação entre o computador e o ADC0804.
E, é a entrada analógica de 0 a 5v e S
, é a saída transformada e convertida em binário.

 Download: Download do programa LPTVOLT.EXE


Download LPTVolt

 


Volta à página principal. 
 

Índice dos artigos.
http://www.rogercom.com
© Copyright, 1999-2006 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.