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

Como Inicializar I2C1 em Microcontroladores Microchip

O protocolo I2C (Inter-Integrated Circuit) é amplamente utilizado para comunicação entre dispositivos de baixa velocidade, como microcontroladores e sensores. A inicialização correta do módulo I2C1 é crucial para garantir a comunicação eficiente e sem erros. Neste artigo, vamos explorar como inicializar o módulo I2C1 em microcontroladores da Microchip, focando em exemplos práticos e códigos de exemplo.

Exemplos:

  1. Configurando o Módulo I2C1 no MPLAB X IDE:

    Primeiro, vamos configurar o módulo I2C1 usando o MPLAB X IDE e o MCC (MPLAB Code Configurator).

    // Código gerado pelo MCC para inicializar o I2C1
    void I2C1_Initialize(void) {
       I2C1CONbits.I2CEN = 0; // Desabilita o módulo I2C1 antes da configuração
       I2C1CONbits.I2CSIDL = 0; // Continua operando em modo Idle
       I2C1BRG = 0x27; // Configura o baud rate para 100kHz com Fosc = 8MHz
       I2C1CONbits.I2CEN = 1; // Habilita o módulo I2C1
    }
  2. Configurando o Módulo I2C1 Manualmente:

    Caso você prefira configurar o módulo I2C1 manualmente, aqui está um exemplo de como fazer isso:

    #include <xc.h>
    
    void I2C1_Initialize(void) {
       // Desabilita o módulo I2C1
       I2C1CONbits.I2CEN = 0;
    
       // Configura o baud rate para 100kHz com Fosc = 8MHz
       I2C1BRG = 0x27;
    
       // Configura os pinos SDA e SCL como entradas
       TRISBbits.TRISB9 = 1; // SDA
       TRISBbits.TRISB8 = 1; // SCL
    
       // Habilita o módulo I2C1
       I2C1CONbits.I2CEN = 1;
    }
    
    void main(void) {
       // Inicializa o módulo I2C1
       I2C1_Initialize();
    
       while(1) {
           // Código principal
       }
    }
  3. Comunicação I2C1 - Envio de Dados:

    Após inicializar o módulo I2C1, você pode enviar dados para um dispositivo escravo. Aqui está um exemplo de como enviar um byte de dados:

    void I2C1_WriteByte(uint8_t data) {
       I2C1TRN = data; // Carrega o byte de dados no registro de transmissão
       while(I2C1STATbits.TRSTAT); // Aguarda a conclusão da transmissão
    }
    
    void main(void) {
       I2C1_Initialize();
    
       while(1) {
           I2C1_WriteByte(0xA5); // Envia o byte 0xA5
           __delay_ms(500); // Aguarda 500ms
       }
    }
  4. Comunicação I2C1 - Recepção de Dados:

    Para receber dados de um dispositivo escravo, você pode usar o seguinte código:

    uint8_t I2C1_ReadByte(void) {
       I2C1CONbits.RCEN = 1; // Habilita a recepção
       while(!I2C1STATbits.RBF); // Aguarda até que o byte seja recebido
       return I2C1RCV; // Retorna o byte recebido
    }
    
    void main(void) {
       uint8_t receivedData;
    
       I2C1_Initialize();
    
       while(1) {
           receivedData = I2C1_ReadByte(); // Recebe um byte
           __delay_ms(500); // Aguarda 500ms
       }
    }

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.