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
main.cpp@1:a15b72b2d043, 2019-06-26 (annotated)
- 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?
User | Revision | Line number | New 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 */ |