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



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