Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

#ifdef __USE_CMSIS

#include "LPC17xx.h"
#endif

#include <cr_section_macros.h>
#include <NXP/crp.h>
#include "lpc17xx_gpio.h"
#include "lpc17xx_timer.h"
#include <math.h>
#include "lpc17xx_adc.h"
#include "lpc17xx_pinsel.h"
#include "lpc17xx_pwm.h"
#include "lpc17xx_dac.h"

#define RGB_RED 0x01000000


#define RGB_BLUE 0x02000000
#define RGB_GREEN 0x04000000

__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;

extern int Timer0_Wait();

void CONFIG_GPIO (void);


void INIT_RGB (void);
void INIT_ADC (void);
void INIT_DAC (void);
void INIT_PWM (void);

void Contador_binario(void);
void Kit(void);
void Contador_RGB(void);
void ADC_A_Binario(void);
void ADC_A_RGB(void);
void Clean (void);
void ADC_A_PWM6(void);
void ADC_A_DAC(void);

char Inputs;
int color
[7]={0x01000000,0x02000000,0x03000000,0x04000000,0x05000000,0x06000000,0x07000000};
int count=0;
int varR=0; // colores rgb
int kitC=1;
uint32_t vkit=0x00000001; //Variables kit
int kitD=1;
uint32_t analog = 0;
int Duty_Cicle=0;
int ADC_Value=0;

int main(void)
{
CONFIG_GPIO ();
INIT_RGB ();
INIT_ADC();
INIT_PWM();
INIT_DAC();
while(1)
{
Inputs= GPIO_ReadValue(2);
switch(Inputs)
{
case 0:
Clean();
break;
case 1:
Contador_binario();
break;
case 2:
Kit();
break;
case 3:
Contador_RGB();
break;
case 4:
ADC_A_Binario();
break;
case 5:
ADC_A_RGB();
break;
case 6:
ADC_A_PWM6();
break;
case 7:
ADC_A_DAC();
break;
default:
Clean();
break;
}
}
}

void CONFIG_GPIO (void)


{
GPIO_SetDir(0,0x000000FF, 1);
GPIO_ClearValue(0,0x000000FF);
GPIO_SetDir(2,0x000000FF, 0);
GPIO_ClearValue(2,0x000000FF);

}
void INIT_PWM (void)
{
PWM_TIMERCFG_Type PWMCfgDat;
PWM_MATCHCFG_Type PWMMatchCfgDat;
PINSEL_CFG_Type PinCfg;

PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_TICKVAL;
PWMCfgDat.PrescaleValue = 1;
PWM_Init(LPC_PWM1, PWM_MODE_TIMER, (void *) &PWMCfgDat);
PinCfg.Funcnum = 1;
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Portnum = 2;
PinCfg.Pinnum = 5;
PINSEL_ConfigPin(&PinCfg);

PWM_MatchUpdate(LPC_PWM1, 0, 1024, PWM_MATCH_UPDATE_NOW);


PWMMatchCfgDat.IntOnMatch = DISABLE;
PWMMatchCfgDat.MatchChannel = 0;
PWMMatchCfgDat.ResetOnMatch = ENABLE;
PWMMatchCfgDat.StopOnMatch = DISABLE;
PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);

PWM_ChannelConfig(LPC_PWM1, 6, PWM_CHANNEL_SINGLE_EDGE);

/* Set up match value */


PWM_MatchUpdate(LPC_PWM1, 6, 1, PWM_MATCH_UPDATE_NOW);
/* Configure match option */
PWMMatchCfgDat.IntOnMatch = DISABLE;
PWMMatchCfgDat.MatchChannel = 6;
PWMMatchCfgDat.ResetOnMatch = DISABLE;
PWMMatchCfgDat.StopOnMatch = DISABLE;
PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);
/* Enable PWM Channel Output */
PWM_ChannelCmd(LPC_PWM1, 6, ENABLE);

/* Reset and Start counter */


PWM_ResetCounter(LPC_PWM1);
PWM_CounterCmd(LPC_PWM1, ENABLE);

/* Start PWM now */


PWM_Cmd(LPC_PWM1, ENABLE);
}
void INIT_RGB (void)
{
GPIO_SetDir(0,0x01000000, 1); //j16
GPIO_SetDir(0,0x02000000, 1); //j17
GPIO_SetDir(0,0x04000000, 1); //j18
}

void INIT_ADC (void)


{
/*
* Init ADC pin connect
* AD0.0 on P0.23
*/
PINSEL_CFG_Type PinCfg;
PinCfg.Funcnum = 1;
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Pinnum = 23;
PinCfg.Portnum = 0;
PINSEL_ConfigPin(&PinCfg);

/* Configuration for ADC :


* Frequency at 1Mhz
* ADC channel 0, no Interrupt
*/
ADC_Init(LPC_ADC, 100000);
ADC_IntConfig(LPC_ADC,ADC_ADINTEN0,ENABLE);
ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_0,ENABLE);
ADC_EdgeStartConfig(LPC_ADC,ADC_START_ON_FALLING);
}

void Contador_binario(void)
{
Clean ();
GPIO_SetValue(0,count);
count++;
Timer0_Wait(200);

void Clean(void)
{
GPIO_ClearValue(0,0x000000FF);
GPIO_ClearValue(0,0x0F000000);
}

void Kit(void)
{
Clean();
if(kitC==8 && kitD==8)
{
kitC=1;
kitD=1;
}
if(kitC<8)
{
GPIO_SetValue(0,vkit);
vkit=vkit<<1;
Timer0_Wait(250);
Clean();
kitC++;

}
if(kitD<8 && kitC==8)
{
GPIO_SetValue(0,vkit);
vkit=vkit>>1;
Timer0_Wait(250);
Clean();

kitD++;
}

void Contador_RGB(void)
{
Clean();
if(varR>6)
{
varR=0;
}
GPIO_SetValue (0,color[varR]);
Timer0_Wait(500);
varR++;
}
void ADC_A_PWM6(void)
{
Clean();
ADC_StartCmd(LPC_ADC,ADC_START_NOW);

ADC_Value = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_0);
Duty_Cicle = ADC_Value/4;

PWM_MatchUpdate(LPC_PWM1, 6, Duty_Cicle, PWM_MATCH_UPDATE_NOW);

Timer0_Wait(50);
}
void ADC_A_Binario(void)
{
Clean();
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
analog=ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_0);
analog=analog/16;
GPIO_SetValue(0,analog);
Timer0_Wait(100);
}
void ADC_A_RGB(void)
{
Clean();
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
analog=ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_0);
if(analog<585)
{
GPIO_SetValue(0,color[0]);
Timer0_Wait(300);
Clean();
}
if(585<analog && analog<1170)
{
GPIO_SetValue (0,color[1]);
Timer0_Wait(300);
Clean();
}
if(1170<analog && analog<1755)
{
GPIO_SetValue (0,color[2]);
Timer0_Wait(300);
Clean();
}
if(1755<analog && analog<2340)
{
GPIO_SetValue (0,color[3]);
Timer0_Wait(300);
Clean();
}
if(2340<analog && analog<2925)
{
GPIO_SetValue (0,color[4]);
Timer0_Wait(300);
Clean();
}
if(2925<analog && analog<3510)
{
GPIO_SetValue (0,color[5]);
Timer0_Wait(300);
Clean();
}
if(3510<analog && analog<4095)
{
GPIO_SetValue (0,color[6]);
Timer0_Wait(300);
Clean();
}
}
void ADC_A_DAC (void)
{
ADC_StartCmd(LPC_ADC,ADC_START_NOW);

ADC_Value = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_0);

ADC_Value = ADC_Value/4;

DAC_UpdateValue ( LPC_DAC,(uint32_t)(ADC_Value));

Timer0_Wait(50);
}
void INIT_DAC(void)
{
PINSEL_CFG_Type PinCfg;

PinCfg.Funcnum = 2;
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Pinnum = 26;
PinCfg.Portnum = 0;
PINSEL_ConfigPin(&PinCfg);
DAC_Init(LPC_DAC);
}

You might also like