- Registro de deslocamento 74HC595:
- Componentes necessários:
- Diagrama de circuito:
- Explicação do código:
Existem possibilidades no design integrado em que você não tem pinos de E / S suficientes disponíveis em seu microcontrolador. Isso pode ser devido a qualquer motivo, pode ser que sua aplicação precise de vários LEDs ou você queira usar vários visores de 7 segmentos, mas você não tem os pinos de E / S necessários em seu microcontrolador. Aí vem um componente perfeito, o registrador de deslocamento. O registrador de deslocamento aceita dados seriais e fornece saída paralela. Requer apenas 3 pinos para conectar ao seu microcontrolador e você obterá mais de 8 pinos de saída dele. Um dos registradores de deslocamento populares é o 74HC595. Possui registro de armazenamento de 8 bits e registro de deslocamento de 8 bits. Saiba mais sobre os registradores de deslocamento aqui.
Você fornecerá dados seriais ao registrador de deslocamento e eles serão travados no registrador de armazenamento e, em seguida, o registrador de armazenamento controlará as 8 saídas. Se você quiser mais saída, basta adicionar outro registrador de deslocamento. Ao colocar em cascata dois registradores de deslocamento, você obterá 8 saídas adicionais, saída total de 16 bits.
Registro de deslocamento 74HC595:
Aqui está o diagrama de pinagem do 74HC595 de acordo com a folha de dados
HC595 tem 16 pinos; se virmos a folha de dados, entenderemos as funções dos pinos-
O QA para QH, dos pinos números 1 a 7 e 15 usado como saída de 8 bits do registrador de deslocamento, onde o pino 14 é usado para receber os dados seriais. Há também uma tabela verdade sobre como usar outros pinos e aproveitar outras funções do registrador de deslocamento.
Quando escrevermos o código para fazer a interface do 74HC595, aplicaremos esta tabela verdade para obter as saídas desejadas.
Agora, faremos a interface do 74HC595 com o PIC16F877A e controlaremos 8 LEDs. Estabelecemos a interface do registrador de deslocamento 74HC595 com outros microcontroladores:
- Interface 74HC595 Serial Shift Register com Raspberry Pi
- Como usar o Shift Register 74HC595 com o Arduino Uno?
- Interface de LCD com NodeMCU usando shift Register
Componentes necessários:
- PIC16F877A
- Capacitores de disco de cerâmica 2pcs 33pF
- 20Mhz Cristal
- Resistor de 4,7k
- 8pcs LEDs
- 1k resistor -1 pc (8 pcs 1k resistores necessários se resistores separados em cada leds necessários)
- 74HC595 ic
- Adaptador de parede 5V
- Ambiente de programação PIC
- Placa de ensaio e fios
Diagrama de circuito:
No diagrama de circuito, conectamos o pino de dados serial; pino de relógio e estroboscópio (trava) no pino RB0, RB1 e RB2 do microcontrolador , respectivamente. Aqui, usamos um resistor para 8 LEDs. De acordo com a tabela verdade, habilitamos a saída conectando o pino 13 do 74HC595 ao terra. O pino QH é deixado aberto, pois não colocaremos outro 74HC595 em cascata com ele. Nós desativado a bandeira contributo claro conectando pino 10 do registrador de deslocamento com VCC.
O oscilador Crystal é conectado aos pinos OSC do microcontrolador. PIC16F877A não tem nenhum oscilador interno. Neste projeto iremos acender o led um a um de Q0 a Q7 usando shift regitster.
Nós construímos o circuito em uma placa de ensaio
Explicação do código:
O código completo para controlar LEDs com registro de deslocamento é fornecido no final do artigo. Como sempre, precisamos definir os bits de configuração no microcontrolador PIC.
#pragma config FOSC = HS // Bits de seleção do oscilador (oscilador HS) #pragma config WDTE = OFF // Bit de ativação do temporizador Watchdog (WDT desativado) #pragma config PWRTE = OFF // Bit de ativação do temporizador de inicialização (PWRT desativado) # pragma config BOREN = ON // Bit de habilitação de redefinição de Brown-out (BOR habilitado) #pragma config LVP = OFF // Baixa tensão (fonte única) Bit de habilitação de programação serial em circuito (RB3 / pino PGM tem função PGM; baixo - programação de tensão habilitada) #pragma config CPD = OFF // Bit de proteção de código de memória EEPROM de dados (proteção de código EEPROM de dados desativada) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (proteção de gravação desativada; toda a memória de programa pode ser escrito pelo controle EECON) #pragma config CP = OFF // Bit de proteção de código de memória de programa Flash (proteção de código desativada)
Depois disso, declaramos a frequência do cristal necessária para o retardo e a declaração de pinagem do 74HC595.
#incluir
Em seguida, declaramos a função system_init () para inicializar a direção do pino.
vazio system_init (vazio) { TRISB = 0x00; }
Criamos o pulso do relógio e o pulso de trava usando duas funções diferentes
/ * * Esta função habilitará o Relógio. * / relógio vazio (vazio) { CLK_595 = 1; __delay_us (500); CLK_595 = 0; __delay_us (500); }
e
/ * * Esta função disparará e habilitará o acionador de saída. * / estroboscópio vazio (vazio) { STROBE_595 = 1; __delay_us (500); STROBE_595 = 0; }
Após essas duas funções, declaramos a função data_submit (dados int não assinados) para enviar dados seriais ao 74HC595.
void data_submit (dados int sem sinal) { para (int i = 0; i <8; i ++) { DATA_595 = (dados >> i) & 0x01; relógio(); } strobe (); // Dados finalmente enviados }
Nesta função, aceitamos dados de 8 bits e enviamos cada bit usando dois operadores bit a bit shift esquerdo e operador AND. Primeiro deslocamos os dados um a um e descobrimos o bit exato se é 0 ou 1 usando o operador AND com 0x01. Cada dado é armazenado pelo pulso de clock e a saída de dados final feita usando a trava ou pulso estroboscópico. Neste processo, a saída de dados será MSB (Bit Mais Significativo) primeiro.
Na função principal , submetemos o binário e aumentamos os pinos de saída um por um.
system_init (); // Sistema se preparando while (1) { data_submit (0b00000000); __delay_ms (200); data_submit (0b10000000); __delay_ms (200); data_submit (0b01000000); __delay_ms (200); data_submit (0b00100000); __delay_ms (200); data_submit (0b00010000); __delay_ms (200); data_submit (0b00001000); __delay_ms (200); data_submit (0b00000100); __delay_ms (200); data_submit (0b00000010); __delay_ms (200); data_submit (0b00000001); __delay_ms (200); data_submit (0xFF); __delay_ms (200); } return; }
É assim que um registrador de deslocamento pode ser usado para obter mais pinos de E / S livres em qualquer microcontrolador para conectar mais sensores.