FRDM-KL46Z_Pasos Es un programa que permite controlar un Motor a Pasos en sus diferntes modos de operación y tampbien permite controlar un Motor de CD en Modo ON-OFF Adelante y Atrás
Dependencies: mbed Debounced tsi_sensor TSI TextLCD MMA8451Q USBDevice
main.cpp@1:e7f73d96ddde, 2019-06-28 (annotated)
- Committer:
- Antulius
- Date:
- Fri Jun 28 17:52:12 2019 +0000
- Revision:
- 1:e7f73d96ddde
- Parent:
- 0:a935d23434d9
FRDM-KL46Z_Pasos
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Antulius | 1:e7f73d96ddde | 1 | /* ########################################################################### |
Antulius | 1:e7f73d96ddde | 2 | ** Archivo : main.c |
Antulius | 1:e7f73d96ddde | 3 | ** Proyecto : FRDM-KL46Z_Pasos |
Antulius | 1:e7f73d96ddde | 4 | ** Procesador : MKL46Z256VLL4 |
Antulius | 1:e7f73d96ddde | 5 | ** Herramienta : Mbed |
Antulius | 1:e7f73d96ddde | 6 | ** Version : Driver 01.01 |
Antulius | 1:e7f73d96ddde | 7 | ** Compilador : GNU C Compiler |
Antulius | 1:e7f73d96ddde | 8 | ** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0 |
Antulius | 1:e7f73d96ddde | 9 | ** Descripción : |
Antulius | 1:e7f73d96ddde | 10 | ** El programa genera las diferentes secuencias para operar un motor a pasos |
Antulius | 1:e7f73d96ddde | 11 | ** (Stepper Motor). |
Antulius | 1:e7f73d96ddde | 12 | ** Este programa tiene 3 modos de operación: |
Antulius | 1:e7f73d96ddde | 13 | ** 1) Medio Paso |
Antulius | 1:e7f73d96ddde | 14 | ** 2) Pasos Completo |
Antulius | 1:e7f73d96ddde | 15 | ** 3) Pasos Wave |
Antulius | 1:e7f73d96ddde | 16 | ** Además puede girar en el sentido horario o anti horario |
Antulius | 1:e7f73d96ddde | 17 | ** Componentes : GPIO, Timer, etc . |
Antulius | 1:e7f73d96ddde | 18 | ** Configuraciones : Includes, Stacks y Drivers externos |
Antulius | 1:e7f73d96ddde | 19 | ** Autores : |
Antulius | 1:e7f73d96ddde | 20 | ** ATEAM Development Group: |
Antulius | 1:e7f73d96ddde | 21 | ** - Antulio Morgado Valle |
Antulius | 1:e7f73d96ddde | 22 | ** |
Antulius | 1:e7f73d96ddde | 23 | ** Versión : Beta |
Antulius | 1:e7f73d96ddde | 24 | ** Revisión : A |
Antulius | 1:e7f73d96ddde | 25 | ** Release : 0 |
Antulius | 1:e7f73d96ddde | 26 | ** Bugs & Fixes : |
Antulius | 1:e7f73d96ddde | 27 | ** Date : 20/10/2019 |
Antulius | 1:e7f73d96ddde | 28 | ** Added support for Led_RGB |
Antulius | 1:e7f73d96ddde | 29 | ** 22/09/2018 |
Antulius | 1:e7f73d96ddde | 30 | ** Added LCD Menu, Beta version (with bugs) |
Antulius | 1:e7f73d96ddde | 31 | ** |
Antulius | 1:e7f73d96ddde | 32 | ** ###########################################################################*/ |
Antulius | 1:e7f73d96ddde | 33 | /* |
Antulius | 1:e7f73d96ddde | 34 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
Antulius | 1:e7f73d96ddde | 35 | : Includes |
Antulius | 1:e7f73d96ddde | 36 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
Antulius | 1:e7f73d96ddde | 37 | */ |
Antulius | 0:a935d23434d9 | 38 | #include "mbed.h" |
Antulius | 1:e7f73d96ddde | 39 | #include "MKL46Z4.h" |
Antulius | 1:e7f73d96ddde | 40 | #include "stdio.h" |
Antulius | 1:e7f73d96ddde | 41 | #include "string.h" |
Antulius | 1:e7f73d96ddde | 42 | #include "TSISensor.h" // Libreria para Touch Sensor Interface |
Antulius | 1:e7f73d96ddde | 43 | #include "TextLCD.h" // Libreria para escritura en LCD |
Antulius | 1:e7f73d96ddde | 44 | #include "I2C.h" // Libreria para la interface I2C |
Antulius | 1:e7f73d96ddde | 45 | #include "SPI.h" // Libreria para la interface SPI |
Antulius | 1:e7f73d96ddde | 46 | #include "Serial.h" // Libreria para la interface Serial |
Antulius | 1:e7f73d96ddde | 47 | #include "MMA8451Q.h" // Libreria para el Acelerómetro |
Antulius | 1:e7f73d96ddde | 48 | |
Antulius | 1:e7f73d96ddde | 49 | #include "stdio.h" |
Antulius | 1:e7f73d96ddde | 50 | /* |
Antulius | 1:e7f73d96ddde | 51 | :............................................................................... |
Antulius | 1:e7f73d96ddde | 52 | : Definiciones |
Antulius | 1:e7f73d96ddde | 53 | :............................................................................... |
Antulius | 1:e7f73d96ddde | 54 | */ |
Antulius | 1:e7f73d96ddde | 55 | #define MMA8451_I2C_ADDRESS (0x1d<<1) // Dirección del Acelerómetro |
Antulius | 1:e7f73d96ddde | 56 | |
Antulius | 1:e7f73d96ddde | 57 | #define Modo_Wave 3 |
Antulius | 1:e7f73d96ddde | 58 | #define Paso_Doble 2 |
Antulius | 1:e7f73d96ddde | 59 | #define Paso_Completo 1 |
Antulius | 1:e7f73d96ddde | 60 | #define Medio_Paso 0 |
Antulius | 1:e7f73d96ddde | 61 | #define Sentido_Horario 1 |
Antulius | 1:e7f73d96ddde | 62 | #define Sentido_Antihorario 0 |
Antulius | 1:e7f73d96ddde | 63 | #define On 0 |
Antulius | 1:e7f73d96ddde | 64 | #define Off 1 |
Antulius | 1:e7f73d96ddde | 65 | #define TRUE 1 |
Antulius | 1:e7f73d96ddde | 66 | #define FALSE 0 |
Antulius | 1:e7f73d96ddde | 67 | #define DO2 0.0078125 // 128 Hz |
Antulius | 1:e7f73d96ddde | 68 | #define DOs2 0.0073740180703125 // 136 Hz |
Antulius | 1:e7f73d96ddde | 69 | #define RE2 0.006960146234375 // 144 Hz |
Antulius | 1:e7f73d96ddde | 70 | #define REs2 0.0065695032421875 // 152 Hz |
Antulius | 1:e7f73d96ddde | 71 | #define MI2 0.006200785359375 // 161 Hz |
Antulius | 1:e7f73d96ddde | 72 | #define FA2 0.005852762015625 // 171 Hz |
Antulius | 1:e7f73d96ddde | 73 | #define FAs2 0.0055242717265625 // 181 Hz |
Antulius | 1:e7f73d96ddde | 74 | #define SOL2 0.0052142181796875 // 192 Hz |
Antulius | 1:e7f73d96ddde | 75 | #define SOLs2 0.0049215666015625 // 203 Hz |
Antulius | 1:e7f73d96ddde | 76 | #define LA2 0.004645340296875 // 215 Hz |
Antulius | 1:e7f73d96ddde | 77 | #define LAs2 0.004384617375 // 228 Hz |
Antulius | 1:e7f73d96ddde | 78 | #define SI2 0.0041385277109375 // 242 Hz |
Antulius | 1:e7f73d96ddde | 79 | #define DO3 0.00390625 // 256 Hz |
Antulius | 1:e7f73d96ddde | 80 | #define DOs3 0.00368700903515625 // 271 Hz |
Antulius | 1:e7f73d96ddde | 81 | #define RE3 0.0034800731171875 // 287 Hz |
Antulius | 1:e7f73d96ddde | 82 | #define REs3 0.00328475162109375 // 304 Hz |
Antulius | 1:e7f73d96ddde | 83 | #define MI3 0.0031003926796875 // 323 Hz |
Antulius | 1:e7f73d96ddde | 84 | #define FA3 0.0029263810078125 // 342 Hz |
Antulius | 1:e7f73d96ddde | 85 | #define FAs3 0.0055242717265625 // 362 Hz |
Antulius | 1:e7f73d96ddde | 86 | #define SOL3 0.00260710908984375 // 384 Hz |
Antulius | 1:e7f73d96ddde | 87 | #define SOLs3 0.00246078330078125 // 406 Hz |
Antulius | 1:e7f73d96ddde | 88 | #define LA3 0.0023226701484375 // 431 Hz |
Antulius | 1:e7f73d96ddde | 89 | #define LAs3 0.0021923086875 // 456 Hz |
Antulius | 1:e7f73d96ddde | 90 | #define SI3 0.00206926385546875 // 483 Hz |
Antulius | 1:e7f73d96ddde | 91 | #define DO4 0.00390625 // 512 Hz |
Antulius | 1:e7f73d96ddde | 92 | #define DOs4 0.001843504517578125 // 542 Hz |
Antulius | 1:e7f73d96ddde | 93 | #define RE4 0.00174003655859375 // 575 Hz |
Antulius | 1:e7f73d96ddde | 94 | #define REs4 0.001642375810546875 // 609 Hz |
Antulius | 1:e7f73d96ddde | 95 | #define MI4 0.00155019633984375 // 645 Hz |
Antulius | 1:e7f73d96ddde | 96 | #define FA4 0.00146319050390625 // 683 Hz |
Antulius | 1:e7f73d96ddde | 97 | #define FAs4 0.001381067931640625 // 724 Hz |
Antulius | 1:e7f73d96ddde | 98 | #define SOL4 0.001303554544921875 // 767 Hz |
Antulius | 1:e7f73d96ddde | 99 | #define SOLs4 0.001230391650390625 // 813 Hz |
Antulius | 1:e7f73d96ddde | 100 | #define LA4 0.00116133507421875 // 861 Hz |
Antulius | 1:e7f73d96ddde | 101 | #define LAs4 0.00109615434375 // 912 Hz |
Antulius | 1:e7f73d96ddde | 102 | #define SI4 0.001034631927734375 // 966 Hz |
Antulius | 1:e7f73d96ddde | 103 | #define DO5 0.001953125 // 1024 Hz |
Antulius | 1:e7f73d96ddde | 104 | /* |
Antulius | 1:e7f73d96ddde | 105 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 106 | | Configuración de Puertos |
Antulius | 1:e7f73d96ddde | 107 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 108 | */ |
Antulius | 1:e7f73d96ddde | 109 | Ticker Barrido; // Interrupción del Timer |
Antulius | 1:e7f73d96ddde | 110 | BusOut Salidas(PTE19, PTE18, PTE17, PTE16); // Salidas a las bobinas: A /A B /B |
Antulius | 1:e7f73d96ddde | 111 | DigitalOut Led_Azul (PTE2); // Definición para el Led Azul |
Antulius | 1:e7f73d96ddde | 112 | DigitalOut Led_Verde (PTE3); // Definición para el Led Verde |
Antulius | 1:e7f73d96ddde | 113 | DigitalOut Led_Rojo (PTE6); // Definición para el Led Rojo |
Antulius | 1:e7f73d96ddde | 114 | DigitalOut Green_Led (PTD5); // Led de Actividad del Programa |
Antulius | 1:e7f73d96ddde | 115 | DigitalOut Red_Led (PTE29); // Led de Actividad del Programa |
Antulius | 1:e7f73d96ddde | 116 | DigitalIn Adelante (PTC3, PullUp); // Switch para mover hacia Adelante |
Antulius | 1:e7f73d96ddde | 117 | DigitalIn Atras (PTC12,PullUp); // Switch para mover hacia Atras |
Antulius | 1:e7f73d96ddde | 118 | BusIn Modo (PTB18,PTB19); // Modo de operación de los motores |
Antulius | 1:e7f73d96ddde | 119 | PwmOut Backlight (PTD2); // Activacion Backlight del LCD |
Antulius | 1:e7f73d96ddde | 120 | PwmOut Buzzer (PTE31); // Salida del Buzzer |
Antulius | 1:e7f73d96ddde | 121 | |
Antulius | 1:e7f73d96ddde | 122 | /* |
Antulius | 1:e7f73d96ddde | 123 | ** ------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 124 | ** Inicialización de los Pines de Funciones Especiales. |
Antulius | 1:e7f73d96ddde | 125 | ** ------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 126 | */ |
Antulius | 1:e7f73d96ddde | 127 | TSISensor tsi; //activa el Touch Sensor Interface |
Antulius | 1:e7f73d96ddde | 128 | |
Antulius | 1:e7f73d96ddde | 129 | // Host PC Communication channels |
Antulius | 1:e7f73d96ddde | 130 | Serial terminal(USBTX, USBRX); // USB Terminal Interface Tx, Rx |
Antulius | 1:e7f73d96ddde | 131 | //Serial terminal(PTA2,PTA1); // Terminal Serial |
Antulius | 1:e7f73d96ddde | 132 | //Serial terminal(PTE0, PTE1); // Tx, Rx Using MAX3232 or BlueTooth |
Antulius | 1:e7f73d96ddde | 133 | //Serial terminal(PTE22, PTE23); |
Antulius | 1:e7f73d96ddde | 134 | // -------- Bluetooth Communication support -------- |
Antulius | 1:e7f73d96ddde | 135 | Serial bluetooth(PTE0, PTE1); // Tx, Rx |
Antulius | 1:e7f73d96ddde | 136 | |
Antulius | 1:e7f73d96ddde | 137 | /************************************************* |
Antulius | 1:e7f73d96ddde | 138 | * Inicializa la biblioteca TextLCD con los números de los pines de la interface |
Antulius | 1:e7f73d96ddde | 139 | * Board Freedom FRDM-KL25Z |
Antulius | 1:e7f73d96ddde | 140 | * IDE Mbed On Line Compiler |
Antulius | 1:e7f73d96ddde | 141 | * LCD SPI SN74595 |
Antulius | 1:e7f73d96ddde | 142 | * Pin Board LCD |
Antulius | 1:e7f73d96ddde | 143 | * SPI_MOSI SER (white) |
Antulius | 1:e7f73d96ddde | 144 | * SPI_MISO none (blue) |
Antulius | 1:e7f73d96ddde | 145 | * SPI_CLK SRCLK |
Antulius | 1:e7f73d96ddde | 146 | * SPI_PCS RCLK |
Antulius | 1:e7f73d96ddde | 147 | * 5V 5V (red) |
Antulius | 1:e7f73d96ddde | 148 | * GND GND (black) |
Antulius | 1:e7f73d96ddde | 149 | * LCD I2C PCF8574A |
Antulius | 1:e7f73d96ddde | 150 | * Pin Board LCD |
Antulius | 1:e7f73d96ddde | 151 | * I2C_SCL SCL (white) + resistance pull-up 4.7k |
Antulius | 1:e7f73d96ddde | 152 | * I2C_SDA SDA (blue) + resistance pull-up 4.7k |
Antulius | 1:e7f73d96ddde | 153 | * 5V 5V (red) |
Antulius | 1:e7f73d96ddde | 154 | * GND GND (black) |
Antulius | 1:e7f73d96ddde | 155 | * LCD Port PTE |
Antulius | 1:e7f73d96ddde | 156 | * LCD Port PTC |
Antulius | 1:e7f73d96ddde | 157 | ***************************************************/ |
Antulius | 1:e7f73d96ddde | 158 | // -------- I2C Communication --------- |
Antulius | 1:e7f73d96ddde | 159 | //I2C i2c_LCD(PTC2,PTC1); // SDA, SCL |
Antulius | 1:e7f73d96ddde | 160 | |
Antulius | 1:e7f73d96ddde | 161 | // -------- SPI Communication --------- |
Antulius | 1:e7f73d96ddde | 162 | //SPI spi_LCD(PTD6,PTD7,PTD5,PTD4); // MOSI, MISO, SCLK, SSEL |
Antulius | 1:e7f73d96ddde | 163 | |
Antulius | 1:e7f73d96ddde | 164 | //--------- LCD instantiation ----------- |
Antulius | 1:e7f73d96ddde | 165 | //TextLCD_SPI lcd(&spi_LCD, PTD4, TextLCD::LCD16x4, TextLCD::HD44780); // SPI bus, SN74595 expander, CS pin, LCD Type |
Antulius | 1:e7f73d96ddde | 166 | //TextLCD_I2C lcd(&i2c_LCD, 0x7E, TextLCD::LCD20x4); // I2C bus, PCF8574A Arduino Shield, LCD Type |
Antulius | 1:e7f73d96ddde | 167 | TextLCD lcd(PTC6, PTC7, PTC8, PTC9, PTC10, PTC11, TextLCD::LCD20x4); // 4bit bus: rs, e, d4-d7 |
Antulius | 1:e7f73d96ddde | 168 | /* |
Antulius | 1:e7f73d96ddde | 169 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 170 | | Variables Globales de Usuario |
Antulius | 1:e7f73d96ddde | 171 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 172 | */ |
Antulius | 1:e7f73d96ddde | 173 | uint8_t paso; |
Antulius | 1:e7f73d96ddde | 174 | uint8_t No_Pasos; |
Antulius | 1:e7f73d96ddde | 175 | uint8_t Revoluciones; |
Antulius | 1:e7f73d96ddde | 176 | uint8_t Sentido; |
Antulius | 1:e7f73d96ddde | 177 | uint8_t modo_paso; |
Antulius | 1:e7f73d96ddde | 178 | uint16_t Velocidad=50000; |
Antulius | 1:e7f73d96ddde | 179 | char Cadena[20]; |
Antulius | 1:e7f73d96ddde | 180 | char Modo_0[]="Medio Paso\n\r"; |
Antulius | 1:e7f73d96ddde | 181 | char Modo_1[]="Paso Completo\n\r"; |
Antulius | 1:e7f73d96ddde | 182 | char Modo_2[]="Medio Paso\n\r"; |
Antulius | 1:e7f73d96ddde | 183 | char Modo_3[]="Modo Wave\n\r"; |
Antulius | 1:e7f73d96ddde | 184 | char Modo_4[]="Antihorario \n\r"; |
Antulius | 1:e7f73d96ddde | 185 | char Modo_5[]="Horario \n\r"; |
Antulius | 1:e7f73d96ddde | 186 | uint8_t Unipolar[8] = {0x01,0x03,0x02,0x06, |
Antulius | 1:e7f73d96ddde | 187 | 0x04,0x0C,0x08,0x09} ; // Unipolar |
Antulius | 1:e7f73d96ddde | 188 | uint8_t Bipolar[4] = {0x05,0x09,0x0A,0x06} ; // BiPolar |
Antulius | 1:e7f73d96ddde | 189 | uint8_t Wave_Drive[4] = {0x01,0x02,0x04,0x08} ; // Modo Onda |
Antulius | 1:e7f73d96ddde | 190 | uint8_t Modo_Completo[4] = {0x03,0x06,0x0C,0x09} ; // Paso Doble |
Antulius | 1:e7f73d96ddde | 191 | bool Flag; |
Antulius | 1:e7f73d96ddde | 192 | uint8_t dummy; |
Antulius | 1:e7f73d96ddde | 193 | /* |
Antulius | 1:e7f73d96ddde | 194 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Antulius | 1:e7f73d96ddde | 195 | | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción |
Antulius | 1:e7f73d96ddde | 196 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Antulius | 1:e7f73d96ddde | 197 | */ |
Antulius | 1:e7f73d96ddde | 198 | void Barrido_OnInterrupt(void); // Rutina de Atención al Ticker |
Antulius | 1:e7f73d96ddde | 199 | void Buzzer_SetPeriodMode(float Periodo,bool Estado); |
Antulius | 1:e7f73d96ddde | 200 | void outstrg(char *ap_cad); |
Antulius | 1:e7f73d96ddde | 201 | void Despliega_L1(char *ap_cad); |
Antulius | 1:e7f73d96ddde | 202 | void Despliega_L2(char *ap_cad); |
Antulius | 1:e7f73d96ddde | 203 | void Despliega_L3(char *ap_cad); |
Antulius | 1:e7f73d96ddde | 204 | void Despliega_L4(char *ap_cad); |
Antulius | 0:a935d23434d9 | 205 | |
Antulius | 1:e7f73d96ddde | 206 | /* END Events */ // Rutinas de Atención a Interrupciones |
Antulius | 1:e7f73d96ddde | 207 | |
Antulius | 1:e7f73d96ddde | 208 | |
Antulius | 0:a935d23434d9 | 209 | /* |
Antulius | 0:a935d23434d9 | 210 | #=============================================================================== |
Antulius | 0:a935d23434d9 | 211 | | |
Antulius | 0:a935d23434d9 | 212 | | P R O G R A M A P R I N C I P A L |
Antulius | 0:a935d23434d9 | 213 | | |
Antulius | 1:e7f73d96ddde | 214 | #=============================================================================== |
Antulius | 0:a935d23434d9 | 215 | */ |
Antulius | 1:e7f73d96ddde | 216 | int main() { |
Antulius | 1:e7f73d96ddde | 217 | /* Write your code here */ |
Antulius | 1:e7f73d96ddde | 218 | Barrido.attach_us(&Barrido_OnInterrupt, Velocidad); // Le asigna el periodo de barrido cada 10 ms |
Antulius | 1:e7f73d96ddde | 219 | No_Pasos=0,paso=0,modo_paso=Medio_Paso; // Configuración de Arranque del Motor |
Antulius | 1:e7f73d96ddde | 220 | Red_Led = Off; //Apaga Led's de los botones |
Antulius | 1:e7f73d96ddde | 221 | Green_Led = Off; |
Antulius | 1:e7f73d96ddde | 222 | terminal.baud(115200); //velocidad de transmisión para la terminal serial |
Antulius | 1:e7f73d96ddde | 223 | /* Configufración del Display LCD */ /* Mucho OjO !!! */ |
Antulius | 1:e7f73d96ddde | 224 | // spi_LCD.frequency(100000); // Frecuencia de operación para el SPI (100KHz) |
Antulius | 1:e7f73d96ddde | 225 | // spi_LCD.format(8,0); // Modo de Operación para el SPI |
Antulius | 1:e7f73d96ddde | 226 | // i2c_LCD.frequency(100000); // Frecuencia de operación para el I2C (100KHz) |
Antulius | 1:e7f73d96ddde | 227 | // i2c_LCD.start(); // Inicio de operación para el I2C |
Antulius | 1:e7f73d96ddde | 228 | lcd.printf(" MOTOR A PASOS"); //mensaje a desplegar en el LCD |
Antulius | 1:e7f73d96ddde | 229 | terminal.printf(" MOTOR A PASOS\n\r\n"); |
Antulius | 1:e7f73d96ddde | 230 | Buzzer=Off; // Apaga el Buzzer |
Antulius | 1:e7f73d96ddde | 231 | Flag=TRUE; // Enciende la bandera |
Antulius | 1:e7f73d96ddde | 232 | while(1) |
Antulius | 1:e7f73d96ddde | 233 | { |
Antulius | 1:e7f73d96ddde | 234 | if (Flag==TRUE) |
Antulius | 1:e7f73d96ddde | 235 | { |
Antulius | 1:e7f73d96ddde | 236 | outstrg ("MODO DEL MOTOR A PASOS: "); |
Antulius | 1:e7f73d96ddde | 237 | if (modo_paso==Modo_Wave) strcpy (Cadena,Modo_3); |
Antulius | 1:e7f73d96ddde | 238 | if (modo_paso==Paso_Doble) strcpy (Cadena,Modo_2); |
Antulius | 1:e7f73d96ddde | 239 | if (modo_paso==Paso_Completo) strcpy (Cadena,Modo_1); |
Antulius | 1:e7f73d96ddde | 240 | if (modo_paso==Medio_Paso) strcpy (Cadena,Modo_0); |
Antulius | 1:e7f73d96ddde | 241 | outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 242 | outstrg ("SENTIDO DEL MOTOR: "); |
Antulius | 1:e7f73d96ddde | 243 | if (Sentido==Sentido_Antihorario) strcpy (Cadena, Modo_4); |
Antulius | 1:e7f73d96ddde | 244 | if (Sentido==Sentido_Horario) strcpy (Cadena, Modo_5); |
Antulius | 1:e7f73d96ddde | 245 | outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 246 | dummy=sprintf(Cadena,"Paso: %3d \n\r",paso); |
Antulius | 1:e7f73d96ddde | 247 | Despliega_L2 (Cadena); |
Antulius | 1:e7f73d96ddde | 248 | outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 249 | dummy=sprintf(Cadena,"No. Pasos: %3d \n\r",No_Pasos); |
Antulius | 1:e7f73d96ddde | 250 | Despliega_L3 (Cadena); |
Antulius | 1:e7f73d96ddde | 251 | outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 252 | dummy=sprintf(Cadena,"Vueltas: %3d \n\r",Revoluciones); |
Antulius | 1:e7f73d96ddde | 253 | Despliega_L4 (Cadena); |
Antulius | 1:e7f73d96ddde | 254 | outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 255 | // outstrg (Cadena); |
Antulius | 1:e7f73d96ddde | 256 | Flag=FALSE ; |
Antulius | 1:e7f73d96ddde | 257 | // if (tsi.readPercentage()!=0.0) Backlight = 1.0-tsi.readPercentage(); // Lee el TSI y cambia el Backlight del LCD |
Antulius | 1:e7f73d96ddde | 258 | if (tsi.readPercentage()!=0.0) Velocidad = (1.0-tsi.readPercentage())*65535; // Lee el TSI y cambia la velocidad del motor |
Antulius | 1:e7f73d96ddde | 259 | wait(0.1); |
Antulius | 1:e7f73d96ddde | 260 | |
Antulius | 1:e7f73d96ddde | 261 | } // End Flag |
Antulius | 1:e7f73d96ddde | 262 | } // End While |
Antulius | 1:e7f73d96ddde | 263 | } // End Main |
Antulius | 1:e7f73d96ddde | 264 | /* END Pasos */ |
Antulius | 1:e7f73d96ddde | 265 | /* END main() */ |
Antulius | 1:e7f73d96ddde | 266 | /* |
Antulius | 1:e7f73d96ddde | 267 | ................................................................................ |
Antulius | 1:e7f73d96ddde | 268 | : Rutinas de los Vectores de Interrupción |
Antulius | 1:e7f73d96ddde | 269 | ................................................................................ |
Antulius | 1:e7f73d96ddde | 270 | */ |
Antulius | 1:e7f73d96ddde | 271 | // Las Rutinas de Atención a Interrupcion van aquí ! |
Antulius | 1:e7f73d96ddde | 272 | |
Antulius | 1:e7f73d96ddde | 273 | void Barrido_OnInterrupt(void) // Rutina de Atención al Ticker |
Antulius | 0:a935d23434d9 | 274 | { |
Antulius | 1:e7f73d96ddde | 275 | // if (paso>8)paso=0; |
Antulius | 1:e7f73d96ddde | 276 | // Buzzer_SetPeriodMode(LA4,FALSE); // Apaga el Buzzer |
Antulius | 1:e7f73d96ddde | 277 | modo_paso=Modo; |
Antulius | 1:e7f73d96ddde | 278 | if (Flag==FALSE) |
Antulius | 1:e7f73d96ddde | 279 | { |
Antulius | 1:e7f73d96ddde | 280 | if (Atras==FALSE) // Se presionó el Botón Izquierdo? |
Antulius | 0:a935d23434d9 | 281 | { |
Antulius | 1:e7f73d96ddde | 282 | Red_Led=On; |
Antulius | 1:e7f73d96ddde | 283 | Sentido=Sentido_Antihorario; |
Antulius | 1:e7f73d96ddde | 284 | if (modo_paso==Modo_Wave) // Modo: WAVE DRIVE |
Antulius | 1:e7f73d96ddde | 285 | { |
Antulius | 1:e7f73d96ddde | 286 | Buzzer_SetPeriodMode(DO2,TRUE); |
Antulius | 1:e7f73d96ddde | 287 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 288 | if (paso==0) paso=3; |
Antulius | 1:e7f73d96ddde | 289 | else paso-- ; |
Antulius | 1:e7f73d96ddde | 290 | Salidas=Wave_Drive[paso]; |
Antulius | 1:e7f73d96ddde | 291 | |
Antulius | 1:e7f73d96ddde | 292 | } |
Antulius | 1:e7f73d96ddde | 293 | if (modo_paso==Paso_Completo) // Modo: FULL STEP |
Antulius | 1:e7f73d96ddde | 294 | { |
Antulius | 1:e7f73d96ddde | 295 | Buzzer_SetPeriodMode(MI2,TRUE); |
Antulius | 1:e7f73d96ddde | 296 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 297 | if (paso==0) paso=6; |
Antulius | 1:e7f73d96ddde | 298 | else |
Antulius | 1:e7f73d96ddde | 299 | { |
Antulius | 1:e7f73d96ddde | 300 | paso--; |
Antulius | 1:e7f73d96ddde | 301 | paso--; |
Antulius | 1:e7f73d96ddde | 302 | } |
Antulius | 1:e7f73d96ddde | 303 | Salidas=(Unipolar [paso]); |
Antulius | 1:e7f73d96ddde | 304 | } |
Antulius | 1:e7f73d96ddde | 305 | if (modo_paso==Medio_Paso) // Modo: HALF STEP |
Antulius | 1:e7f73d96ddde | 306 | { |
Antulius | 1:e7f73d96ddde | 307 | Buzzer_SetPeriodMode(SOL2,TRUE); |
Antulius | 1:e7f73d96ddde | 308 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 309 | if (paso==0) paso=7; |
Antulius | 1:e7f73d96ddde | 310 | else paso-- ; |
Antulius | 1:e7f73d96ddde | 311 | Salidas=(Unipolar [paso]); |
Antulius | 1:e7f73d96ddde | 312 | } |
Antulius | 1:e7f73d96ddde | 313 | if (modo_paso==Paso_Doble) // Modo: DOUBLE STEP |
Antulius | 1:e7f73d96ddde | 314 | { |
Antulius | 1:e7f73d96ddde | 315 | Buzzer_SetPeriodMode(LAs2,TRUE); |
Antulius | 1:e7f73d96ddde | 316 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 317 | if (paso==0) paso=3; |
Antulius | 1:e7f73d96ddde | 318 | else paso-- ; |
Antulius | 1:e7f73d96ddde | 319 | Salidas=Bipolar[paso]; |
Antulius | 1:e7f73d96ddde | 320 | |
Antulius | 1:e7f73d96ddde | 321 | } |
Antulius | 1:e7f73d96ddde | 322 | No_Pasos-- ; |
Antulius | 1:e7f73d96ddde | 323 | Red_Led = Off; // Apaga Led's de los botones |
Antulius | 1:e7f73d96ddde | 324 | } |
Antulius | 1:e7f73d96ddde | 325 | Flag=TRUE; |
Antulius | 1:e7f73d96ddde | 326 | if (Adelante==FALSE) // Se presionó el Botón Derecho? |
Antulius | 1:e7f73d96ddde | 327 | { |
Antulius | 1:e7f73d96ddde | 328 | Green_Led=On; |
Antulius | 1:e7f73d96ddde | 329 | Sentido=Sentido_Horario; |
Antulius | 1:e7f73d96ddde | 330 | if (modo_paso==Modo_Wave) // Modo: WAVE DRIVE |
Antulius | 1:e7f73d96ddde | 331 | { |
Antulius | 1:e7f73d96ddde | 332 | Buzzer_SetPeriodMode(DO3,TRUE); |
Antulius | 1:e7f73d96ddde | 333 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 334 | if (paso==3) paso=0; |
Antulius | 1:e7f73d96ddde | 335 | else paso++ ; |
Antulius | 1:e7f73d96ddde | 336 | Salidas=(Wave_Drive [paso]); |
Antulius | 1:e7f73d96ddde | 337 | } |
Antulius | 1:e7f73d96ddde | 338 | if (modo_paso==Paso_Completo) // Modo: FULL STEP |
Antulius | 1:e7f73d96ddde | 339 | { |
Antulius | 1:e7f73d96ddde | 340 | Buzzer_SetPeriodMode(MI3,TRUE); |
Antulius | 1:e7f73d96ddde | 341 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 342 | if (paso==6) paso=0; |
Antulius | 1:e7f73d96ddde | 343 | else |
Antulius | 1:e7f73d96ddde | 344 | { |
Antulius | 1:e7f73d96ddde | 345 | paso++; |
Antulius | 1:e7f73d96ddde | 346 | paso++; |
Antulius | 1:e7f73d96ddde | 347 | } |
Antulius | 1:e7f73d96ddde | 348 | Salidas=(Unipolar [paso]); |
Antulius | 1:e7f73d96ddde | 349 | } |
Antulius | 1:e7f73d96ddde | 350 | if (modo_paso==Medio_Paso) // Modo: HALF STEP |
Antulius | 0:a935d23434d9 | 351 | { |
Antulius | 1:e7f73d96ddde | 352 | Buzzer_SetPeriodMode(SOL3,TRUE); |
Antulius | 1:e7f73d96ddde | 353 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 354 | if (paso==7) paso=0; |
Antulius | 1:e7f73d96ddde | 355 | else paso++ ; |
Antulius | 1:e7f73d96ddde | 356 | Salidas=(Unipolar [paso]); |
Antulius | 1:e7f73d96ddde | 357 | } |
Antulius | 1:e7f73d96ddde | 358 | if (modo_paso==Paso_Doble) // Modo: DOUBLE STEP |
Antulius | 1:e7f73d96ddde | 359 | { |
Antulius | 1:e7f73d96ddde | 360 | Buzzer_SetPeriodMode(LAs3,TRUE); |
Antulius | 1:e7f73d96ddde | 361 | Buzzer=On; // Enciende el Buzzer |
Antulius | 1:e7f73d96ddde | 362 | if (paso==3) paso=0; |
Antulius | 1:e7f73d96ddde | 363 | else paso++ ; |
Antulius | 1:e7f73d96ddde | 364 | Salidas=Bipolar[paso]; |
Antulius | 1:e7f73d96ddde | 365 | |
Antulius | 1:e7f73d96ddde | 366 | } |
Antulius | 1:e7f73d96ddde | 367 | No_Pasos++ ; |
Antulius | 1:e7f73d96ddde | 368 | } |
Antulius | 1:e7f73d96ddde | 369 | //Flag=TRUE; |
Antulius | 1:e7f73d96ddde | 370 | Green_Led = Off; //Apaga Led's de los botones |
Antulius | 1:e7f73d96ddde | 371 | } |
Antulius | 1:e7f73d96ddde | 372 | if (No_Pasos==180) Revoluciones++; |
Antulius | 1:e7f73d96ddde | 373 | Flag=TRUE ; |
Antulius | 0:a935d23434d9 | 374 | } |
Antulius | 1:e7f73d96ddde | 375 | /* END Events */ |
Antulius | 1:e7f73d96ddde | 376 | |
Antulius | 1:e7f73d96ddde | 377 | /* |
Antulius | 1:e7f73d96ddde | 378 | ________________________________________________________________________________ |
Antulius | 1:e7f73d96ddde | 379 | | |
Antulius | 1:e7f73d96ddde | 380 | | Funciones Prototipo |
Antulius | 1:e7f73d96ddde | 381 | |_______________________________________________________________________________ |
Antulius | 1:e7f73d96ddde | 382 | */ |
Antulius | 1:e7f73d96ddde | 383 | // Las Funciones Prototipo van aquí ! |
Antulius | 1:e7f73d96ddde | 384 | |
Antulius | 1:e7f73d96ddde | 385 | void Buzzer_SetPeriodMode(float Periodo,bool Estado) |
Antulius | 1:e7f73d96ddde | 386 | { |
Antulius | 1:e7f73d96ddde | 387 | Buzzer.period(Periodo); |
Antulius | 1:e7f73d96ddde | 388 | Buzzer.pulsewidth(Periodo/2); |
Antulius | 1:e7f73d96ddde | 389 | if (Estado==1)Buzzer=0.5; |
Antulius | 1:e7f73d96ddde | 390 | if (Estado==0)Buzzer=0.0; |
Antulius | 1:e7f73d96ddde | 391 | } |
Antulius | 1:e7f73d96ddde | 392 | |
Antulius | 1:e7f73d96ddde | 393 | |
Antulius | 1:e7f73d96ddde | 394 | void outstrg(char *ap_cad) |
Antulius | 1:e7f73d96ddde | 395 | { |
Antulius | 1:e7f73d96ddde | 396 | while(*ap_cad) |
Antulius | 1:e7f73d96ddde | 397 | { |
Antulius | 1:e7f73d96ddde | 398 | while(!terminal.writeable()); |
Antulius | 1:e7f73d96ddde | 399 | terminal.putc(*ap_cad++); |
Antulius | 1:e7f73d96ddde | 400 | printf("%s",*ap_cad); |
Antulius | 1:e7f73d96ddde | 401 | } |
Antulius | 1:e7f73d96ddde | 402 | } |
Antulius | 1:e7f73d96ddde | 403 | |
Antulius | 1:e7f73d96ddde | 404 | void Despliega_L1(char *ap_cad) |
Antulius | 1:e7f73d96ddde | 405 | { |
Antulius | 1:e7f73d96ddde | 406 | lcd.locate(0,1); //Coloca cursor de la LCD al inicio de la Linea 1. |
Antulius | 1:e7f73d96ddde | 407 | lcd.printf("", *ap_cad); //Imprime mensaje en la LCD. |
Antulius | 1:e7f73d96ddde | 408 | } |
Antulius | 1:e7f73d96ddde | 409 | void Despliega_L2(char *ap_cad) |
Antulius | 1:e7f73d96ddde | 410 | { |
Antulius | 1:e7f73d96ddde | 411 | lcd.locate(0,2); //Coloca cursor de la LCD al inicio de la Linea 2. |
Antulius | 1:e7f73d96ddde | 412 | lcd.printf("", *ap_cad); //Imprime mensaje en la LCD. |
Antulius | 1:e7f73d96ddde | 413 | } |
Antulius | 1:e7f73d96ddde | 414 | void Despliega_L3(char *ap_cad) |
Antulius | 1:e7f73d96ddde | 415 | { |
Antulius | 1:e7f73d96ddde | 416 | lcd.locate(0,3); //Coloca cursor de la LCD al inicio de la Linea 3. |
Antulius | 1:e7f73d96ddde | 417 | lcd.printf("", *ap_cad); //Imprime mensaje en la LCD. |
Antulius | 1:e7f73d96ddde | 418 | } |
Antulius | 1:e7f73d96ddde | 419 | void Despliega_L4(char *ap_cad) |
Antulius | 1:e7f73d96ddde | 420 | { |
Antulius | 1:e7f73d96ddde | 421 | lcd.locate(0,4); //Coloca cursor de la LCD al inicio de la Linea 4. |
Antulius | 1:e7f73d96ddde | 422 | lcd.printf("", *ap_cad); //Imprime mensaje en la LCD. |
Antulius | 1:e7f73d96ddde | 423 | } |
Antulius | 1:e7f73d96ddde | 424 | /* END Routines */ |
Antulius | 1:e7f73d96ddde | 425 | |
Antulius | 1:e7f73d96ddde | 426 | /* END program */ |
Antulius | 0:a935d23434d9 | 427 | |
Antulius | 0:a935d23434d9 | 428 | /* |
Antulius | 0:a935d23434d9 | 429 | +-------------------------------------------------------------------------------- |
Antulius | 0:a935d23434d9 | 430 | | EJERCICIO |
Antulius | 0:a935d23434d9 | 431 | | |
Antulius | 1:e7f73d96ddde | 432 | | 1.- Habilitar el módulo TSI para cambiar la velocidad del motor. |
Antulius | 1:e7f73d96ddde | 433 | | 2.- Habilitar el programa para que despligue los datos en la pantalla LCD: |
Antulius | 1:e7f73d96ddde | 434 | | |
Antulius | 1:e7f73d96ddde | 435 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 436 | | EXAMEN |
Antulius | 0:a935d23434d9 | 437 | | |
Antulius | 1:e7f73d96ddde | 438 | | 1.- Modificar el programa para que envie datos y se pueda modificar a traves |
Antulius | 1:e7f73d96ddde | 439 | | del teléfono celular por medio de la interface Bluetooth. |
Antulius | 1:e7f73d96ddde | 440 | | Suerte! |
Antulius | 1:e7f73d96ddde | 441 | +------------------------------------------------------------------------------- |
Antulius | 0:a935d23434d9 | 442 | | |
Antulius | 0:a935d23434d9 | 443 | | T H E A N T U L I U S T E A M |
Antulius | 0:a935d23434d9 | 444 | | Research, Development, Systems Equipment, Support & Spare Parts I n c. |
Antulius | 0:a935d23434d9 | 445 | | (C) Copyright 1989-2014, All rigths Reserved |
Antulius | 0:a935d23434d9 | 446 | | |
Antulius | 0:a935d23434d9 | 447 | | This program is licensed under rules of |
Antulius | 0:a935d23434d9 | 448 | | THE BEANERS TECHNOLOGIES PROYECT |
Antulius | 0:a935d23434d9 | 449 | +------------------------------------------------------------------------------- |
Antulius | 1:e7f73d96ddde | 450 | */ |
Antulius | 1:e7f73d96ddde | 451 | /* END Mbed */ |