Display_Pwm
Dependencies: mbed
main.cpp@0:2771429391d2, 2015-01-08 (annotated)
- Committer:
- jakarman12
- Date:
- Thu Jan 08 21:06:51 2015 +0000
- Revision:
- 0:2771429391d2
Display_PWM
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jakarman12 | 0:2771429391d2 | 1 | // Programa que realiza una cuenta de 0 a 9999 usando 4 displays de Anodo comun |
jakarman12 | 0:2771429391d2 | 2 | // e interrupciones por Timers y externa. |
jakarman12 | 0:2771429391d2 | 3 | |
jakarman12 | 0:2771429391d2 | 4 | //Motor amarillo a 3v -> 125rpm |
jakarman12 | 0:2771429391d2 | 5 | // a 6v -> 230rmp (3.83H) a 5v -> 208rmp (3.47H) = (100/347) real 147.6 rpm -> 2.46H |
jakarman12 | 0:2771429391d2 | 6 | |
jakarman12 | 0:2771429391d2 | 7 | #include "mbed.h" |
jakarman12 | 0:2771429391d2 | 8 | |
jakarman12 | 0:2771429391d2 | 9 | Ticker Tick_Desplegar,Tick_Velocidad; //Interrupciones |
jakarman12 | 0:2771429391d2 | 10 | InterruptIn Sensor(PTB11); // Interrupcion externa |
jakarman12 | 0:2771429391d2 | 11 | AnalogIn Pot(PTC11); // Señal analogica |
jakarman12 | 0:2771429391d2 | 12 | PwmOut Motor(PTC10); // Señal de PWM |
jakarman12 | 0:2771429391d2 | 13 | |
jakarman12 | 0:2771429391d2 | 14 | BusOut Display(PTC3,PTC2,PTA2,PTB23,PTA1,PTB9,PTC17,PTC16); // A,B,C,D,E,F,G,DP |
jakarman12 | 0:2771429391d2 | 15 | BusOut Comunes (PTA0,PTC4,PTD0,PTD2); // D4,D3,D2,D1 |
jakarman12 | 0:2771429391d2 | 16 | |
jakarman12 | 0:2771429391d2 | 17 | const unsigned short Numeros [10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // Bits de numeros para cada display |
jakarman12 | 0:2771429391d2 | 18 | //0,1,2,3,4,5,6,7,8,9 |
jakarman12 | 0:2771429391d2 | 19 | //Para displays de catodo comun |
jakarman12 | 0:2771429391d2 | 20 | // 0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F |
jakarman12 | 0:2771429391d2 | 21 | const unsigned short Comun [4] = {14,13,11,7}; //Digitos para Comunes de displays D1-D4 |
jakarman12 | 0:2771429391d2 | 22 | |
jakarman12 | 0:2771429391d2 | 23 | void VerDisplay (int Numero); // Funcion de conversion |
jakarman12 | 0:2771429391d2 | 24 | void Int_Contar (void); // Funcion para contar cada Interrupcion |
jakarman12 | 0:2771429391d2 | 25 | void Flip_Desplegar(void); // Funcion para desplegar en cada display |
jakarman12 | 0:2771429391d2 | 26 | void Flip_Velocidad (void); // Funcion para variar el PWM |
jakarman12 | 0:2771429391d2 | 27 | |
jakarman12 | 0:2771429391d2 | 28 | |
jakarman12 | 0:2771429391d2 | 29 | int Contador = 0; // Varieble usada para contar |
jakarman12 | 0:2771429391d2 | 30 | int x = 0; // Variable usada para establecer que comun prender |
jakarman12 | 0:2771429391d2 | 31 | short Digito[4] = {0,0,0,0}; // Arreglo usado para guardar convercion U,D,C,UM |
jakarman12 | 0:2771429391d2 | 32 | |
jakarman12 | 0:2771429391d2 | 33 | |
jakarman12 | 0:2771429391d2 | 34 | |
jakarman12 | 0:2771429391d2 | 35 | int main (void) |
jakarman12 | 0:2771429391d2 | 36 | { |
jakarman12 | 0:2771429391d2 | 37 | Motor.period(0.001); //periodo del motor |
jakarman12 | 0:2771429391d2 | 38 | Comunes = 255; //Apagar todo. |
jakarman12 | 0:2771429391d2 | 39 | Display = 255; |
jakarman12 | 0:2771429391d2 | 40 | |
jakarman12 | 0:2771429391d2 | 41 | Tick_Desplegar.attach(&Flip_Desplegar, 0.0001); //Llamado de interrupciones estableciendo tiempo a interrumpir |
jakarman12 | 0:2771429391d2 | 42 | Tick_Velocidad.attach(&Flip_Velocidad, 0.1); |
jakarman12 | 0:2771429391d2 | 43 | Sensor.rise(&Int_Contar); // Interrupcion cada flanco de subida |
jakarman12 | 0:2771429391d2 | 44 | |
jakarman12 | 0:2771429391d2 | 45 | while (1) //ciclo infinito |
jakarman12 | 0:2771429391d2 | 46 | { |
jakarman12 | 0:2771429391d2 | 47 | } |
jakarman12 | 0:2771429391d2 | 48 | } |
jakarman12 | 0:2771429391d2 | 49 | |
jakarman12 | 0:2771429391d2 | 50 | void VerDisplay (int Contador) |
jakarman12 | 0:2771429391d2 | 51 | { |
jakarman12 | 0:2771429391d2 | 52 | |
jakarman12 | 0:2771429391d2 | 53 | unsigned short D,C,UM; |
jakarman12 | 0:2771429391d2 | 54 | |
jakarman12 | 0:2771429391d2 | 55 | UM = Digito[3] = Contador/1000; // Millar |
jakarman12 | 0:2771429391d2 | 56 | C = Digito[2] = (Contador-UM*1000)/100; // Centenas |
jakarman12 | 0:2771429391d2 | 57 | D = Digito[1] = (Contador-UM*1000-C*100)/10; // Decenas |
jakarman12 | 0:2771429391d2 | 58 | Digito[0] = (Contador-UM*1000-C*100-D*10); // Unidades |
jakarman12 | 0:2771429391d2 | 59 | } |
jakarman12 | 0:2771429391d2 | 60 | |
jakarman12 | 0:2771429391d2 | 61 | void Int_Contar(void) |
jakarman12 | 0:2771429391d2 | 62 | { |
jakarman12 | 0:2771429391d2 | 63 | |
jakarman12 | 0:2771429391d2 | 64 | |
jakarman12 | 0:2771429391d2 | 65 | VerDisplay (Contador); //Sentencia para evitar que cuante más de 9999 |
jakarman12 | 0:2771429391d2 | 66 | if (Contador < 10000) |
jakarman12 | 0:2771429391d2 | 67 | { |
jakarman12 | 0:2771429391d2 | 68 | Contador ++; |
jakarman12 | 0:2771429391d2 | 69 | } |
jakarman12 | 0:2771429391d2 | 70 | else |
jakarman12 | 0:2771429391d2 | 71 | { |
jakarman12 | 0:2771429391d2 | 72 | Contador = 0; |
jakarman12 | 0:2771429391d2 | 73 | } |
jakarman12 | 0:2771429391d2 | 74 | |
jakarman12 | 0:2771429391d2 | 75 | } |
jakarman12 | 0:2771429391d2 | 76 | |
jakarman12 | 0:2771429391d2 | 77 | void Flip_Desplegar(void) |
jakarman12 | 0:2771429391d2 | 78 | { |
jakarman12 | 0:2771429391d2 | 79 | |
jakarman12 | 0:2771429391d2 | 80 | Comunes = 255; //Borrar comunes para engañar al ojo humano aparentando todos los displays estan prendidos |
jakarman12 | 0:2771429391d2 | 81 | |
jakarman12 | 0:2771429391d2 | 82 | if (x <= 3) //Despliega por 1ms el digito correspondiente a cada display |
jakarman12 | 0:2771429391d2 | 83 | { |
jakarman12 | 0:2771429391d2 | 84 | Display = Numeros[Digito[x]]; |
jakarman12 | 0:2771429391d2 | 85 | Comunes = Comun[x] ; |
jakarman12 | 0:2771429391d2 | 86 | x++; |
jakarman12 | 0:2771429391d2 | 87 | } |
jakarman12 | 0:2771429391d2 | 88 | else |
jakarman12 | 0:2771429391d2 | 89 | { |
jakarman12 | 0:2771429391d2 | 90 | x=0; |
jakarman12 | 0:2771429391d2 | 91 | } |
jakarman12 | 0:2771429391d2 | 92 | } |
jakarman12 | 0:2771429391d2 | 93 | |
jakarman12 | 0:2771429391d2 | 94 | void Flip_Velocidad(void) |
jakarman12 | 0:2771429391d2 | 95 | { |
jakarman12 | 0:2771429391d2 | 96 | |
jakarman12 | 0:2771429391d2 | 97 | Motor.write(Pot.read()); //Lee la entrada analogica y pone su porcentaje |
jakarman12 | 0:2771429391d2 | 98 | // en el PWM |
jakarman12 | 0:2771429391d2 | 99 | |
jakarman12 | 0:2771429391d2 | 100 | } |