Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Script para controlar PGA2310 com codificador rotativo e PIC16F628A

Script:

#include <xc.h>

// Definições de configuração para o PIC16F628A
#pragma config FOSC = INTRC_NOCLKOUT // Oscilador interno, sem saída de clock
#pragma config WDTE = OFF           // Watchdog Timer desativado
#pragma config PWRTE = ON           // Power-up Timer ativado
#pragma config MCLRE = OFF          // MCLR como pino de I/O
#pragma config BOREN = OFF          // Brown-out Reset desativado
#pragma config LVP = OFF            // Low-Voltage Programming desativado
#pragma config CPD = OFF            // Data EEPROM Memory Code Protection desativado
#pragma config CP = OFF             // Flash Program Memory Code Protection desativado

// Definições de pinos
#define ENCODER_A PORTBbits.RB0
#define ENCODER_B PORTBbits.RB1
#define PGA_CS    PORTBbits.RB2
#define PGA_MOSI  PORTBbits.RB3
#define PGA_SCK   PORTBbits.RB4

// Variáveis globais
int volume = 0;

// Função para inicializar o PIC
void initPIC() {
    TRISB = 0b00000011; // Configura RB0 e RB1 como entrada, o resto como saída
    PORTB = 0;          // Limpa o PORTB
}

// Função para enviar dados ao PGA2310
void sendToPGA2310(int left, int right) {
    PGA_CS = 0; // Seleciona o PGA2310

    for (int i = 0; i < 8; i++) {
        PGA_MOSI = (left >> (7 - i)) & 1;
        PGA_SCK = 1;
        __delay_us(1);
        PGA_SCK = 0;
    }

    for (int i = 0; i < 8; i++) {
        PGA_MOSI = (right >> (7 - i)) & 1;
        PGA_SCK = 1;
        __delay_us(1);
        PGA_SCK = 0;
    }

    PGA_CS = 1; // Desseleciona o PGA2310
}

// Função para ler o codificador rotativo
void readEncoder() {
    static int lastState = 0;
    int currentState = ENCODER_A | (ENCODER_B << 1);

    if (currentState != lastState) {
        if ((lastState == 0b01 && currentState == 0b00) || (lastState == 0b10 && currentState == 0b11)) {
            volume++;
        } else if ((lastState == 0b00 && currentState == 0b01) || (lastState == 0b11 && currentState == 0b10)) {
            volume--;
        }
        lastState = currentState;
    }
}

// Função principal
void main() {
    initPIC();

    while (1) {
        readEncoder();
        sendToPGA2310(volume, volume);
        __delay_ms(10);
    }
}

Como Executar o Script:

  1. Configurar o Ambiente: Assegure-se de ter o MPLAB X IDE e o XC8 Compiler instalados no seu computador.

  2. Criar um Novo Projeto: Abra o MPLAB X IDE, crie um novo projeto para o PIC16F628A.

  3. Inserir o Código: Copie o script acima e cole no arquivo fonte principal do projeto.

  4. Compilar o Projeto: Compile o projeto para verificar se há erros no código.

  5. Gravar no PIC: Use um programador compatível (como o PICkit 3) para gravar o código compilado no microcontrolador PIC16F628A.

  6. Montar o Circuito: Conecte o PIC16F628A, o codificador rotativo e o PGA2310 de acordo com as definições de pinos no script.

  7. Testar o Sistema: Ligue o sistema e gire o codificador rotativo para ajustar o volume controlado pelo PGA2310.

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.