- Configuração e requisitos de hardware
- N76E003 LED e circuito de interface de botão de pressão
- Diagrama de Pinagem do N76E003
- Programa de controle GPIO simples para N76E003
- Programação de N76E003 e verificação de saída
Em nosso tutorial anterior, usamos um programa básico de LED piscando como um guia de introdução ao N76E003, já aprendemos como configurar o IDE Keil e configurar o ambiente para programar a unidade de microcontrolador Nuvoton N76E003. É hora de avançar um pouco mais e usar a interface GPIO básica para controlar o hardware adicional. Se você estiver interessado, você também pode verificar outros tutoriais GPIO de microcontrolador que estão listados abaixo-
- STM32 Nucleo64 com CubeMx e TrueSTUDIO - controle de LED
- STM8S com controle Cosmic C GPIO
- PIC com MPLABX LED Blink Tutorial
- MSP430 com Code Composer Studio - Controle Simples de LED
Já que em nosso tutorial anterior, usamos apenas um LED para piscar usando um pino IO como saída. Neste tutorial, aprenderemos como usar outro pino IO como entrada e controlar um LED adicional. Sem perder muito tempo, vamos avaliar que tipo de configuração de hardware exigimos.
Configuração e requisitos de hardware
Como um switch precisa ser usado como entrada, a primeira coisa que exigimos é um botão. Também exigimos que um LED adicional seja controlado por esse botão. Além desses dois, também exigimos um resistor para limitar a corrente do LED e um resistor adicional para fins de pull-down através do botão. Isso será demonstrado na seção esquemática. Os componentes que exigimos -
- Um botão de pressão (qualquer tipo de interruptor momentâneo especificamente - interruptor tátil)
- Qualquer cor do LED
- Resistor de 4,7 k para fins de pull-down
- 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, conforme mostrado abaixo.
N76E003 LED e circuito de interface de botão de pressão
Como podemos ver no esquema abaixo, o LED de teste que está dentro da placa de desenvolvimento está conectado na porta 1.4 e um LED adicional está conectado na porta 1.5. O resistor R3 é usado para limitar a corrente do LED.
No pino 1.6, um botão chamado SW está conectado. Sempre que o botão for pressionado, o pino ficará alto. Do contrário, ficará baixo pelo resistor pull-down R1 de 4,7K. Você pode aprender mais sobre resistores pull-up e pull-down se for novo neste conceito.
O pino também é um pino relacionado ao programa que é acessado pelo programador. É usado para enviar dados do programa. No entanto, veremos a razão por trás da seleção desses pinos e também obteremos informações justas sobre o mapeamento de pinos do N76E003.
Diagrama de Pinagem do N76E003
O diagrama de pinos do N76E003 pode ser visto na imagem abaixo
Como podemos ver, cada pino possui múltiplas funções e pode ser usado para diferentes propósitos. Vamos dar um exemplo. O pino 1.7 pode ser usado como uma interrupção ou entrada analógica ou como uma operação de entrada-saída de propósito geral. Portanto, se algum pino for usado como pinos de E / S, a respectiva funcionalidade não estará disponível.
Devido a isso, o pino 1.5 que é usado como pino de saída do 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. O pino 2.0 é usado exclusivamente para entrada Reset e não pode ser usado como saída. Além deste pino, todos os pinos 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. Agora, começar a escrever e ler uma porta GPIO é uma coisa completamente diferente. Porque a gravação em um registro de controle de porta altera o estado de travamento da porta, enquanto a leitura da porta obtém o status do estado lógico. Mas para ler uma porta, ela deve ser configurada em um modo de entrada.
Programa de controle GPIO simples para N76E003
O programa completo usado neste tutorial pode ser encontrado na parte inferior desta página, a explicação do código é a seguinte.
Definir o pino como entrada
Vamos começar com a entrada primeiro. Conforme discutido antes, para ler o status de uma porta, ela precisa ser definida como entrada. Portanto, como selecionamos P1.6 como nosso pino de comutação de entrada, o denotamos por meio da linha abaixo do trecho de código.
# define SW P16
Este mesmo pino precisa ser definido como entrada. Assim, na função de configuração, o pino é definido como entrada usando a linha abaixo.
configuração de void (void) {P14_Quasi_Mode; P15_Quasi_Mode; P16_Input_Mode; }
Esta linha P16_Input_Mode; é definido no arquivo de cabeçalho Function_define.h na “BSP include library” que define o bit de pino como P1M1- = SET_BIT6; P1M2 & = ~ SET_BIT6 . O SET_BIT6 também é definido no mesmo arquivo de cabeçalho que-
#define SET_BIT6 0x40
Configurando os pinos como saída
Da mesma forma que o pino de entrada, o pino de saída que é usado pelo LED de teste onboard e o LED externo 1 também é definido na primeira seção do código com os respectivos PINs.
#define Test_LED P14 #define LED1 P15
Esses pinos são definidos como uma saída na função de configuração usando as linhas abaixo.
configuração de void (void) { P14_Quasi_Mode; // Output P15_Quasi_Mode; // Output P16_Input_Mode; }
Essas linhas também são definidas no arquivo de cabeçalho Function_define.h, onde define o bit de pino como P1M1 & = ~ SET_BIT4; P1M2 & = ~ SET_BIT4 . O SET_BIT6 também é definido no mesmo arquivo de cabeçalho que-
#define SET_BIT4 0x10
Loop infinito While
A Hardware, se conectado com a potência e funcionando perfeitamente que deve dar saída continuamente, a aplicação nunca para. Ele faz a mesma coisa infinitas vezes. Aí vem a função de um loop while infinito. O aplicativo dentro do loop while é executado infinitamente.
enquanto (1) { Test_LED = 0; sw_delay (150); Test_LED = 1; sw_delay (150); if (SW == 1) {LED1 = 0; } senão {LED1 = 1; }}}
O loop while acima pisca o led de acordo com o valor sw_delay e também verifica o status do SW. Se a chave for pressionada, o P1.6 estará alto e, portanto, quando for pressionado, o status de leitura será 1. Nesta situação, por enquanto, a chave é pressionada e a porta P1.6 permanece alta, o O LED1 acenderá.
Programação de N76E003 e verificação de saída
Em nosso tutorial de introdução ao N76E003, já aprendemos como programar o N76E003, então vamos apenas repetir os mesmos passos aqui para programar nossa placa. O código foi compilado com sucesso e retornou 0 aviso e 0 erros e fez flash usando o método de flash padrão do Keil.
Como você pode ver na imagem acima, nosso LED externo acende quando pressiono o botão. O funcionamento completo do projeto pode ser encontrado no vídeo no link abaixo. 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 fazer outras perguntas técnicas.