- Componentes necessários e configuração de hardware
- Diagrama de circuito Nuvoton N76E003 para ler tensão analógica
- Informações sobre GPIO e pinos analógicos em N76E003
- Informações sobre periférico ADC em N76E003
- Programando N76E003 para ADC
- Flash do código e da saída
Conversor analógico para digital (ADC) é o recurso de hardware mais usado em um microcontrolador. Ele pega a tensão analógica e a converte em um valor digital. Como os microcontroladores são dispositivos digitais e funcionam com os dígitos binários 1 e 0, eles não podiam processar os dados analógicos diretamente. Assim, um ADC é usado para pegar a tensão analógica e convertê-la em seu valor digital equivalente que um microcontrolador pode entender. Se você quiser mais informações sobre Conversor Analógico para Digital (ADC), pode verificar o artigo no link.
Existem diferentes sensores disponíveis em eletrônica que fornecem saída analógica, como os sensores de gás MQ, sensor do acelerômetro ADXL335, etc. Assim, usando o conversor analógico para digital, esses sensores podem ter interface com uma unidade de microcontrolador. Você também pode verificar outros tutoriais listados abaixo, para usar o ADC com outros microcontroladores.
- Como usar ADC no Arduino Uno?
- Interface do ADC0808 com o microcontrolador 8051
- Usando Módulo ADC do Microcontrolador PIC
- Tutorial do Raspberry Pi ADC
- Como usar ADC em MSP430G2 - Medindo Tensão Analógica
- Como usar ADC em STM32F103C8
Neste tutorial, usaremos o periférico ADC embutido da unidade de microcontrolador N76E003, portanto, vamos avaliar que tipo de configuração de hardware exigimos para esta aplicação.
Componentes necessários e configuração de hardware
Para usar o ADC no N76E003, usaremos um divisor de tensão com um potenciômetro e leremos a tensão entre 0V-5,0V. A tensão será exibida no LCD de caracteres de 16x2, se você é novo com LCD e N76E003, pode verificar como fazer a interface do LCD com Nuvoton N76E003. Portanto, o principal componente necessário para este projeto é o LCD de 16x2 caracteres. Para este projeto, usaremos os componentes abaixo -
- Character LCD 16x2
- Resistor 1k
- Potenciômetro de 50k ou trim pot
- Poucos fios Berg
- Poucos fios de conexão
- Tábua de pão
Sem mencionar que, além dos componentes acima, precisamos da placa de desenvolvimento baseada em microcontrolador N76E003, bem como do programador Nu-Link. Uma fonte de alimentação adicional de 5 V também é necessária, pois o LCD consome corrente suficiente que o programador não pode fornecer.
Diagrama de circuito Nuvoton N76E003 para ler tensão analógica
Como podemos ver no esquema, a porta P0 é usada para a conexão relacionada ao LCD. Na extrema esquerda, a conexão da interface de programação é mostrada. O potenciômetro atua como um divisor de tensão e isso é detectado pela entrada analógica 0 (AN0).
Informações sobre GPIO e pinos analógicos em N76E003
A imagem abaixo ilustra os pinos GPIO disponíveis na unidade de microcontrolador N76E003AT20. Porém, dos 20 pinos, para a conexão relacionada ao LCD, a Porta P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 e P0.7) é usada. Os pinos analógicos são destacados em cores VERMELHAS.
Como podemos ver, a porta P0 possui no máximo pinos analógicos, mas esses são usados para comunicação relacionada ao LCD. Portanto, P3.0 e P1.7 estão disponíveis como pinos de entrada analógica AIN1 e AIN0. Como este projeto requer apenas um pino analógico, P1.7, que é o canal 0 de entrada analógica, é usado para este projeto.
Informações sobre periférico ADC em N76E003
O N76E003 fornece um SAR ADC de 12 bits. É um recurso muito bom do N76E003 que tem uma resolução muito boa de ADC. O ADC possui entradas de 8 canais no modo de extremidade única. A interface do ADC é bastante simples e direta.
O primeiro passo é selecionar a entrada do canal ADC. Existem entradas de 8 canais disponíveis nos microcontroladores N76E003. Depois de selecionar as entradas ADC ou os pinos de E / S, todos os pinos devem ser configurados para a direção no código. Todos os pinos usados para a entrada analógica são pinos de entrada do microcontrolador, portanto, todos os pinos precisam ser definidos como modo de entrada apenas (alta impedância). Eles podem ser configurados usando os registros PxM1 e PxM2. Esses dois registros definem os modos de E / S onde x representa o número da porta (por exemplo, porta P1.0 o registro será P1M1 e P1M2, para P3.0 será P3M1 e P3M2, etc.) A configuração pode ser visto na imagem abaixo-
A configuração do ADC é feita por dois registradores ADCCON0 e ADCCON1. A descrição do registro ADCCON0 é mostrada abaixo.
Os primeiros 4 bits do registro do bit 0 ao bit 3 são usados para definir a seleção do canal ADC. Como estamos usando o canal AIN0, a seleção será 0000 para esses quatro bits.
O 6º e o 7º bits são os mais importantes. O ADCS é necessário para definir 1 para iniciar a conversão ADC e o ADCF fornecerá informações sobre a conversão ADC bem-sucedida. Ele precisa ser definido como 0 pelo firmware para iniciar a conversão ADC. O próximo registro é o ADCCON1-
O registro ADCCON1 é usado principalmente para a conversão ADC acionada por fontes externas. No entanto, para operações normais relacionadas a pesquisa, o ADCEN de primeiro bit é necessário para definir 1 para ligar o circuito ADC.
A seguir, a entrada do canal ADC precisa ser controlada no registro AINDIDS onde as entradas digitais podem ser desconectadas.
O n representa o bit do canal (por exemplo, o canal AIN0 precisará ser controlado usando o primeiro bit P17DIDS do registro AINDIDS). A entrada digital precisa ser habilitada, caso contrário, será lido como 0. Todas essas são as configurações básicas do ADC. Agora, limpando o ADCF e configurando o ADCS, a conversão do ADC pode ser iniciada. O valor convertido estará disponível nos registros abaixo -
E
Ambos os registros são de 8 bits. Como o ADC fornece dados de 12 bits, o ADCRH é usado como completo (8 bits) e o ADCRL é usado como meio (4 bits).
Programando N76E003 para ADC
A codificação de um módulo específico sempre é um trabalho agitado, portanto, é fornecida uma biblioteca LCD simples, mas poderosa, que será muito útil para interface de LCD de 16x2 caracteres com o N76E003. A biblioteca de LCD 16x2 está disponível em nosso repositório Github, que pode ser baixado do link abaixo.
Baixe a biblioteca de LCD 16x2 para Nuvoton N76E003
Por favor, ter a biblioteca (por clonagem ou baixar) e basta incluir o lcd.c e LCD.h arquivos em seu projeto Keil N76E003 para uma fácil integração do LCD 16x2 no aplicativo ou projeto desejado. A biblioteca fornecerá as seguintes funções úteis relacionadas à exibição -
- Inicialize o LCD.
- Envie o comando para o LCD.
- Escreva para o LCD.
- Coloque uma string no LCD (16 caracteres).
- Imprima o caractere enviando um valor hexadecimal.
- Percorra mensagens longas com mais de 16 caracteres.
- Imprima números inteiros diretamente no LCD.
A codificação para ADC é simples. Na função de configuração Enable_ADC_AIN0; é usado para configurar o ADC para a entrada AIN0 . Isso é definido no arquivo.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
Portanto, a linha acima define o pino como uma entrada e configura o registro ADCCON0, ADCCON1 , bem como o registro AINDIDS . A função abaixo lerá o ADC do registro ADCRH e ADCRL, mas com resolução de 12 bits.
unsigned int ADC_read (void) { registrar unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; enquanto (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; return adc_value; }
O bit é deslocado para a esquerda 4 vezes e depois adicionado à variável de dados. Na função principal, o ADC está lendo os dados e sendo impressos diretamente no display. No entanto, a tensão também é convertida usando uma razão ou relação entre a tensão dividida pelo valor do bit.
Um ADC de 12 bits fornecerá 4095 bits na entrada de 5,0V. Dividindo assim o 5,0V / 4095 = 0,0012210012210012V
Portanto, 1 dígito de alterações de bit será igual às alterações em 0,001 V (aproximadamente). Isso é feito na função principal mostrada abaixo.
void main (void) { int adc_data; configuração(); lcd_com (0x01); enquanto (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Dados ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); voltagem = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", voltagem); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Os dados são convertidos do valor do bit em voltagem e, usando uma função sprintf , a saída é convertida em uma string e enviada ao LCD.
Flash do código e da saída
O código retornou 0 aviso e 0 erros e foi exibido usando o método de flash padrão do Keil, você pode ver a mensagem piscando abaixo. Se você é novo no Keil ou no Nuvoton, verifique os primeiros passos com o microcontrolador Nuvoton para entender os fundamentos e como fazer o upload do código.
A reconstrução começou: Projeto: cronômetro Rebuild target 'Target 1' assembling STARTUP.A51… compilando main.c… compilando lcd.c… compilando Delay.c… vinculando… Tamanho do programa: dados = 101.3 xdata = 0 code = 4162 criando arquivo hexadecimal de ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Erro (s), 0 Aviso (s). Tempo de construção decorrido: 00:00:02 Carregar "G: \\ n76E003 \\ Display \\ Objetos \\ timer" Apagamento do Flash concluído. Flash Write Done: 4162 bytes programados. Verificação do Flash concluída: 4162 bytes verificados. O carregamento do Flash terminou às 11h56h04
A imagem abaixo mostra o hardware conectado na fonte de alimentação usando um adaptador DC e o display mostra a saída de tensão configurada pelo potenciômetro à direita.
Se girarmos o potenciômetro, a tensão dada ao pino ADC também mudará e podemos notar o valor ADC e a tensão analógica exibidos no LCD. Você pode conferir o vídeo abaixo para a demonstração de trabalho completa deste tutorial.
Espero que você tenha gostado do artigo e aprendido algo útil. Se tiver dúvidas, deixe-as na seção de comentários abaixo ou use nossos fóruns para postar outras questões técnicas.