Informações sobre o curso.
Aquisição Nibble-a-Nibble
Através da Porta Paralela
Por: Antônio Rogério Messias
Página 1 de 1     Home  Índice  
AQUISIÇÃO DE DADOS NIBBLE-A-NIBBLE 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, 4 bits (1 Nibble) de cada vez, usando o modo padrão.
       Para que esse projeto tenha uma boa utilidade, usaremos o Conversor Analógico Digital ADC0804 e o Multiplexador 74LS157 com a intenção de criarmos um medidor de luminosidade 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. Como o modo padrão da Porta Paralela só permite receber 5 bits por vez, nesse caso, dividiremos os 8 bits em duas partes conhecidas como Nibble, e usaremos o circuito integrado Multiplexador 74LS157 com esse objetivo.

    

Circuito NibbleANibble

Esquema elétrico do circuito

 

Lista de materiais


 1 - CI1 Conversor ADC - ADC0804;
 
 1 - CI2 Multiplexador - 74LS157;
 1 - FT1 Fototransistor - L14G1;
 1 - R1 - Resistor 10K ohm;
 8 - (R2-R9) Resistores 470 ohm;
 8 - (L1-L8) LEDs vermelhos;
 1 - C1 - Capacitor 150 pF;
 1 - C2 - Capacitor µ1k F;
    
 Geral:
 1 - Fonte de alimentação de 5v;
  Fios.


Funcionamento do circuito:

       Os dados processados no ADC0804 são disponibilizados nos pinos (18, 17, 16, 15, 14, 13, 12 e 11) formando 8 bits. Essas saídas de 8 bits no entanto, serão as entradas para o Multiplexador 74LS157, que tem 8 bits de entradas. Por sua vez, o 74LS157 só poderá disponibilizar em suas saídas 4 bits (1 nibble) por vez nos pinos 4, 7, 9 e 12 que estão conectados aos pinos 11, 10, 12 e 13 da Porta Paralela. Os 8 pinos do 74LS157 são separados em duas partes, os pinos 3, 6 10 e 8 que formam o nibble alto, e os pinos 2, 5 11 e 14 que formam o nibble baixo. Para selecionar o nibble que ficará disponível nas saídas do 74LS157, é enviado um bit 0 ou 1 para o pino 1. Se enviado um bit 0, o nibble baixo ficará disponível nas saídas do 74LS157, se for enviado um bit 1, o que ficará disponível nas saídas é o nibble alto. Então quem controla qual nibble ficará disponível nas saídas, o pino 1 do 74LS157.
       O ADC0804 é comandado através do pino 3 (WR) conectado à Porta Paralela no pino 7 (D7).
       O foto-transistor é o responsável pela detecção da luminosidade.
       Criaremos um software que fará a junção dos dois nibbles, formando um byte que será exibido em forma de gráfico representando a luminosidade.

Diagrama genérico do Mux 74LS157


Diagrama genérico de funcionamento do projeto


No diagrama acima, WR é um controle de comunicação entre o ADC0804 e o computador.

Código fonte em C/C++

Listagem da classe TMux (Protocolo de comunicação nibble-a-nibble usando o 74LS157)
//---------------------------------------------------------------------------
// Classe TMux;
// Objetivo: Protocolo de comunicação entre a porta paralela e o Mux 74LS157; // Autor: Antonio Rogério Messias;
// E-Mail: rogerc@uol.com.br;
// Todos os Direitos Reservados //---------------------------------------------------------------------------
#include "Porta.h" #define BASE 0x378 #define DADOS BASE + 0 #define STATUS BASE + 1 #define CONTROLE BASE + 2 //---------------------------------------------------------------------------
class
TMux //Declaração da class; {
private:
unsigned char
Byteb; unsigned char NibbleBaixo; unsigned char NibbleAlto; public:
void __fastcall SelecionaNibbleBaixo(void);         void __fastcall SelecionaNibbleAlto(void);         void __fastcall LeNibbleBaixo(void);         void __fastcall LeNibbleAlto(void);
        unsigned char __fastcall MontaByteDados(void);
};
//---------------------------------------------------------------------------
void __fastcall TMux::SelecionaNibbleBaixo(void) { //Seleciona Nibble Baixo (A) do Chip 74LS157. //O enviando um bit 0(zero). //No caso abaixo estamos usando o pino 1(Strob)lógica invertida.    //0x01 - 00000001.  
PortaLpt->Envia(CONTROLE, (unsigned char)(PortaLpt->Recebe(CONTROLE) | 0x01) ); } //--------------------------------------------------------------------------- void __fastcall TMux::SelecionaNibbleAlto(void) { //Seleciona Nibble Alto (B)do Chip 74LS157. //O enviando um bit 1(um). //No caso abaixo estamos usando o pino 1(Strob)lógica invertida    //0xFE - 11111110. PortaLpt->Envia(CONTROLE, (unsigned char)(PortaLpt->Recebe(CONTROLE) & 0xFE) );
}
//--------------------------------------------------------------------------- void __fastcall TMux::LeNibbleBaixo(void) {    //Lê Nibble baixo.
   NibbleBaixo = (unsigned char)(PortaLpt->Recebe(STATUS) & 0xF0); } //--------------------------------------------------------------------------- void __fastcall TMux::LeNibbleAlto(void) { NibbleAlto = (unsigned char)(PortaLpt->Recebe(STATUS) & 0xF0); //Lê Nibble alto. } //--------------------------------------------------------------------------- unsigned char __fastcall TMux::MontaByteDados(void) { SelecionaNibbleBaixo(); LeNibbleBaixo(); SelecionaNibbleAlto(); LeNibbleAlto(); NibbleBaixo = (unsigned char)(NibbleBaixo >> 4); //Desloca p/ a direita 4 Bits.     //0x88: 1000-1000, corrige os bits D7 e D3 e combina os nibbles. 
Byteb = (unsigned char)((NibbleAlto | NibbleBaixo) ^ 0x88);
return(Byteb); }

O código fonte descrito acima é um protocolo de comunicação entre a Porta Paralela e o Multiplexador 74LS157.


 Download: Download do programa LPTGRAF.EXE

Download Lptgraf.exe



Volta à página principal. 
 

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