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

Committer:
Antulius
Date:
Wed Jun 26 18:04:24 2019 +0000
Revision:
1:a15b72b2d043
Parent:
0:ec9a22de0d15
FRDM-KL46Z_PWM-8_TSI_SLCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 1:a15b72b2d043 1 /* ###########################################################################
Antulius 1:a15b72b2d043 2 ** Archivo : main.c
Antulius 1:a15b72b2d043 3 ** Proyecto : FRDM-KL46Z_PWM-8_TSI_SLCD
Antulius 1:a15b72b2d043 4 ** Procesador : MKL46Z256VLL4
Antulius 1:a15b72b2d043 5 ** Tarjeta : FDRM-KL46Z
Antulius 1:a15b72b2d043 6 ** Herramienta : Mbed
Antulius 1:a15b72b2d043 7 ** Version : Driver 01.01
Antulius 1:a15b72b2d043 8 ** Fecha/Hora : 27-05-2019, 15:18, # CodeGen: 0
Antulius 1:a15b72b2d043 9 ** Descripción :
Antulius 1:a15b72b2d043 10 ** Este proyecto realiza el control de 8 salidas PWM para su aplicación
Antulius 1:a15b72b2d043 11 ** en la iluminación de una barra de LED's controaldo su intensidad
Antulius 1:a15b72b2d043 12 ** individualmente mediante el TSI
Antulius 1:a15b72b2d043 13 ** Componentes : PWM(D0-D7), DisplayLCD, TSI, GPIO
Antulius 1:a15b72b2d043 14 ** Autores : Monserrat Gutierrez Aranda
Antulius 1:a15b72b2d043 15 ** ATEAM Development Group:
Antulius 1:a15b72b2d043 16 ** - Antulio Morgado Valle
Antulius 1:a15b72b2d043 17 ** Versión : Beta
Antulius 1:a15b72b2d043 18 ** Revisión : A
Antulius 1:a15b72b2d043 19 ** Release : 0
Antulius 1:a15b72b2d043 20 ** Bugs & Fixes :
Antulius 1:a15b72b2d043 21 ** Date :
Antulius 1:a15b72b2d043 22 **
Antulius 1:a15b72b2d043 23 ** ###########################################################################*/
Antulius 1:a15b72b2d043 24 /*
Antulius 1:a15b72b2d043 25 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 1:a15b72b2d043 26 : Includes
Antulius 1:a15b72b2d043 27 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 1:a15b72b2d043 28 */
wd5gnr 0:ec9a22de0d15 29 #include "mbed.h"
wd5gnr 0:ec9a22de0d15 30 #include "SLCD.h"
wd5gnr 0:ec9a22de0d15 31 #include "tsi_sensor.h"
Antulius 1:a15b72b2d043 32 /*
Antulius 1:a15b72b2d043 33 :...............................................................................
Antulius 1:a15b72b2d043 34 : Definiciones
Antulius 1:a15b72b2d043 35 :...............................................................................
Antulius 1:a15b72b2d043 36 */
wd5gnr 0:ec9a22de0d15 37 // Very simple program to read the analog slider and print its value
wd5gnr 0:ec9a22de0d15 38 // on the LCD. Also flashes the RED led.
wd5gnr 0:ec9a22de0d15 39 // -- Al Williams
wd5gnr 0:ec9a22de0d15 40
wd5gnr 0:ec9a22de0d15 41 /* This defines will be replaced by PinNames soon */
wd5gnr 0:ec9a22de0d15 42 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
wd5gnr 0:ec9a22de0d15 43 #define ELEC0 9
wd5gnr 0:ec9a22de0d15 44 #define ELEC1 10
wd5gnr 0:ec9a22de0d15 45 #elif defined (TARGET_KL05Z)
wd5gnr 0:ec9a22de0d15 46 #define ELEC0 9
wd5gnr 0:ec9a22de0d15 47 #define ELEC1 8
wd5gnr 0:ec9a22de0d15 48 #else
wd5gnr 0:ec9a22de0d15 49 #error TARGET NOT DEFINED
wd5gnr 0:ec9a22de0d15 50 #endif
Antulius 1:a15b72b2d043 51 /*
Antulius 1:a15b72b2d043 52 +-------------------------------------------------------------------------------
Antulius 1:a15b72b2d043 53 | Configuración de Puertos
Antulius 1:a15b72b2d043 54 +-------------------------------------------------------------------------------
Antulius 1:a15b72b2d043 55 */
Antulius 1:a15b72b2d043 56 //Configuración Terminal Serial
Antulius 1:a15b72b2d043 57 Serial terminal(USBTX,USBRX); // OjO USBTX = PTA2, USBRX = PTA1
Antulius 1:a15b72b2d043 58 //Configuración TSI Analógico
Antulius 1:a15b72b2d043 59 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
Antulius 1:a15b72b2d043 60 //Configuración LCD
Antulius 1:a15b72b2d043 61 SLCD slcd;
Antulius 1:a15b72b2d043 62 //Configuración de PWM's para control de luminocidad
Antulius 1:a15b72b2d043 63 /*
Antulius 1:a15b72b2d043 64 PwmOut led1(PTC1); // PTC1_TPM0_CH0
Antulius 1:a15b72b2d043 65 PwmOut led2(PTA4); // PTA4_TPM0_CH1
Antulius 1:a15b72b2d043 66 PwmOut led3(PTA5); // PTA5_TPM0_CH2
Antulius 1:a15b72b2d043 67 PwmOut led4(PTA6); // PTA6_TPM0_CH3
Antulius 1:a15b72b2d043 68 PwmOut led5(PTA7); // PTA7_TPM0_CH4
Antulius 1:a15b72b2d043 69 PwmOut led6(PTD5); // PTD5_TPM0_CH5
Antulius 1:a15b72b2d043 70 PwmOut led7(PTA12); // PTA12_TPM1_CH0
Antulius 1:a15b72b2d043 71 PwmOut led8(PTA13); // PTA13_TPM1_CH1
Antulius 1:a15b72b2d043 72 */
Antulius 1:a15b72b2d043 73 PwmOut led1(A5); // PTC1_TPM0_CH0
Antulius 1:a15b72b2d043 74 PwmOut led2(A4); // PTC2_TPM0_CH1
Antulius 1:a15b72b2d043 75 PwmOut led3(D5); // PTA5_TPM0_CH2
Antulius 1:a15b72b2d043 76 PwmOut led4(D2); // PTD2_TPM0_CH3
Antulius 1:a15b72b2d043 77 PwmOut led5(D6); // PTD6_TPM0_CH4
Antulius 1:a15b72b2d043 78 PwmOut led6(D7); // PTC9_TPM0_CH5
Antulius 1:a15b72b2d043 79 PwmOut led7(D3); // PTA12_TPM1_CH0
Antulius 1:a15b72b2d043 80 PwmOut led8(D8); // PTA13_TPM1_CH1
wd5gnr 0:ec9a22de0d15 81
wd5gnr 0:ec9a22de0d15 82 DigitalOut gpo(D0);
wd5gnr 0:ec9a22de0d15 83 DigitalOut led(LED_RED);
Antulius 1:a15b72b2d043 84 //Configuración de terminales de entrada
Antulius 1:a15b72b2d043 85 //DigitalIn Push1(PTC12); //
Antulius 1:a15b72b2d043 86 //DigitalIn Push2(PTC3); //
Antulius 1:a15b72b2d043 87 //Interrupciones externas
Antulius 1:a15b72b2d043 88 InterruptIn incrementa (SW1); //
Antulius 1:a15b72b2d043 89 InterruptIn decrementa (SW3); //
Antulius 1:a15b72b2d043 90 /*
Antulius 1:a15b72b2d043 91 +-------------------------------------------------------------------------------
Antulius 1:a15b72b2d043 92 | Variables Globales de Usuario
Antulius 1:a15b72b2d043 93 +-------------------------------------------------------------------------------
Antulius 1:a15b72b2d043 94 */
Antulius 1:a15b72b2d043 95 //LCD
Antulius 1:a15b72b2d043 96 char buffer[5];
Antulius 1:a15b72b2d043 97 //Selección de PWM
Antulius 1:a15b72b2d043 98 int menu = 0;
Antulius 1:a15b72b2d043 99 /*
Antulius 1:a15b72b2d043 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 1:a15b72b2d043 101 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 1:a15b72b2d043 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 1:a15b72b2d043 103 */
Antulius 1:a15b72b2d043 104 //LCD
Antulius 1:a15b72b2d043 105 char Int2Char(int);
Antulius 1:a15b72b2d043 106 void Number2Buffer(int, int);
Antulius 1:a15b72b2d043 107 void imprimir(int, int);
Antulius 1:a15b72b2d043 108 //Interrupciones
Antulius 1:a15b72b2d043 109 void incrementaIRQ(void);
Antulius 1:a15b72b2d043 110 void decrementaIRQ(void);
wd5gnr 0:ec9a22de0d15 111
Antulius 1:a15b72b2d043 112 /* END Definitions */
Antulius 1:a15b72b2d043 113 ////////////////////////////////////////////////////////////////////////////////
Antulius 1:a15b72b2d043 114 /*
Antulius 1:a15b72b2d043 115 #===============================================================================
Antulius 1:a15b72b2d043 116 |
Antulius 1:a15b72b2d043 117 | P R O G R A M A P R I N C I P A L
Antulius 1:a15b72b2d043 118 |
Antulius 1:a15b72b2d043 119 #===============================================================================
Antulius 1:a15b72b2d043 120 */
wd5gnr 0:ec9a22de0d15 121 int main()
wd5gnr 0:ec9a22de0d15 122 {
Antulius 1:a15b72b2d043 123 //Se inicializa la Terminal Serial
Antulius 1:a15b72b2d043 124 terminal.baud(115200);
Antulius 1:a15b72b2d043 125 terminal.printf("8 PWM's controlados por TSI");
Antulius 1:a15b72b2d043 126 //Se inicializa el LCD 4x8
Antulius 1:a15b72b2d043 127 slcd.Home();
Antulius 1:a15b72b2d043 128 slcd.printf("HOLA");
Antulius 1:a15b72b2d043 129 wait(2.5);
Antulius 1:a15b72b2d043 130 slcd.All_Segments(1);
Antulius 1:a15b72b2d043 131 wait(0.5);
Antulius 1:a15b72b2d043 132 slcd.All_Segments(0);
Antulius 1:a15b72b2d043 133 wait(0.1);
Antulius 1:a15b72b2d043 134 //Encendemos el punto 1 de la LCD
Antulius 1:a15b72b2d043 135 slcd.DP1(1);
Antulius 1:a15b72b2d043 136 //Inicializamos interrupciones externas
Antulius 1:a15b72b2d043 137 incrementa.mode(PullUp);
Antulius 1:a15b72b2d043 138 decrementa.mode(PullUp);
Antulius 1:a15b72b2d043 139 incrementa.fall(&incrementaIRQ); //
Antulius 1:a15b72b2d043 140 decrementa.fall(&decrementaIRQ); //
Antulius 1:a15b72b2d043 141 //Se inicializan los PWM's
Antulius 1:a15b72b2d043 142 led1 = 0;
Antulius 1:a15b72b2d043 143 led2 = 0;
Antulius 1:a15b72b2d043 144 led3 = 0;
Antulius 1:a15b72b2d043 145 led4 = 0;
Antulius 1:a15b72b2d043 146 led5 = 0;
Antulius 1:a15b72b2d043 147 led6 = 0;
Antulius 1:a15b72b2d043 148 led7 = 0;
Antulius 1:a15b72b2d043 149 led8 = 0;
Antulius 1:a15b72b2d043 150 //Bucle infinito
Antulius 1:a15b72b2d043 151 while (true)
Antulius 1:a15b72b2d043 152 {
Antulius 1:a15b72b2d043 153 switch(menu)
Antulius 1:a15b72b2d043 154 {
Antulius 1:a15b72b2d043 155 case 0:
Antulius 1:a15b72b2d043 156 if(tsi.readPercentage()!=0){led1 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 157 imprimir(1,led1*100);
Antulius 1:a15b72b2d043 158 terminal.printf("1,%d \r",led1*100 );
Antulius 1:a15b72b2d043 159 break;
Antulius 1:a15b72b2d043 160 case 1:
Antulius 1:a15b72b2d043 161 if(tsi.readPercentage()!=0){led2 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 162 imprimir(2,led2*100);
Antulius 1:a15b72b2d043 163 terminal.printf("2,%d \r",led2*100 );
Antulius 1:a15b72b2d043 164 break;
Antulius 1:a15b72b2d043 165 case 2:
Antulius 1:a15b72b2d043 166 if(tsi.readPercentage()!=0){led3 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 167 imprimir(3,led3*100);
Antulius 1:a15b72b2d043 168 terminal.printf("3,%d \r",led3*100 );
Antulius 1:a15b72b2d043 169 break;
Antulius 1:a15b72b2d043 170 case 3:
Antulius 1:a15b72b2d043 171 if(tsi.readPercentage()!=0){led4 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 172 imprimir(4,led4*100);
Antulius 1:a15b72b2d043 173 terminal.printf("4,%d \r",led4*100 );
Antulius 1:a15b72b2d043 174 break;
Antulius 1:a15b72b2d043 175 case 4:
Antulius 1:a15b72b2d043 176 if(tsi.readPercentage()!=0){led5 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 177 imprimir(5,led5*100);
Antulius 1:a15b72b2d043 178 terminal.printf("5,%d \r",led5*100 );
Antulius 1:a15b72b2d043 179 break;
Antulius 1:a15b72b2d043 180 case 5:
Antulius 1:a15b72b2d043 181 if(tsi.readPercentage()!=0){led6 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 182 imprimir(6,led6*100);
Antulius 1:a15b72b2d043 183 terminal.printf("6,%d \r",led6*100 );
Antulius 1:a15b72b2d043 184 break;
Antulius 1:a15b72b2d043 185 case 6:
Antulius 1:a15b72b2d043 186 if(tsi.readPercentage()!=0){led7 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 187 imprimir(7,led7*100);
Antulius 1:a15b72b2d043 188 terminal.printf("7,%d \r",led7*100 );
Antulius 1:a15b72b2d043 189 break;
Antulius 1:a15b72b2d043 190 case 7:
Antulius 1:a15b72b2d043 191 if(tsi.readPercentage()!=0){led8 = tsi.readPercentage();}
Antulius 1:a15b72b2d043 192 imprimir(8,led8*100);
Antulius 1:a15b72b2d043 193 terminal.printf("8,%d \r",led8*100 );
Antulius 1:a15b72b2d043 194 break;
Antulius 1:a15b72b2d043 195 default:
Antulius 1:a15b72b2d043 196 break;
Antulius 1:a15b72b2d043 197 }
Antulius 1:a15b72b2d043 198 wait(0.1);
wd5gnr 0:ec9a22de0d15 199 }
Antulius 1:a15b72b2d043 200 }
Antulius 1:a15b72b2d043 201
Antulius 1:a15b72b2d043 202 /* END main */
Antulius 1:a15b72b2d043 203 /*
Antulius 1:a15b72b2d043 204 ................................................................................
Antulius 1:a15b72b2d043 205 : Rutinas de los Vectores de Interrupción
Antulius 1:a15b72b2d043 206 ................................................................................
Antulius 1:a15b72b2d043 207 */
Antulius 1:a15b72b2d043 208 void incrementaIRQ()
Antulius 1:a15b72b2d043 209 {
Antulius 1:a15b72b2d043 210 if(menu>=7){menu = 7;}
Antulius 1:a15b72b2d043 211 else{menu++;}
Antulius 1:a15b72b2d043 212 }
Antulius 1:a15b72b2d043 213 void decrementaIRQ()
Antulius 1:a15b72b2d043 214 {
Antulius 1:a15b72b2d043 215 if(menu<=0){menu = 0;}
Antulius 1:a15b72b2d043 216 else{menu--;}
Antulius 1:a15b72b2d043 217 }
Antulius 1:a15b72b2d043 218
Antulius 1:a15b72b2d043 219 /* END Events */
Antulius 1:a15b72b2d043 220 /*
Antulius 1:a15b72b2d043 221 ________________________________________________________________________________
Antulius 1:a15b72b2d043 222 |
Antulius 1:a15b72b2d043 223 | Funciones Prototipo
Antulius 1:a15b72b2d043 224 |_______________________________________________________________________________
Antulius 1:a15b72b2d043 225 */
Antulius 1:a15b72b2d043 226 char Int2Char(int numero)
Antulius 1:a15b72b2d043 227 {
Antulius 1:a15b72b2d043 228 return numero + '0';
Antulius 1:a15b72b2d043 229 }
Antulius 1:a15b72b2d043 230 void Number2Buffer(int display, int porcentaje)
Antulius 1:a15b72b2d043 231 {
Antulius 1:a15b72b2d043 232 int centena = porcentaje/100;
Antulius 1:a15b72b2d043 233 int decena = (porcentaje-(centena*100))/10;
Antulius 1:a15b72b2d043 234 int unidad = porcentaje-centena*100-decena*10;
Antulius 1:a15b72b2d043 235 buffer[0]= Int2Char(display);
Antulius 1:a15b72b2d043 236 buffer[1]= Int2Char(centena);
Antulius 1:a15b72b2d043 237 buffer[2]= Int2Char(decena);
Antulius 1:a15b72b2d043 238 buffer[3]= Int2Char(unidad);
Antulius 1:a15b72b2d043 239 }
Antulius 1:a15b72b2d043 240 void imprimir(int display, int porcentaje)
Antulius 1:a15b72b2d043 241 {
Antulius 1:a15b72b2d043 242 Number2Buffer(display,porcentaje);
Antulius 1:a15b72b2d043 243 slcd.printf(buffer);
Antulius 1:a15b72b2d043 244 }
Antulius 1:a15b72b2d043 245
Antulius 1:a15b72b2d043 246 /* END Program */
Antulius 1:a15b72b2d043 247
Antulius 1:a15b72b2d043 248 /* END Mbed */