Escolar Documentos
Profissional Documentos
Cultura Documentos
Se o software for rodar no Windows NT, 2000 ou XP, faça download do driver clicando aqui
Características do software:
Recursos do software:
Obs.:
Para minimizar a ocorrência de acionamentos inesperados nas saídas dos
Latchs, é muito importante que a fonte de alimentação seja de boa qualidade.
Logo no começo dos testes desse projeto, houve alguns problemas de ruído.
Ao aproximar uma luminária contendo um transformador e uma luz fluorescente de
9W, as saídas dos Latchs eram acionadas, simplesmente quando ligava e
desligava essa luminária. Com o acréscimo dos capacitores de 100nF conectados
entre os pinos 11 e ao +5v da fonte de alimentação, essa interferência foi
eliminada em 98%, só ocorrendo quando a luminária era ligada muito próxima ao
circuito.
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Envia 1 byte para a Porta Paralela.
void Envia(short int PortaEnd, unsigned char Dado)
{
_DX = PortaEnd;
_AL = Dado;
__emit__ (0xEE);
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Recebe 1 byte através da Porta Paralela.
unsigned char Recebe(short int PortaEnd)
{
_DX = PortaEnd;
__emit__ (0xEC);
return (_AL);
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Desliga qualquer um dos 32 bits da varialvel valor independentemente.
unsigned __int32 Desliga32Bits(unsigned __int32 valor, unsigned char Bit)
{
unsigned __int32 BitMask=1; //00000000-00000000-00000000-00000001.
BitMask = (unsigned __int32)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == BitMask ) //se bit ligado.
return(valor ^ BitMask); //desliga bit.
else
return(valor); //retorna sem modificar.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Liga qualquer um dos 32 bits da varialvel valor independentemente.
unsigned __int32 Liga32Bits(unsigned __int32 valor, unsigned char Bit)
{
unsigned __int32 BitMask=1; //00000000-00000000-00000000-00000001.
BitMask = (unsigned __int32)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == 0 ) //se bit desligado.
return(valor ^ BitMask); //liga bit.
else
return(valor); //retorna sem modificar.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Testa qualquer um dos 32 bits da varialvel valor independentemente.
unsigned char Testa32Bits(unsigned __int32 valor, unsigned char Bit)
{
unsigned __int32 BitMask = 1; //00000000-00000000-00000000-00000001.
BitMask = (unsigned __int32)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == BitMask ) //se bit ligado.
return 1;
else
return 0;
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Gera um sinal de clock nível baixo.
unsigned __int32 ClockBordaDescida(unsigned __int32 valor)
{
return( Liga32Bits(valor, AUTOFEED) ); //Invertido.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Gera um sinal de clock nível alto.
unsigned __int32 ClockBordaSubida(unsigned __int32 valor)
{
return( Desliga32Bits(valor, AUTOFEED) ); //Invertido.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Habilita todos os LATCHs
unsigned __int32 LigaLatchs(unsigned __int32 valor)
{
return( Desliga32Bits(valor,STROB) ); //Invertido.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Desabilita todos os LATCHs
unsigned __int32 DesligaLatchs(unsigned __int32 valor)
{
return( Liga32Bits(valor,STROB) ); //Invertido.
}
//---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
//Liga ou desliga qualquer uma das 32 saídas do circuito.
void Outport32(short int EndPorta, unsigned __int32 BitsDados)
{
unsigned __int32 valor=0;
unsigned __int32 Dados = BitsDados;
//Loop.
for(int cont=31; cont >= 0; cont--) //Percorrer a variável Dados de 32 bits; do bit mais
significativo ao menos signifi.
{
if(Testa32Bits(Dados,cont) == 1) //Se um bit na posição cont da var. Dados está ligado.
valor = Liga32Bits(valor,2); //Dados 1.
else
valor = Desliga32Bits(valor,2); //Dados 0.
//GERA CLOCK----------------------------------------------------
valor = ClockBordaDescida(valor); //Clock 0.
Envia(EndPorta+2,valor); //Registro de Controle.
valor = ClockBordaSubida(valor); //Clock 1.
Envia(EndPorta+2,valor); //Registro de Controle.
//---------------------------------------------------------------------------
}
valor = LigaLatchs(valor); //Liga Todos os Latchs.
Envia(EndPorta+2,valor); //Registro de Controle.
Sleep(1); //Aguarda 1 milisegundo. Necessário para estabilizar os dados nos Latchs.
valor = DesligaLatchs(valor); //Desliga todos os Latchs.
Envia(EndPorta+2,valor); //Registro de Controle.
}
Se desejar ligar ou desligar qualquer uma das 32 saídas do circuito da Figura
5 através de programação, tenha como referência o pequeno programa escrito em
linguagem C++, logo abaixo:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include "bibli32s.h"
void main(void)
{
unsigned __int32 Valor = 0x80000001; //Em binário: 10000000-00000000-
00000000-00000001.
Outport32(0x378, Valor); //Liga as saídas S1 e S32 do circuito da Figura 5.
cout << "Pressione uma tecla para finalizar...";
getch( );
}
CIRCUITO PARA CONTROLAR DISPOSITIVOS LIGADOS
À REDE ELÉTRICA
http://www.rogercom.com
© Copyright, 1999-2004 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.
As duas animações acima simulam o funcionamento de uma porta NOT, tanto
para inverter um nível alto como um nível baixo.
//------------------------------------------------------------------------------------------------------
----------------------------------------
//As instruções abaixo liga a saída D0 do circuito LptInit:
//------------------------------------------------------------------------------------------------------
----------------------------------------
outportb(DADOS, 1); //Disponibiliza os dados na Porta Paralela (liga pino 2-
D0).
//Ao executar a próxima função, os dados da Porta Paralela ficarão
disponíveis nas saídas do LACH.
outportb(CONTROLE, HABILITA_LATCH); //Habilita o Latch 74HCT573 -
pino 11.
Sleep( 0 ); //Aguarda um tempo para estabilizar os dados. O valor pode ser
1ms.
outportb(CONTROLE, DESABILITA_LATCH); //Desabilita o Latch
74HCT573 - pino 11.
//------------------------------------------------------------------------------------------------------
----------------------------------------
//As instruções abaixo desligam todas as 8 saídas do circuito LptInit:
//------------------------------------------------------------------------------------------------------
----------------------------------------
outportb(DADOS, 0); //Disponibiliza os dados na Porta Paralela (desliga
todas as saídas).
//Ao executar a próxima função, os dados da Porta Paralela ficarão
disponíveis nas saídas do LACH.
outportb(CONTROLE, HABILITA_LATCH); //Habilita o Latch 74HCT573 -
pino 11.
Sleep( 0 ); //Aguarda um tempo para estabilizar os dados. O valor pode ser
1ms.
outportb(CONTROLE, DESABILITA_LATCH); //Desabilita o Latch
74HCT573 - pino 11.
http://www.rogercom.com
© Copyright, 1999-2004 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.
RComAccess
v1.0
Controle de
Acesso
Por: Antônio Rogério Messias
Figura 2 - Animação
Na animação acima temos uma visão geral da placa controladora, dos
teclados e do computador.
Figura 3 - Visão geral da placa controladora com detalhes dos conectores (ilustração)
A figura acima é ilustrativa, mas serve como ponto de partida para o
desenvolvimento de uma placa que comporte todos os componentes e os
conectores necessários para "plugar" os periféricos.
Observe que na placa há 9 LEDs, um deles indica se a placa está alimentada
(energizada) e os outros 8 para indica o acionamento das saídas (controle dos
dispositivos).
A escolha do melhor conector para conectar os periféricos fica por conta do
projetista. Escolha conectores de dimensões pequenas para que a placa não
assuma grandes dimensões.
Figura 4 - Descrição dos pinos do PIC 16F877 especificamente para o projeto Controle de
Acesso