Display_Pwm
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:2771429391d2
diff -r 000000000000 -r 2771429391d2 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jan 08 21:06:51 2015 +0000 @@ -0,0 +1,100 @@ +// 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 + +} \ No newline at end of file