1. Adicionando o LED
Com o projeto já criado, abra o "Components Library" e procure por LED. É possível utilizar quaisquer um dos Beans (componentes) listados na figura 1.
Figura 1. Selecionando o LED.
Fonte: Elaborado pelo autor.
Neste exemplo foi escolhido o bean LED. Clique duas vezes sobre o bean para que o mesmo seja adicionado ao projeto como visto na figura 2. Neste exemplo foram adicionados 3 LEDs para controlar o led RGB de 3 terminais.
Figura 2. Componentes adicionados.
Fonte: Elaborado pelo autor.
Com o LED adicionado é necessário fazer algumas configurações. Clicando duas vezes sobre um dos LED listados na janela Components, será exibida uma janela semelhante a da fig 3.
Figura 3. Configurando o LED.
Fonte: Elaborado pelo autor.
O primeiro parâmetro é o nome do componente dentro do projeto, alterado para LEDVERM neste exemplo, para controlar o led vermelho. Na fig 4. é visto o esquema de ligação do LED RGB na placa FRDM-KL25Z.
Figura 4. Esquema do LED RGB na FRDM-KL25Z.
Fonte: (NXP, 2016)
Na fig. 4, nota-se que os catodos dos Leds estão conectados aos terminais do MCU, sendo os pinos PTB18, PTB19 e PTD1 usados para conectar aos Leds vermelho, verde e azul, respectivamente. Na caixa de configuração do LED, fig. 3, há um checkbox que deve ser habilitado caso seja o terminal do anodo do LED esteja conectado ao MCU, portanto este deve estar desabilitado.
Também na fig. 3 na configuração "Pin" é necessário apontar qual o pino do MCU está conectado ao Led. Como neste caso está sendo configurado o Led vermelho, então deve ser atribuído o pino PTB18. Para configurar o pino é necessário clicar sobre no botão em destaque na fig. 3. Na fig. 5 é mostrado as configurações adicionais para o pino.
Figura 4. Configurações adicionais do LED.
Fonte: Elaborado pelo autor.
Na fig. 5 temos os campos "Component name", que já foi especificado anteriormente, "Pin Signal", que deve ser deixado em branco, e finalmente na lista "Pin for I/O" seleciona-se o pino desejado (PTB18). O campo "Direction" deve estar selecionada a função Output e no campo "Init. value" pode-se optar para que o led inicie aceso (1) ou apagado (0).
2. Preparando o código fonte
Feita a configuração para o LED o próximo passo é a preparação do código fonte. Para acessar o arquivo main.c, basta expandir a pasta do projeto no "Project Explorer" e abrir a pasta "Sources". Nesta pasta estão localizados os arquivos com os fontes do projeto criado no início do tutorial. Na fig. 5 pode ser vista tela da IDE com as pastas do projeto expandidas. Basta clicar duas vezes sobre o arquivo main.c para que ele seja exibido.
Figura 5. Projeto expandido.
Fonte: Elaborado pelo autor.
Nas linhas iniciais do arquivo main.c estão listadas as diversas bibliotecas usadas no projeto, definições do MCU etc. Na caixa abaixo há uma cópia do código acima completo .
CÓDIGO
/* ###################################################################
** Filename : main.c
** Project : kl25 pisca LED
** Processor : MKL25Z128VLK4
** Version : Driver 01.01
** Compiler : GNU C Compiler
** Date/Time : 2016-06-05, 15:02, # CodeGen: 0
** Abstract :
** Main module.
** This module contains user's application code.
** Settings :
** Contents :
** No public methods
**
** ###################################################################*/
/*!
** @file main.c
** @version 01.01
** @brief
** Main module.
** This module contains user's application code.
*/
/*!
** @addtogroup main_module main module documentation
** @{
*/
/* MODULE main */
/* Including needed modules to compile this module/procedure */
#include "Cpu.h"
#include "Events.h"
#include "LEDVERM.h"
#include "LEDpin1.h"
#include "BitIoLdd1.h"
#include "LEDVERDE.h"
#include "LEDpin2.h"
#include "BitIoLdd2.h"
#include "LEDAZUL.h"
#include "LEDpin3.h"
#include "BitIoLdd3.h"
#include "WAIT1.h"
/* Including shared modules, which are used for whole project */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"
/* User includes (#include below this line is not maintained by Processor Expert) */
/*lint -save -e970 Disable MISRA rule (6.3) checking. */
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
/* Write your local variable definition here */
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
LEDVERM_Init();LEDVERDE_Init();LEDAZUL_Init();
LEDAZUL_Off();LEDVERDE_Off();LEDVERM_Off();
/* Write your code here */
for (;;) {
//LEDVERDE_Neg();
LEDVERDE_Neg();
WAIT1_Waitms(500);
LEDVERM_Neg();
WAIT1_Waitms(500);
LEDAZUL_Neg();
WAIT1_Waitms(500);
}
/*** 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!!! ***/
/* END main */
/*!
** @}
*/
/*
** ###################################################################
**
** This file was created by Processor Expert 10.5 [05.21]
** for the Freescale Kinetis series of microcontrollers.
**
** ###################################################################
*/
Na corpo da função main() há o código da aplicação, que não é muito grande. A função PE_low_level_init() inicializa os objetos contidos no projeto. Logo abaixo desta função, deve ser adicionada a função que de fato inicializa o objeto LED adicionado. A fig. 6 mostra os métodos disponíveis para o objeto LEDVERM.
Figura 6. Objeto LEDVERM.
Fonte: Elaborado pelo autor.
É necessário adicionar o método Init() do LEDVERM, logo abaixo da função PE_low_level_init(). Isto é feito arrastando com o mouse o método Init para dentro da janela de código. Ao fazê-lo o código ficará como mostrado abaixo.
CAIXA DE TEXTO
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
LEDVERM_Init();
Para comandar o LEDVERM, basta inserir alguns dos métodos disponíveis na lista. Por exemplo, ON(), OFF(), NEG() que respectivamente, ligam, desligam ou invertem o estado do LED. No código abaixo foi adicionado o método NEG() no loop para manter o led piscando.
CAIXA DE TEXTO
for (;;) { LEDVERMELHO_Neg(); WAIT1_Waitms(500); }
Para controlar o tempo que o Led permanece aceso ou apagado é necessário adicionar o bean WAIT, no "Component Library". No loop deve ser adicionado o método waitms() que recebe o tempo em milisegundos como parâmetro da função.
O processo de transferência do programa para a placa é abordado no tutorial Transferindo um programa.
Bons projetos para vocês!!!
Autor: Júlio César M. Ruzicki Eng.
Referências
NXP, NXP Products. Disponível em <FRDM-KL25Z: Freedom Development Platform for Kinetis® KL14, KL15, KL24, KL25 MCUs>. Acessado em Maio de 2016.