FRDM-KL46Z_PWM-8_TSI_SLCD Es un demo sobre la utilización del TSI en modo Analógico para controlar el porcentaje de modulación de cada uno de los canales PWM y mostrar su valor en el display SLCD de la Tarjeta.
Dependencies: mbed tsi_sensor SLCD
Revision 1:a15b72b2d043, committed 2019-06-26
- Comitter:
- Antulius
- Date:
- Wed Jun 26 18:04:24 2019 +0000
- Parent:
- 0:ec9a22de0d15
- Commit message:
- FRDM-KL46Z_PWM-8_TSI_SLCD
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Jul 02 00:53:00 2015 +0000 +++ b/main.cpp Wed Jun 26 18:04:24 2019 +0000 @@ -1,7 +1,39 @@ +/* ########################################################################### +** Archivo : main.c +** Proyecto : FRDM-KL46Z_PWM-8_TSI_SLCD +** Procesador : MKL46Z256VLL4 +** Tarjeta : FDRM-KL46Z +** Herramienta : Mbed +** Version : Driver 01.01 +** Fecha/Hora : 27-05-2019, 15:18, # CodeGen: 0 +** Descripción : +** Este proyecto realiza el control de 8 salidas PWM para su aplicación +** en la iluminación de una barra de LED's controaldo su intensidad +** individualmente mediante el TSI +** Componentes : PWM(D0-D7), DisplayLCD, TSI, GPIO +** Autores : Monserrat Gutierrez Aranda +** ATEAM Development Group: +** - Antulio Morgado Valle +** Versión : Beta +** Revisión : A +** Release : 0 +** Bugs & Fixes : +** Date : +** +** ###########################################################################*/ +/* +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +: Includes +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +*/ #include "mbed.h" #include "SLCD.h" #include "tsi_sensor.h" - +/* +:............................................................................... +: Definiciones +:............................................................................... +*/ // Very simple program to read the analog slider and print its value // on the LCD. Also flashes the RED led. // -- Al Williams @@ -16,22 +48,201 @@ #else #error TARGET NOT DEFINED #endif - - TSIAnalogSlider tsi(ELEC0, ELEC1, 40); - - +/* ++------------------------------------------------------------------------------- +| Configuración de Puertos ++------------------------------------------------------------------------------- +*/ +//Configuración Terminal Serial +Serial terminal(USBTX,USBRX); // OjO USBTX = PTA2, USBRX = PTA1 +//Configuración TSI Analógico +TSIAnalogSlider tsi(ELEC0, ELEC1, 40); +//Configuración LCD +SLCD slcd; +//Configuración de PWM's para control de luminocidad +/* +PwmOut led1(PTC1); // PTC1_TPM0_CH0 +PwmOut led2(PTA4); // PTA4_TPM0_CH1 +PwmOut led3(PTA5); // PTA5_TPM0_CH2 +PwmOut led4(PTA6); // PTA6_TPM0_CH3 +PwmOut led5(PTA7); // PTA7_TPM0_CH4 +PwmOut led6(PTD5); // PTD5_TPM0_CH5 +PwmOut led7(PTA12); // PTA12_TPM1_CH0 +PwmOut led8(PTA13); // PTA13_TPM1_CH1 +*/ +PwmOut led1(A5); // PTC1_TPM0_CH0 +PwmOut led2(A4); // PTC2_TPM0_CH1 +PwmOut led3(D5); // PTA5_TPM0_CH2 +PwmOut led4(D2); // PTD2_TPM0_CH3 +PwmOut led5(D6); // PTD6_TPM0_CH4 +PwmOut led6(D7); // PTC9_TPM0_CH5 +PwmOut led7(D3); // PTA12_TPM1_CH0 +PwmOut led8(D8); // PTA13_TPM1_CH1 DigitalOut gpo(D0); DigitalOut led(LED_RED); - +//Configuración de terminales de entrada +//DigitalIn Push1(PTC12); // +//DigitalIn Push2(PTC3); // +//Interrupciones externas +InterruptIn incrementa (SW1); // +InterruptIn decrementa (SW3); // +/* ++------------------------------------------------------------------------------- +| Variables Globales de Usuario ++------------------------------------------------------------------------------- +*/ +//LCD +char buffer[5]; +//Selección de PWM +int menu = 0; +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +| Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ +//LCD +char Int2Char(int); +void Number2Buffer(int, int); +void imprimir(int, int); +//Interrupciones +void incrementaIRQ(void); +void decrementaIRQ(void); - SLCD slcd; +/* END Definitions */ +//////////////////////////////////////////////////////////////////////////////// +/* +#=============================================================================== +| +| P R O G R A M A P R I N C I P A L +| +#=============================================================================== +*/ int main() { - while (true) { - float f=tsi.readPercentage(); - slcd.printf("%1.3f",f); - led = !led; // toggle led - wait(0.2f); + //Se inicializa la Terminal Serial + terminal.baud(115200); + terminal.printf("8 PWM's controlados por TSI"); +//Se inicializa el LCD 4x8 + slcd.Home(); + slcd.printf("HOLA"); + wait(2.5); + slcd.All_Segments(1); + wait(0.5); + slcd.All_Segments(0); + wait(0.1); +//Encendemos el punto 1 de la LCD + slcd.DP1(1); +//Inicializamos interrupciones externas + incrementa.mode(PullUp); + decrementa.mode(PullUp); + incrementa.fall(&incrementaIRQ); // + decrementa.fall(&decrementaIRQ); // +//Se inicializan los PWM's + led1 = 0; + led2 = 0; + led3 = 0; + led4 = 0; + led5 = 0; + led6 = 0; + led7 = 0; + led8 = 0; +//Bucle infinito + while (true) + { + switch(menu) + { + case 0: + if(tsi.readPercentage()!=0){led1 = tsi.readPercentage();} + imprimir(1,led1*100); + terminal.printf("1,%d \r",led1*100 ); + break; + case 1: + if(tsi.readPercentage()!=0){led2 = tsi.readPercentage();} + imprimir(2,led2*100); + terminal.printf("2,%d \r",led2*100 ); + break; + case 2: + if(tsi.readPercentage()!=0){led3 = tsi.readPercentage();} + imprimir(3,led3*100); + terminal.printf("3,%d \r",led3*100 ); + break; + case 3: + if(tsi.readPercentage()!=0){led4 = tsi.readPercentage();} + imprimir(4,led4*100); + terminal.printf("4,%d \r",led4*100 ); + break; + case 4: + if(tsi.readPercentage()!=0){led5 = tsi.readPercentage();} + imprimir(5,led5*100); + terminal.printf("5,%d \r",led5*100 ); + break; + case 5: + if(tsi.readPercentage()!=0){led6 = tsi.readPercentage();} + imprimir(6,led6*100); + terminal.printf("6,%d \r",led6*100 ); + break; + case 6: + if(tsi.readPercentage()!=0){led7 = tsi.readPercentage();} + imprimir(7,led7*100); + terminal.printf("7,%d \r",led7*100 ); + break; + case 7: + if(tsi.readPercentage()!=0){led8 = tsi.readPercentage();} + imprimir(8,led8*100); + terminal.printf("8,%d \r",led8*100 ); + break; + default: + break; + } + wait(0.1); } -} \ No newline at end of file +} + +/* END main */ +/* +................................................................................ +: Rutinas de los Vectores de Interrupción +................................................................................ +*/ +void incrementaIRQ() +{ + if(menu>=7){menu = 7;} + else{menu++;} +} +void decrementaIRQ() +{ + if(menu<=0){menu = 0;} + else{menu--;} +} + +/* END Events */ +/* +________________________________________________________________________________ +| +| Funciones Prototipo +|_______________________________________________________________________________ +*/ +char Int2Char(int numero) +{ + return numero + '0'; +} +void Number2Buffer(int display, int porcentaje) +{ + int centena = porcentaje/100; + int decena = (porcentaje-(centena*100))/10; + int unidad = porcentaje-centena*100-decena*10; + buffer[0]= Int2Char(display); + buffer[1]= Int2Char(centena); + buffer[2]= Int2Char(decena); + buffer[3]= Int2Char(unidad); +} +void imprimir(int display, int porcentaje) +{ + Number2Buffer(display,porcentaje); + slcd.printf(buffer); +} + +/* END Program */ + +/* END Mbed */ \ No newline at end of file