1. Introdução
Neste tutorial são apresentados os procedimentos para efetuar a leitura da tecla presente na placa do kit FRDM-KL25Z, visto na figura 1. Foram usados os componentes BiTIO e LEDbit.
Figura 1. Diagrama de blocos.
Fonte: NXP, 2013
O botão da placa está conectado ao pino PTA20, já o LED RGB, aos pinos PTB18, PTB19 e PTD1.
2. Configuração
Com os componentes acima mencionados adicionados, se faz necessário a configuração dos mesmos. A figura 2 mostra a janela de configuração do Bean BITIO que serve para monitorar a chave presente no kit.
Figura 2. Configurações do BITIO
Fonte: Elaborado pelo autor.
Dentre as diversas configurações há o campo "component name" ao qual o usuário pode atribuir um nome mais amigável para o Bean. Neste exemplo foi atribuído o nome "chave". Para alterar o nome o usuário precisa pressionar o botão "Advanced" para que o ambiente permita a edição do nome do componente. O próximo campo a ser definido é o "Pin for I/O" onde é indicado pino físico ao qual a chave está conectado. Clicando na seta ao lado, será exibida uma lista com os pinos disponíveis para o MCU, o usuário pode digitar ou selecionar o pino. Em seguida deve-se selecionar a direção do pino, no campo "Direction" que neste exemplo deve configurado como "Input" para que o pino se comporte como uma entrada digital. As outras opções disponíveis são: "Output" e "Input/Output", que respectivamente configuram o pino como saída digital ou bidirecional.
Para a manipulação do LED, podem ser usados dois componentes: o LEDBit ou o BITIO. O componente BITIO pode ser adicionado e configurado como saída digital, tratando o LED como uma saída digital qualquer. O bean LEDBit, trás opções adicionais úteis para a manipulação de um LED, tais como, o controle de intensidade (modo PWM) e seleção de acionamento por Anodo ou catodo. A figura 3, mostra a aba com as opções para o bean LEDbit.
Figura 3. Opções para o LEDBit.
Fonte: Elaborado pelo autor.
Semelhantemente ao BITIO, este Bean também apresenta um campo "component name". Na aba "HW interface" tem-se as definições do modo de funcionamento do pino: a opção "high pin value means ON", "On/Off", "PWM". A primeira, quando habilitada, diz que o LED acenderá quando o nível lógico na saída do pino for "alto", mas no caso deste kit o catodo do Led está conectado ao pino, dessa forma esta opção deve ser mantida desabilitada. A segunda diz que o pino será tratado como saída digital, se habilitada. A terceira opção permite fazer o controle de intensidade usando o modo PWM.
Neste exemplo foi usado o modo "On/Off" e em configurado o pino a ser utilizado, que neste caso podem ser um dos 3: PTB18 (vermelho), PTB19 (verde) e PTD1 (azul).
3. Implementação do código
Com os componentes adicionados e configurados a última etapa é a implementação do código que faz a monitoração da chave e o acionamento do LED. Antes de alterar o código fonte existente se faz necessário gerar um novo código baseado nos componentes e configurações existentes. O Processor Expert gerencia a criação do novo código através do botão em destaque visto na figura 4. Este botão aciona a geração do código fonte baseado nos componentes e configurações feitas até o momento.
Figura 4. Processor Expert.
Fonte: Elaborado pelo autor.
O monitoramento da chave pode ser feito de algumas maneiras, algumas mais eficientes do que outras, sem falar no caso do uso de interrupções que é tratado em outro tutorial. No trecho abaixo o monitoramento é feito utilizando IF, onde é utilizado o método chave_GetVal() retorna o nível lógico da entrada conectada à chave. Quando a chave está pressionada o nível lógico presente no pino é "baixo", conforme pode ser observado na figura 5, quando a chave não está pressionada o nível é "alto". A estrutura de decisão IF, então decide acender o LED quando a função chave_GetVal() retorna "zero", usando o método vermelho_On() do Bean LEDBit e decide apagar o LED quando a função retornar "1".
CÓDIGO
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
/* Write your local variable definition here */
uint8_t i_switch;
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
// vermelho_Init();
/*** End of Processor Expert internal initialization. ***/
for (;;) {
if (!chave_GetVal()) {
vermelho_On();
} else {
vermelho_Off();
}
}
/* Write your code here */
/* For example: for(;;) { } */
/*** Don't write any code pass this line, or it will be deleted during code generation. ***/
/*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of RTOS startup code. ***/
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for (;;) {
}
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
Figura 5. Botão reset.
Fonte: Recorte de (NXP, 2017).
De forma alternativa, o código pode ser reescrito como mostrado no trecho abaixo, onde foi usado o método vermelho_Put(), que recebe o valor "1" ou "0" como parâmetro para acender ou apagar, respectivamente o Led vermelho. Foi usado também o operador binário "~" para inverter o estado do valor retornado pelo método chave_GetVal().
CÓDIGO
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
/* Write your local variable definition here */
uint8_t i_switch;
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
// vermelho_Init();
/*** End of Processor Expert internal initialization. ***/
for (;;) {
vermelho_Put(~chave_GetVal());
}
/* Write your code here */
/* For example: for(;;) { } */
/*** Don't write any code pass this line, or it will be deleted during code generation. ***/
/*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of RTOS startup code. ***/
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for (;;) {
}
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
Bons porjetos!!!
Referências
NXP, FREEDOM KL25Z. Disponível em: www.nxp.com. Acessado em Janeiro de 2017.