Leitura de Sensores Analógicos e Conversão A/D em PIC

Neste tutorial, vamos explorar o passo a passoDepurando e Testando Aplicações Simples no MPLAB XDepurando e Testando Aplicações Simples no MPLAB XDescubra como configurar o MPLAB X IDE, utilizar breakpoints, executar passo a passo e monitorar variáveis, garantindo eficiência na depuração de sistemas PIC. da leitura de sensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. analógicos e como efetuar a conversão de sinais utilizando o Conversor Analógico-DigitalUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. (A/D) presente nos microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso.. A ideia é apresentar, de forma prática, tudo o que você precisa saber para coletar informações de sensores como potenciômetros, termistores, sensores de luz (LDR), entre outros, e convertê-las em valores digitais para processamento pelo firmware.

Entendendo o Processo de Conversão A/D🔗

Todo sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. analógico proporciona um sinal variável de tensão. Para que esse sinal garanta medições consistentes, é fundamental saber:

1. A faixa de tensão gerada pelo sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. (ex.: 0–5 V).

2. A resoluçãoADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICAprenda a configurar o ADC de microcontroladores PIC de forma avançada explorando teoria, implementação prática e técnicas de otimização para leituras precisas. do conversor A/D do PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia. (ex.: 10 bits → valores de 0 a 1023).

3. A configuração de referência de tensão usada (ex.: VDD ou tensões de referência externas).

Em microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso., a conversão A/D geralmente conta com:

  • Canais analógicos selecionáveis (AN0, AN1, AN2, etc.).
  • Taxa de amostragem que depende do clock e de configurações internas.
  • Tempo de aquisição (tempo necessário para o capacitor interno capturar a tensão).

O resultado final é um valor digital proporcional à tensão de entrada no pino, respeitando o referencial de 0 V até a tensão de referência (comumente 5 V ou 3,3 V).

Principais Registradores de Configuração🔗

Para realizar a leitura A/D, alguns registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. costumam ser configurados nos PICs (exemplo de PIC16F ou PIC18F). Entre eles:

RegistradorFunção
ADCON0Seleciona canal, controla habilitação do ADC e início de conversão.
ADCON1 ou ANSEL / ANSELHDefine se o pino será analógico ou digital e configura a tensão de referência.
ADCON2 ou Ajustes no mesmo ADCON1 (dependendo da família PIC)Ajusta clock do ADC, tempo de aquisição e formatos de resultado (justificado à direita ou à esquerda).

É essencial verificar o datasheet do microcontrolador PICEvolução dos PIC: Tendências, Desafios e Perspectivas FuturasEvolução dos PIC: Tendências, Desafios e Perspectivas FuturasDescubra a evolução dos microcontroladores PIC, desde os modelos 8 bits até as avançadas soluções de 32 bits, destacando tendências e desafios. em uso para identificar quais registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. estão disponíveis e como configurá-los adequadamente.

Como Iniciar e Realizar a Conversão🔗

O procedimento típico para uma conversão A/D pode ser resumido nos passos abaixo:

1. Configurar pino como entrada analógica (através do registradorArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. ADCON1/ANSEL/ANSELH).

2. Definir canal que será lido (ADCON0Arquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados.: bits CHS).

3. Ajustar referências de tensão (ADCON1 ou registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. equivalentes).

4. Selecionar clock do ADC (bit ADCS em ADCON2 ou no próprio ADCON0Arquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados., dependendo do PIC).

5. Definir formato do resultado (bit ADFM para alinhamento do resultado).

6. Habilitar ADCUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. (bit ADON em ADCON0Arquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados.).

7. Aguardar tempo de aquisição (t_{acqu}), garantindo que o capacitor interno do ADC carregue a tensão do sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores..

8. Iniciar conversão (setar bit GO/DONE em ADCON0Arquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados.).

9. Aguardar término da conversão (bit GO/DONE zerado).

10. Ler o resultado nos registradoresArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. ADRESL e ADRESH (ou ADCRES dependendo da família).

Exemplo de Código em C🔗

Abaixo segue um breve exemplo em C (usando um compilador da família XC) de como configurar e ler um canal analógico, considerando um microcontrolador PIC16F fictício (ajuste conforme o datasheet do seu PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia. real).

#include <xc.h>
// Exemplo de configuração para PIC16F (valores e bits podem variar)
#pragma config FOSC = HS       // Oscilador externo de alta velocidade
#pragma config WDTE = OFF      // Watchdog Timer desligado
#pragma config PWRTE = ON      // Power-up Timer habilitado
#pragma config MCLRE = ON      // MCLR habilitado
#pragma config CP = OFF        // Code Protection desligado
#pragma config BOREN = ON      // Brown-out Reset habilitado
#pragma config LVP = OFF       // Low-Voltage Programming desligado
#pragma config CPD = OFF       // Data Code Protection desligado
#pragma config WRT = OFF       // Write Protection desligado
#define _XTAL_FREQ 20000000    // Frequência de 20 MHz
void adc_init(void) {
    // Configura o pino AN0 como analógico; os demais como digital
    ANSEL  = 0x01;  // Somente AN0 habilitado como analógico
    ANSELH = 0x00;
    // Configura referência de tensão e demais parâmetros
    ADCON1 = 0x00;  // VDD como referência e sem justificação diferenciada
    // Ajusta clock do ADC e formato de resultado
    // bit ADCS2:ADCS0 = 010 -> Fosc/32 (exemplo)
    // bit ADFM = 1 (resultado justificado à direita)
    ADCON2 = 0b10001010;
    // bit 7 (ADFM) = 1 -> Justificado à direita
    // bit 6-4 (ACQT2:ACQT0) = 000 -> sem tempo de aquisição adicional (exige delay manual)
    // bit 2-0 (ADCS2:ADCS0) = 010 -> Fosc/32
    // Seleciona canal AN0 e habilita ADC
    ADCON0 = 0b00000001; // CHS = 000 (AN0), ADON = 1
}
unsigned int adc_read(void) {
    unsigned int result;
    // Seleciona canal AN0 (se for variar, mude aqui)
    ADCON0 &= 0b11000101;  // Limpa bits de canal, mantendo ADON
    ADCON0 |= (0 << 3);    // Seleciona AN0, por exemplo
    // Aguarda tempo de aquisição (necessário para capacitor interno)
    __delay_us(20); // Ajuste esse valor conforme datasheet
    // Inicia a conversão
    ADCON0bits.GO_DONE = 1;
    // Aguarda término da conversão
    while (ADCON0bits.GO_DONE);
    // Lê o resultado (justificado à direita)
    result = ((unsigned int)ADRESH << 8) | ADRESL;
    return result;
}
void main(void)
{
    unsigned int valorADC;
    // Inicialização
    adc_init();
    while(1)
    {
        // Realiza leitura do ADC
        valorADC = adc_read();
        // Aqui você pode fazer algo com valorADC
        // Por exemplo, escrever em uma porta, enviar via comunicação, etc.
        __delay_ms(500);
    }
}

Nesse exemplo, o valor digital gerado (valorADC) varia de acordo com a tensão aplicada no pino AN0 (0 V → 0 em decimal, 5 V → 1023 em decimal se for 10 bits). Você pode usar esse valor para controlar dispositivos, exibir informações em um displayUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. ou enviar via comunicação para outro sistema.

Considerações sobre Layout e Ruído🔗

Ao projetar a placa de circuito impresso (PCB) ou montar o protótipo em protoboard, observe:

Dicas Finais🔗

1. Leia o datasheet para conhecer as particularidades do ADC no modelo específico do seu PICExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExemplos Práticos em Assembly: Quando Vale a Pena Programar em Baixo NívelExplore como a programação Assembly em PIC maximiza controle de hardware com alta eficiência, ideal para sistemas críticos e dispositivos de baixa energia..

2. Teste em patamares de tensão conhecidos (ex.: 0 V, 2,5 V e 5 V) para verificar se a conversão está coerente.

3. Calcule a resoluçãoADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICAprenda a configurar o ADC de microcontroladores PIC de forma avançada explorando teoria, implementação prática e técnicas de otimização para leituras precisas. de acordo com o número de bits:

$$ \text{Resolução} = \frac{V_{\text{referência}}}{2^{\text{bits}}} $$

Com 10 bits e 5 V de referência, cada incremento representa aproximadamente 4,88 mV.

4. Se o sinal do sensorUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. não cobrir toda a faixa de 0 a 5 V, considere amplificá-lo ou ajustar a referência para ganhar resoluçãoADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICADC (Conversor Analógico-Digital): Lendo Valores Analógicos em PICAprenda a configurar o ADC de microcontroladores PIC de forma avançada explorando teoria, implementação prática e técnicas de otimização para leituras precisas..

5. Evite leituras em alta frequência sem verificar o tempo mínimo de aquisição exigido pelo datasheet.

Conclusão🔗

O processo de leitura de sensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. analógicos em microcontroladores PICPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesPrimeiros Passos com PIC: Entendendo o Microcontrolador e suas VersõesAprenda sobre microcontroladores PIC com este guia completo. Conheça a teoria, as práticas de otimização e casos reais para aplicações embarcadas de sucesso. e a conversão A/D são fundamentais para inúmeros projetos de monitoramentoTeste de Estresse: Avaliando o PIC em Condições Extremas de UsoTeste de Estresse: Avaliando o PIC em Condições Extremas de UsoDescubra técnicas avançadas para qualificação e testes de sistemas embarcados em PIC, combinando normas, instrumentação e análise científica de dados. e controle, desde aplicações simples de medições de temperatura até sistemas avançados de aquisição de dados. Entender como cada registradorArquitetura Básica: Registradores, Memória e Organização de DadosArquitetura Básica: Registradores, Memória e Organização de DadosDomine a arquitetura PIC com este guia prático. Aprenda concepções avançadas, manipulação de registradores e otimização para sistemas embarcados. atua e como configurar o tempo de aquisição, o clock do ADCUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. e as referências de tensão possibilita leituras confiáveis e precisas. Com essas bases sólidas, você estará pronto para integrar sensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresUso das Portas I/O: Controlando LEDs, Displays e SensoresAprenda a configurar portas, CDs, LEDs, displays, ADC e muito mais em sistemas PIC, com dicas de segurança, depuração e integração de sensores. ao seu projeto com total segurança e efetividade.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo