Índice:

Introdução ao ADC no microcontrolador AVR - Para iniciantes: 14 etapas
Introdução ao ADC no microcontrolador AVR - Para iniciantes: 14 etapas

Vídeo: Introdução ao ADC no microcontrolador AVR - Para iniciantes: 14 etapas

Vídeo: Introdução ao ADC no microcontrolador AVR - Para iniciantes: 14 etapas
Vídeo: Curso de microcontrolador AVR - Conversor AD Parte 1 2024, Julho
Anonim
Introdução ao ADC no microcontrolador AVR | para iniciantes
Introdução ao ADC no microcontrolador AVR | para iniciantes

Neste tutorial você saberá tudo ADC em microcontrolador AVR

Etapa 1: O que é um ADC?

Um ADC, ou conversor analógico para digital, permite converter uma tensão analógica em um valor digital que pode ser usado por um microcontrolador. Existem muitas fontes de sinais analógicos que gostaríamos de medir. Existem sensores analógicos disponíveis que medem temperatura, intensidade de luz, distância, posição e força, apenas para citar alguns.

Etapa 2: Como funciona o ADC no AVR- Microcontrolador

O AVR ADC permite que o microcontrolador AVR converta tensões analógicas em valores digitais com poucas ou nenhuma parte externa. O ATmega8 apresenta uma aproximação sucessiva de 10 bits ADC. ATmega8 tem 7 canais ADC no PortC. O ADC tem um pino de tensão de alimentação analógica separado, AVCC. AVCC não deve diferir mais do que ± 0,3 V de VCC.. A referência de tensão pode ser desacoplada externamente no pino AREF. AVCC é usado como referência de tensão. O ADC também pode ser configurado para funcionar continuamente (o modo de execução livre) ou para fazer apenas uma conversão.

Etapa 3: Fórmula de conversão ADC

Fórmula de conversão ADC
Fórmula de conversão ADC

Onde Vin é a tensão no pino de entrada selecionado e Vref a referência de tensão selecionada

Etapa 4: Como configurar o ADC no ATmega8?

Como configurar o ADC no ATmega8?
Como configurar o ADC no ATmega8?

Os seguintes registros são usados para implementação de ADC em ATmega8

Seleção de Multiplexador ADC

Etapa 5: Seleção ADLAR

Seleção ADLAR
Seleção ADLAR
Seleção ADLAR
Seleção ADLAR

Resultado do ajuste à esquerda do ADC O bit ADLAR afeta a apresentação do resultado da conversão do ADC no registrador de dados ADC. Escreva um para ADLAR para ajustar o resultado à esquerda. Caso contrário, o resultado é ajustado corretamente

Quando uma conversão ADC é concluída, o resultado é encontrado em ADCH e ADCL. Quando ADCL é lido, o Registro de Dados ADC não é atualizado até que ADCH seja lido. Consequentemente, se o resultado for ajustado à esquerda e não for necessária mais de 8 bits de precisão, é suficiente ler ADCH. Caso contrário, ADCL deve ser lido primeiro e, em seguida, ADCH. Bits de seleção de canal analógico O valor desses bits seleciona quais entradas analógicas são conectadas ao ADC.

Etapa 6: Seleção ADCSRA

Seleção ADCSRA
Seleção ADCSRA
Seleção ADCSRA
Seleção ADCSRA

• Bit 7 - ADEN: ADC Enable Gravar este bit em um habilita o ADC. Ao escrever para zero, o ADC é desligado

• Bit 6 - ADSC: ADC Start Conversion No modo Single Conversion, escreva este bit em um para iniciar cada conversão. No modo de execução livre, escreva este bit em um para iniciar a primeira conversão.

• Bit 5 - ADFR: ADC Free Running Select Quando este bit é definido (um), o ADC opera no modo Free Running. Neste modo, o ADC faz a amostragem e atualiza os registros de dados continuamente. Limpar este bit (zero) encerrará o modo de execução livre.

• Bit 4 - ADIF: Sinalizador de interrupção ADC Este bit é definido quando uma conversão ADC é concluída e os registros de dados são atualizados. A Interrupção Completa da Conversão ADC é executada se o bit ADIE e o bit I em SREG estiverem definidos. ADIF é limpo por hardware ao executar o vetor de tratamento de interrupção correspondente. Como alternativa, o ADIF é limpo gravando um lógico no sinalizador.

• Bit 3 - ADIE: ADC Interrupt Enable Quando este bit é escrito para um e o bit I em SREG é definido, a ADC Conversion Complete Interrupt é ativada.

• Bits 2: 0 - ADPS2: 0: Bits de seleção do pré-escalar ADC De acordo com a folha de dados, este pré-escalar precisa ser definido de forma que a frequência de entrada do ADC esteja entre 50 KHz e 200 KHz. O relógio ADC é derivado do relógio do sistema com a ajuda de ADPS2: 0 Esses bits determinam o fator de divisão entre a frequência XTAL e o relógio de entrada para o ADC.

Etapa 7: Se você deseja obter o valor do ADC, você precisa realizar alguns trabalhos listados abaixo

  • Definir valor ADC
  • Configure o pino do LED de saída
  • Configurar Hardware ADC
  • Habilitar ADC
  • Iniciar conversões de analógico para digital
  • ENQUANTO para sempre

SE o valor ADC for maior do que o valor definido, ligue o LED ELSE desligue o LED

Etapa 8: Definir valor ADC

Código: uint8_t ADCValue = 128;

Etapa 9: Configurar o pino do LED de saída

Código: DDRB | = (1 << PB1);

Etapa 10: Configurar Hardware ADC

Configurar Hardware ADC

Isso é feito definindo bits nos registros de controle do ADC. Primeiro, vamos definir o pré-escalar para o ADC. De acordo com a ficha técnica, esse pré-escalar precisa ser configurado de forma que a frequência de entrada do ADC esteja entre 50 KHz e 200 KHz. O relógio ADC é derivado do relógio do sistema. Com uma frequência de sistema de 1 MHz, um prescaler de 8 resultará em uma frequência ADC de 125 Khz. A pré-escala é definida pelos bits ADPS no registro ADCSRA. De acordo com a folha de dados, todos os três bits ADPS2: 0 devem ser definidos como 011 para obter o 8 prescaler.

Código: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

A seguir, vamos definir a tensão de referência do ADC. Isso é controlado pelos bits REFS no registro ADMUX. O seguinte define a tensão de referência para AVCC.

Código: ADMUX | = (1 << REFS0);

Para definir o canal passado pelo multiplexador para o ADC, os bits MUX no registro ADMUX precisam ser definidos de acordo. Como estamos usando ADC5 aqui

Código: ADMUX & = 0xF0; ADMUX | = 5;

Para colocar o ADC em modo de execução livre, defina o bit ADFR apropriadamente nomeado no registro ADCSRA:

Código: ADCSRA | = (1 << ADFR);

Uma última alteração nas configurações será feita para tornar a leitura do valor ADC mais simples. Embora o ADC tenha uma resolução de 10 bits, muitas vezes essas informações não são necessárias. Este valor de 10 bits é dividido em dois registradores de 8 bits, ADCH e ADCL. Por padrão, os 8 bits mais baixos do valor ADC são encontrados no ADCL, com os dois superiores sendo os dois bits mais baixos do ADCH. Definindo o bit ADLAR no registro ADMUX, podemos alinhar à esquerda o valor ADC. Isso coloca os 8 bits mais altos da medição no registro ADCH, com o resto no registro ADCL. Se lermos o registro ADCH, obteremos um valor de 8 bits que representa nossa medição de 0 a 5 volts como um número de 0 a 255. Basicamente, estamos transformando nossa medição ADC de 10 bits em uma de 8 bits. Aqui está o código para definir o bit ADLAR:

Código:

ADMUX | = (1 << ADLAR); Isso conclui a configuração do hardware ADC para este exemplo. Mais dois bits precisam ser definidos antes que o ADC comece a fazer medições.

Etapa 11: Habilitar ADC

Para habilitar o ADC, defina o bit ADEN em ADCSRA:

Código: ADCSRA | = (1 << ADEN);

Etapa 12: iniciar as conversões analógicas para digitais

Para iniciar as medições ADC, o bit ADSC em ADCSRA precisa ser definido:

Código: ADCSRA | = (1 << ADSC);

Nesse ponto, o ADC começaria a amostrar continuamente a tensão apresentada no ADC5. O código até este ponto seria semelhante a este:

Etapa 13: ENQUANTO para sempre

A única coisa que falta fazer é testar o valor do ADC e definir os LEDs para exibir uma indicação de alto / baixo. Uma vez que a leitura do ADC no ADCH tem um valor máximo de 255, um valor de teste th foi escolhido para determinar se a tensão estava alta ou baixa. Uma simples instrução IF / ELSE nos loops FOR nos permitirá acender o LED correto:

Código

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Liga o LED

}

outro

{

PORTB & = ~ (1 << PB0); // Desligue o LED

}

Etapa 14: no final, o código completo está

Código:

#incluir

int main (vazio)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Definir LED1 como saída

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Definir ADC pré-escalar para 8 - // taxa de amostragem de 125 KHz 1 MHz

ADMUX | = (1 << REFS0); // Definir referência ADC para AVCC

ADMUX | = (1 << ADLAR); // Ajuste à esquerda do resultado ADC para permitir uma leitura fácil de 8 bits

ADMUX & = 0xF0;

ADMUX | = 5; // Os valores MUX precisam ser alterados para usar ADC0

ADCSRA | = (1 << ADFR); // Definir ADC para modo de execução livre

ADCSRA | = (1 << ADEN); // Habilitar ADC

ADCSRA | = (1 << ADSC); // Iniciar conversões A2D enquanto (1) // Loop para sempre

{

if (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Liga o LED1

}

outro

{

PORTA & = ~ (1 << PB1); // Desligue o LED1

}

}

return 0;

}

Publique primeiro este tutorial Clique aqui

Recomendado: