Display_Pwm

Dependencies:   mbed

Committer:
jakarman12
Date:
Thu Jan 08 21:06:51 2015 +0000
Revision:
0:2771429391d2
Display_PWM

Who changed what in which revision?

UserRevisionLine numberNew 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 }