- Configuração e requisitos de hardware
- Diagrama de circuito para interface de LED com Nuvoton N76E003
- Pinos de cronômetro no Nuvoton N76E003
- Registros de cronômetro no Nuvoton N76E003
- Tipos de tempos no Nuvoton N76E003
- Programação do microcontrolador Nuvoton N76E003 para temporizadores
- Código intermitente e verificação de saída para funcionalidade do temporizador
Em nossos tutoriais de microcontrolador Nuvoton anteriores, usamos um programa básico de LED piscando como um guia de primeiros passos e também fizemos a interface do GPIO como uma entrada para conectar um interruptor tátil. Com esse tutorial, estamos totalmente cientes de como configurar o projeto Keil e definir o ambiente para programação do microcontrolador N76E003 Nuvoton. É hora de usar um periférico interno da unidade do microcontrolador e avançar um pouco mais usando o temporizador embutido do N76E003.
Em nosso tutorial anterior, usamos apenas um retardo de software para piscar um LED, portanto, neste tutorial, aprenderemos como usar a função de retardo do temporizador, bem como o temporizador ISR (Rotina de serviço de interrupção) e piscar dois LEDs individuais. Você também pode verificar o Tutorial do Arduino Timer e o tutorial do PIC Timer para verificar como usar os timers com outros microcontroladores. Sem perder muito tempo, vamos avaliar que tipo de configuração de hardware exigimos.
Configuração e requisitos de hardware
Como o requisito deste projeto é aprender a função Timer ISR e a função timer delay, usaremos dois LEDs, dos quais um piscará usando timer delay no loop while e outro piscará dentro da função ISR.
Como um LED está disponível na placa de desenvolvimento N76E003, este projeto requer um LED adicional e o resistor limitador de corrente para limitar a corrente do LED. Os componentes que exigimos -
- Qualquer cor do LED
- Resistor 100R
Sem mencionar que, além dos componentes acima, precisamos da placa de desenvolvimento baseada em microcontrolador N76E003, bem como do programador Nu-Link. Além disso, a placa de ensaio e os fios de conexão também são necessários para conectar todos os componentes.
Diagrama de circuito para interface de LED com Nuvoton N76E003
Como podemos ver no esquema abaixo, o LED de teste está disponível dentro da placa de desenvolvimento e está conectado na porta 1.4. Um LED adicional é conectado à porta 1.5. O resistor R3 é usado para limitar a corrente do LED. Na extrema esquerda, a conexão da interface de programação é mostrada.
Pinos de cronômetro no Nuvoton N76E003
O diagrama de pinos do N76E003 pode ser visto na imagem abaixo
Como podemos ver, cada pino possui especificações diferentes e cada pino pode ser usado para diversos fins. No entanto, o pino 1.5, que é usado como um pino de saída de LED, perderá o PWM e outras funcionalidades. Mas, isso não é um problema, pois outra funcionalidade não é necessária para este projeto.
A razão para escolher o pino 1.5 como saída e o pino 1.6 como entrada é devido à disponibilidade mais próxima dos pinos GND e VDD para fácil conexão. No entanto, neste microcontrolador de 20 pinos, 18 pinos podem ser usados como um pino GPIO e quaisquer outros pinos GPIO podem ser usados para fins relacionados à entrada e saída, exceto o pino 2.0 que é usado exclusivamente para entrada de reinicialização e não pode ser usado como resultado. Todos os pinos GPIO podem ser configurados no modo descrito abaixo.
De acordo com a folha de dados, PxM1.n e PxM2.n são dois registros usados para determinar a operação de controle da porta de E / S. Como estamos usando LED e exigimos o pino como pinos de saída geral, usaremos o modo Quasi-bidirecional para os pinos.
Registros de cronômetro no Nuvoton N76E003
O cronômetro é uma coisa importante para qualquer unidade de microcontrolador. Microcontrolador vem com um periférico de temporizador embutido. O Nuvoton N76E003 também vem com periféricos de timer de 16 bits. No entanto, cada cronômetro é usado para finalidades diferentes e, antes de usar qualquer interface de cronômetro, é importante conhecer o cronômetro.
Tipos de tempos no Nuvoton N76E003
Timer 0 e 1:
Esses dois temporizadores timer0 e timer1 são idênticos aos temporizadores 8051. Esses dois temporizadores podem ser usados como um temporizador geral ou como contadores. Esses dois temporizadores operam em quatro modos. No Modo 0, esses temporizadores irão operar no modo Temporizador / Contador de 13 bits. No Modo 1, o bit de resolução desses dois temporizadores será de 16 bits. No Modo 2, os temporizadores são configurados como modo de recarga automática com resolução de 8 bits. No Modo 3, o temporizador 1 é interrompido e o temporizador 0 pode ser usado como contador e temporizador ao mesmo tempo.
Destes quatro modos, o Modo 1 é usado na maioria dos casos. Esses dois temporizadores podem usar o Fsys (frequência do sistema) no modo fixo ou pré-escalonado (Fys / 12). Ele também pode ser sincronizado a partir de uma fonte de relógio externa.
Timer 2:
O cronômetro 2 também é um cronômetro de 16 bits usado principalmente para captura de formas de onda. Ele também usa o relógio do sistema e pode ser usado em diferentes aplicações, dividindo a frequência do relógio em 8 escalas diferentes. Também pode ser usado no modo de comparação ou para gerar PWM.
Da mesma forma que o Timer 0 e o Timer 1, o Timer 2 pode ser usado no modo de recarga automática.
Timer 3:
O temporizador 3 também é usado como um temporizador de 16 bits e é usado para a fonte de relógio da taxa de baud para o UART. Ele também possui um recurso de recarregamento automático. É importante usar este temporizador apenas para comunicação serial (UART) se o aplicativo requer comunicação UART. É aconselhável não usar este cronômetro para outros fins em tal caso, devido ao processo conflitante na configuração do cronômetro.
Watchdog Timer:
O temporizador de watchdog pode ser usado como um temporizador de 6 bits padrão, mas não é usado para essa finalidade. O uso do temporizador Watchdog como um temporizador de propósito geral é aplicável para aplicações de baixo consumo de energia, onde o microcontrolador permanece principalmente no modo inativo.
Watchdog Timer, como o nome sugere, sempre verifica se o microcontrolador está funcionando corretamente ou não. No caso de um microcontrolador travado ou parado, o WDT (Watchdog Timer) redefine o microcontrolador automaticamente, o que garante que o microcontrolador funcione em um fluxo de código contínuo sem ficar preso, travado ou interrompido.
Temporizador de auto-despertar:
Este é outro periférico temporizador que atende a um processo de temporização dedicado da mesma forma que um temporizador watchdog. Este temporizador, desperta o sistema periodicamente quando o microcontrolador está funcionando no modo de baixa energia.
Este periférico temporizador pode ser usado internamente ou usando periféricos externos para despertar o microcontrolador do modo de hibernação. Para este projeto, usaremos o Timer 1 e o Timer 2.
Programação do microcontrolador Nuvoton N76E003 para temporizadores
Configurando os pinos como saída:
Vamos começar com a seção de saída primeiro. Estamos usando dois LEDs, um é o LED integrado, denominado Teste, e conectado à porta P1.4 e um LED externo conectado ao pino P1.5.
Portanto, esses dois pinos são configurados como um pino de saída para conectar esses dois LEDs usando os trechos de código abaixo.
#define Test_LED P14 #define LED1 P15
Esses dois pinos são definidos como pinos quase bidirecionais na função de configuração.
configuração de void (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Configurando a função do temporizador:
Na função de configuração, o Timer 2 deve ser configurado para obter a saída desejada. Para isso, definiremos o registrador T2MOD com um fator de divisão de relógio de 1/128 e o usaremos no modo de atraso de recarregamento automático. Aqui está a visão geral do registro T2MOD-
O 4,5 e 6º bit do registro T2MOD definem o divisor de clock do temporizador 2 e o 7º bit define o modo de recarregamento automático. Isso é feito usando a linha abaixo -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Essas duas linhas são definidas no arquivo Function_define.h como
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Agora, essas linhas definem o valor de tempo necessário para o Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Que é mais bem definido no arquivo Function_define.h como-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12.500 * 128/16000000 = 100 ms
Portanto, 16000000 é a frequência do cristal de 16 Mhz que está configurando o atraso de tempo de 100 ms.
Abaixo de duas linhas os bytes Baixo e Alto do Timer 2 serão esvaziados.
TL2 = 0; TH2 = 0;
Finalmente, o código a seguir habilitará a interrupção do cronômetro 2 e iniciará o cronômetro 2.
set_ET2; // Habilita a interrupção do Timer2 set_EA; set_TR2; // Timer2 run
A função de configuração completa pode ser vista nos códigos abaixo
configuração de void (void) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Habilita a interrupção do Timer2 set_EA; set_TR2; // Timer2 run }
Função ISR do temporizador 2:
A função ISR do Timer 2 pode ser vista no código abaixo.
vazio Timer2_ISR (vazio) interrupção 5 { clr_TF2; // Apaga o sinalizador de interrupção do Timer2 LED1 = ~ LED1; // Alternar LED1, conectado em P1.5; }
Código intermitente e verificação de saída para funcionalidade do temporizador
O código (fornecido abaixo) quando compilado retornou 0 aviso e 0 erros e eu o atualizei usando o método de flash padrão no Keil. Depois de piscar, os LEDs estavam piscando em um atraso de temporizador definido conforme programado.
Confira o vídeo abaixo para uma demonstração completa de como a placa funciona para este código. Espero que você tenha gostado do tutorial e aprendido algo útil. Se tiver alguma dúvida, deixe-os na seção de comentários abaixo. Você também pode usar nossos fóruns para postar outras questões técnicas.