ADC com NRF24LE1 (Parte 2/14)

ADC com NRF24LE1 (Parte 2/14)

ADC com NRF24LE1

Estudamos o primeiro programa do módulo NRF que era muito simples e tivemos sucesso piscando o LED.

Agora, se quisermos fazer alguma coisa com NRF, devemos saber como receber entradas analógicas, pois a maior parte do sensor é analógica. Neste artigo, veremos como usar o embutido ADC da NRF e como podemos usar qualquer sensor analógico e converter seu valor em digital

Protótipo de interface NRF24LE1 com ADC

Fig. 1: Protótipo de interface NRF24LE1 com ADC

Algumas especificações importantes sobre o ADC embutido do NRF24LE1 são:

Resolução de 6, 8, 10 ou 12 bits – Significa que temos a opção de escolher ADC de 6, 8, 10 ou 12 bits.

14 canais de entrada – 14 pinos de entrada para sinal analógico de entrada

Entrada de terminação única ou diferencial – Entrada de linha única ou entrada de duas linhas

Faixa de fundo de escala definida por referência interna, referência externa ou VDD – Para definir a tensão analógica máxima a ser detectada.

Modo de passo único – Converta o sinal e depois pare

Modo contínuo com taxa de amostragem de 2, 4, 8 ou 16 kbps – Converte continuamente o sinal, a menos que seja interrompido.

Baixo consumo de corrente; apenas 0,1 mA a 2 kbps

Imagem mostrando a interface do NRF24LE1 com ADC

Fig. 2: Imagem mostrando a interface de NRF24LE1 com ADC

Estas são as especificações que extraímos da folha de dados. Agora, para entender o código, pegamos um trecho dos códigos de exemplo fornecidos pela Nordic. Vamos entender a parte principal do código linha por linha.

Funções fornecidas pela biblioteca nórdica

NOME DA FUNÇÃO PARÂMETRO DE ENTRADA SAÍDA DESCRIÇÃO
hal_adc_set_input_channel AIN0 – AIN13 Defina o canal de entrada
hal_adc_set_reference INT/VDD/AIN3/AIN9

Defina a tensão de referência

INT – Referência interna de 1,22V

VDD – referência 3,3V

AIN3/AIN9 – referência externa

hal_adc_set_input_mode

ÚNICO/DIFF_AIN2/

DIFF_AIN6

Defina o tipo de entrada

SINGLE – Entrada de terminação única

DIFF_AIN2 – Entrada diferencial com AIN2 como entrada inversora

DIFF_AIN6 – Entrada diferencial com AIN6 como entrada inversora

hal_adc_set_conversion_mode SINGLE_STEP/CONTÍNUO

Defina o modo de conversão

SINGLE_STEP – etapa única

CONTÍNUO – Contínuo

hal_adc_set_resolution

RES_6BIT/ RES_8BIT/

RES_10BIT/RES_12BIT

Definir resolução ADC

RES_6BIT – resolução de 6 bits

RES_8BIT – resolução de 8 bits

RES_10BIT – resolução de 10 bits

RES_12BIT – resolução de 12 bits

hal_adc_set_data_just APENAS_ESQUERDA/APENAS_DIREITA

Justifique a posição dos dados de saída

JUST_LEFT – Posição esquerda

JUST_Right – posição correta

hal_adc_start Iniciar conversão ADC
hal_adc_busy 0/1

Verifique o status da conversão

0 – Não ocupado

1 – Ocupado

hal_adc_read_LSB Byte Leia o LSB dos dados convertidos
hal_adc_read_MSB Byte Leia o MSB dos dados convertidos

//Configura o ADC

hal_adc_set_input_channel (HAL_ADC_INP_AIN0);

Aqui precisamos atribuir qual pino de entrada estamos configurando para a entrada analógica. Como estamos usando P0.0, definimos isso por HAL_ADC_INP_AIN0

hal_adc_set_reference (HAL_ADC_REF_VDD);

A tensão de referência ADC é mantida igual à VDD (tensão de alimentação), que é 3,3V

hal_adc_set_input_mode (HAL_ADC_SINGLE);

Como estamos usando uma entrada única, ela está definida como HAL_ADC_SINGLE.

hal_adc_set_conversion_mode (HAL_ADC_SINGLE_STEP);

Durante a conversão ADC, podemos definir o modo de conversão. Aqui nós definimos como etapa única

hal_adc_set_resolution (HAL_ADC_RES_8BIT);

Também podemos definir a resolução antes do controlador iniciar as operações ADC. Estamos configurando para 8 bits

hal_adc_set_data_just (HAL_ADC_JUST_RIGHT);

Podemos ajustar os dados para a direita ou para a esquerda na operação ADC. Estamos ajustando para a direita

Encontre abaixo o loop principal onde a operação do ADC está ocorrendo

Enquanto (verdadeiro)
{
hal_adc_start ; // Inicia a conversão ADC
while( hal_adc_busy ) // Espera o ADC terminar uma conversão
{
}
P1 = hal_adc_read_LSB ; // Escreve o resultado ADC em P1
}
}
Também demonstramos o experimento usando um vídeo. Aqui fornecemos a tensão analógica entre 0 e 3,3 V usando o potenciômetro.
Anexamos Led's na porta P1. O número de leds que estão acesos irá variar de acordo com a tensão analógica de entrada fornecida no pino analógico
Você pode compilar o código fornecido aqui usando o software Keil e gravar o NRF usando o gravador para ver o experimento sozinho.
Fique ligado conosco enquanto escrevemos mais para você.
Tenha um bom dia!!

Código-fonte do projeto

###

//Program to 

/* Direitos autorais (c) 2009 Nordic Semiconductor. Todos os direitos reservados.

*
* As informações aqui contidas são propriedade confidencial da Nordic * Semiconductor ASA. Os termos e condições de uso são descritos em detalhes * no CONTRATO DE LICENÇA DE SOFTWARE PADRÃO DE SEMICONDUTORES NÓRDICOS. * * Aos licenciados é concedido o uso gratuito e intransferível das informações. NÃO * GARANTIA DE QUALQUER TIPO é fornecida. Este título NÃO deve ser removido do * o arquivo. * *$ÚltimaRevisãoAlterada: 133$ */ /** @arquivo * @brief Exemplo de modo contínuo ADC * @defgroup adc_cont_example Exemplo de modo contínuo ADC * @{ * @ingroup nrf_examples * * @brief Este exemplo mostra P00 usando o modo contínuo ADC a uma taxa de 2 Ksps * e gera o valor de amostra de 8 bits em P1. * */ //lint -e716 //lint -e714 #incluir "nrf24le1.h" #include "hal_adc.h" #incluir atraso nulo (não assinado em nós) { enquanto (nós--) { _nop_ ; } } vazio principal { // Define P1 como saída P1DIR = 0; P10 = 0; //Configura o ADC hal_adc_set_input_channel(HAL_ADC_INP_AIN0); hal_adc_set_reference(HAL_ADC_REF_VDD); hal_adc_set_input_mode(HAL_ADC_SINGLE); hal_adc_set_conversion_mode(HAL_ADC_CONTINOUS); hal_adc_set_sampling_rate(HAL_ADC_2KSPS); hal_adc_set_resolution(HAL_ADC_RES_8BIT); hal_adc_set_data_just(HAL_ADC_JUST_RIGHT); // Habilita interrupções MISC para habilitar interrupção ADC MISC = 1; //Habilita interrupções globais EA = 1; //Iniciar conversão ADC hal_adc_start ; para(;;){} } //Interrupção ADC (MISC) ADC_ISR { valor interno = 0; val = hal_adc_read_LSB ; P10 = 1; atraso(1000); atraso(val * 4); P10 = 0; atraso(19000 - val * 4); } /** @} */

###

Diagramas de circuito

Diagrama de Circuito-NRF24LE1-Interface-ADC

Vídeo do projeto

블로그로 돌아가기

댓글을 남겨주세요

게시하기 전에 댓글의 승인을 받아야 합니다.