Display_Pwm
Dependencies: mbed
main.cpp
- Committer:
- jakarman12
- Date:
- 2015-01-08
- Revision:
- 0:2771429391d2
File content as of revision 0:2771429391d2:
// Programa que realiza una cuenta de 0 a 9999 usando 4 displays de Anodo comun // e interrupciones por Timers y externa. //Motor amarillo a 3v -> 125rpm // a 6v -> 230rmp (3.83H) a 5v -> 208rmp (3.47H) = (100/347) real 147.6 rpm -> 2.46H #include "mbed.h" Ticker Tick_Desplegar,Tick_Velocidad; //Interrupciones InterruptIn Sensor(PTB11); // Interrupcion externa AnalogIn Pot(PTC11); // Señal analogica PwmOut Motor(PTC10); // Señal de PWM BusOut Display(PTC3,PTC2,PTA2,PTB23,PTA1,PTB9,PTC17,PTC16); // A,B,C,D,E,F,G,DP BusOut Comunes (PTA0,PTC4,PTD0,PTD2); // D4,D3,D2,D1 const unsigned short Numeros [10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // Bits de numeros para cada display //0,1,2,3,4,5,6,7,8,9 //Para displays de catodo comun // 0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F const unsigned short Comun [4] = {14,13,11,7}; //Digitos para Comunes de displays D1-D4 void VerDisplay (int Numero); // Funcion de conversion void Int_Contar (void); // Funcion para contar cada Interrupcion void Flip_Desplegar(void); // Funcion para desplegar en cada display void Flip_Velocidad (void); // Funcion para variar el PWM int Contador = 0; // Varieble usada para contar int x = 0; // Variable usada para establecer que comun prender short Digito[4] = {0,0,0,0}; // Arreglo usado para guardar convercion U,D,C,UM int main (void) { Motor.period(0.001); //periodo del motor Comunes = 255; //Apagar todo. Display = 255; Tick_Desplegar.attach(&Flip_Desplegar, 0.0001); //Llamado de interrupciones estableciendo tiempo a interrumpir Tick_Velocidad.attach(&Flip_Velocidad, 0.1); Sensor.rise(&Int_Contar); // Interrupcion cada flanco de subida while (1) //ciclo infinito { } } void VerDisplay (int Contador) { unsigned short D,C,UM; UM = Digito[3] = Contador/1000; // Millar C = Digito[2] = (Contador-UM*1000)/100; // Centenas D = Digito[1] = (Contador-UM*1000-C*100)/10; // Decenas Digito[0] = (Contador-UM*1000-C*100-D*10); // Unidades } void Int_Contar(void) { VerDisplay (Contador); //Sentencia para evitar que cuante más de 9999 if (Contador < 10000) { Contador ++; } else { Contador = 0; } } void Flip_Desplegar(void) { Comunes = 255; //Borrar comunes para engañar al ojo humano aparentando todos los displays estan prendidos if (x <= 3) //Despliega por 1ms el digito correspondiente a cada display { Display = Numeros[Digito[x]]; Comunes = Comun[x] ; x++; } else { x=0; } } void Flip_Velocidad(void) { Motor.write(Pot.read()); //Lee la entrada analogica y pone su porcentaje // en el PWM }