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

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?

UserRevisionLine numberNew 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 */