Devido a mais uma necessidade de projeto desenvolvi esse código, nesse caso a necessidade de uma grande quantidade de entradas, mas com lógica de firmware muito reduzida, assim sendo, que se acomodaria perfeitamente em microcontroladores de pequena pinagem.

Depois de algumas pesquisas resolvi utilizar o CD4021 que é um conversor paralelo-serial síncrono, assim, colocando 16 entradas no microcontrolador, utilizando somente 3 pinos.

Nesse caso estou demonstrando com led’s, mas com algumas adaptações é possível o aumento da quantidade de entradas.

Segue também os arquivos junto com um arquivo do proteus para testes.

Usar no Proteus 7.8 ou superior.


Fazer o download: [PIC][MIKROC][PROTEUS] Múltiplas Entradas com o CD4021


Até o próximo post e não esqueçam de comentar…

[sections] [section title=”Código Fonte”]

/*
DATEK Tecnologia
Exemplo: Multiplas entradas com CD4021 [parallel to serial converter] Data: 08/01/2012

Compilador: MikroC PRO 5.4.0

Bibliotecas utilizadas:

*/
unsigned int Tecla,Tecla_ant,imgSaidasBKP,imgSaidas;
unsigned char cont;
//=== DECLARAÇÃO DE ALIASES DOS PINOS ==========================================
// CONTROLE DOS LEDS
// CD4094
sbit SHIFT_DATA at RC1_bit; // PINO DE DADOS
sbit SHIFT_CLK at RC0_bit; // PINO DE CLOCK
sbit SHIFT_STB at RC2_bit; // PINO DE STROBE
// CONTROLE DOS LEITURA
// CD4021 // CLK E DATA COMPARTILHADO COM O ANTERIOR
sbit SHIFT_DATA2 at RC3_bit; // PINO DE DADOS
sbit SHIFT_STB2 at RC4_bit; // PINO DE STROBE

// CD4094
sbit SHIFT_DATA_Direction at TRISC1_bit; // PINO DE DADOS
sbit SHIFT_CLK_Direction at TRISC0_bit; // PINO DE CLOCK
sbit SHIFT_STB_Direction at TRISC2_bit; // PINO DE STROBE
// CD4021
sbit SHIFT_DATA2_Direction at TRISC3_bit; // PINO DE DADOS
sbit SHIFT_STB2_Direction at TRISC4_bit; // PINO DE STROBE

#define TECLA1 0x0001
#define TECLA2 0x0002
#define TECLA3 0x0004
#define TECLA4 0x0008
#define TECLA5 0x0010
#define TECLA6 0x0020
#define TECLA7 0x0040
#define TECLA8 0x0080
#define TECLA9 0x0100
#define TECLA10 0x0200
#define TECLA11 0x0400
#define TECLA12 0x0800

unsigned int Leitura_Entradas()
{
unsigned int ltEntradas=0;

SHIFT_STB2 = 1;
Delay_ms(1);
SHIFT_STB2 = 0;
for(cont=0;cont<16;cont++)
{
ltEntradas<<=1;
ltEntradas|=SHIFT_DATA2;

SHIFT_CLK = 0;
Delay_ms(1);
SHIFT_CLK = 1;
}
return(ltEntradas);
}
//################## FUNÇÃO MAIN() #############################################
void main() {

// ROTINAS
//————————————–
// Desabilita todas as interrupções
//————————————–
INTCON = 0; // Desabilita GIE, PEIE, TMR0IE,INT0IE,RBIE
INTCON2 = 0xF5;
INTCON3 = 0xC0;
PIE1 = 0;
PIE2 = 0;
PIR1 = 0;
PIR2 = 0;
RBPU_bit = 0; // PULLUP INTERNO LIGADO

// CONFIGURAÇÃO DOS PORTS
SHIFT_DATA_Direction = 0; // PINO DE DADOS
SHIFT_CLK_Direction = 0; // PINO DE CLOCK
SHIFT_STB_Direction = 0; // PINO DE STROBE

SHIFT_DATA2_Direction = 1; // PINO DE DADOS
SHIFT_STB2_Direction = 0; // PINO DE STROBE
while(1)
{
Tecla=Leitura_Entradas();
if((Tecla_ant!=Tecla))
{
Tecla_ant = Tecla;

imgSaidasBKP ^= Tecla;
for(cont=0;cont<16;cont++)
{
SHIFT_DATA = !((imgSaidasBKP & 0x8000)==0x8000);
SHIFT_CLK = 1;
Delay_us(1000);
SHIFT_CLK = 0;
imgSaidasBKP<<=1;
Delay_us(1000);
}
SHIFT_STB = 0;
Delay_us(1000);
SHIFT_STB = 1;
}
}
}

[/section] [section title=”Esquema Elétrico”]
Esquema elétrico Múltiplas Entradas com CD4021
Esquema elétrico Múltiplas Entradas com CD4021
[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[PIC] Múltiplas Entradas com o CD4021
Tags:             

Deixe uma resposta

%d blogueiros gostam disto: