Alfredo Ocegueda / Mbed 2 deprecated Voltimetro

Dependencies:   mbed

Committer:
Alfredo_Ocegueda
Date:
Thu Mar 13 04:37:15 2014 +0000
Revision:
0:95d34170f70b
Child:
1:6aeb3f8df608
Practica laboratorio No.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alfredo_Ocegueda 0:95d34170f70b 1 /* Buenas tardes, este es un programa creado para realizar distintas actividades que en el siguiente espacio mencionaremos:
Alfredo_Ocegueda 0:95d34170f70b 2
Alfredo_Ocegueda 0:95d34170f70b 3 Se cargara a el microcontrolador freedom FDRM KL25Z. El cual nos ayudara de 2 maneras.
Alfredo_Ocegueda 0:95d34170f70b 4
Alfredo_Ocegueda 0:95d34170f70b 5 En general el microcontrolador tendra conectado dos displays de 7 segmentos de anodo comun, 1 boton pulsador y 2 entradas analogicas que seran las
Alfredo_Ocegueda 0:95d34170f70b 6 diferentes funciones que mediremos.
Alfredo_Ocegueda 0:95d34170f70b 7
Alfredo_Ocegueda 0:95d34170f70b 8 La primera de ellas será un voltimetro que nos desplegara el resultado en los displays previamente conectados, el cual para los valores de 0 - 9
Alfredo_Ocegueda 0:95d34170f70b 9 mostrara un decimal, y para los valores de 10 - 28V nos mostrara el valor de la parte entera
Alfredo_Ocegueda 0:95d34170f70b 10
Alfredo_Ocegueda 0:95d34170f70b 11 La segunda sera un ohmetro que nos desplegara el resultado en los displays, el cual nos desplegara el resultado siempre en Kiloohms
Alfredo_Ocegueda 0:95d34170f70b 12
Alfredo_Ocegueda 0:95d34170f70b 13 Autor: Emilio Esteban Jimenez Godinez & Jose Alfredo Ocegueda Barraza
Alfredo_Ocegueda 0:95d34170f70b 14 Fecha: 12 de Marzo del 2014
Alfredo_Ocegueda 0:95d34170f70b 15 Version: 1.1 */
Alfredo_Ocegueda 0:95d34170f70b 16
Alfredo_Ocegueda 0:95d34170f70b 17
Alfredo_Ocegueda 0:95d34170f70b 18 #include "mbed.h"
Alfredo_Ocegueda 0:95d34170f70b 19
Alfredo_Ocegueda 0:95d34170f70b 20 DigitalIn boton(PTB2); // cambia el estado ya sea para utilizar el voltimetro o el ohmetro
Alfredo_Ocegueda 0:95d34170f70b 21 AnalogIn lecvol(PTB3); // Entrada analogica que nos permite saber la lectura para el voltimetro
Alfredo_Ocegueda 0:95d34170f70b 22 AnalogIn lecres(PTC2); // Entrada analogica que nos permite saber la lectura para el ohmetro
Alfredo_Ocegueda 0:95d34170f70b 23 // A B C D E F G
Alfredo_Ocegueda 0:95d34170f70b 24 BusOut display_1(PTD2,PTD0,PTD5,PTE0,PTE1,PTD3,PTD1); // son las salidas haia el display izquierdo
Alfredo_Ocegueda 0:95d34170f70b 25 // A B C D E F G
Alfredo_Ocegueda 0:95d34170f70b 26 BusOut display_2(PTA12,PTD4,PTA2,PTC8,PTC9,PTA4,PTA5); // son las salidas haia el display derecho
Alfredo_Ocegueda 0:95d34170f70b 27 DigitalOut dp_display1(PTA13); // Esta salida es para el punto del display izquierdo
Alfredo_Ocegueda 0:95d34170f70b 28 DigitalOut dp_display2(PTA1); // Esta salida es para el punto del display derecho
Alfredo_Ocegueda 0:95d34170f70b 29 int tiempo=0; // nos sirve de auxiliar en la lectura de tiempo
Alfredo_Ocegueda 0:95d34170f70b 30 int promedio=0;
Alfredo_Ocegueda 0:95d34170f70b 31 int promedio_voltaje=0;
Alfredo_Ocegueda 0:95d34170f70b 32 int promedio_resistencia=0;
Alfredo_Ocegueda 0:95d34170f70b 33 int estado=0; // 0= Voltimetro; 1= Ohmetro
Alfredo_Ocegueda 0:95d34170f70b 34 int i; // Variable auxiliar para instruccion for
Alfredo_Ocegueda 0:95d34170f70b 35 float voltaje[]={0}; // Arreglo para guardar las lecturas de voltaje
Alfredo_Ocegueda 0:95d34170f70b 36 float resistencia[]={0}; // Arreglo para guardar las lecturas de resistencia
Alfredo_Ocegueda 0:95d34170f70b 37 int dis_1; // Variable auxiliar par regresar el valor de la funcion entero
Alfredo_Ocegueda 0:95d34170f70b 38 int dis_2; // Variable auxiliar par regresar el valor de la funcion entero
Alfredo_Ocegueda 0:95d34170f70b 39
Alfredo_Ocegueda 0:95d34170f70b 40 int display_entero(int entero); //funcion para obtener el valor del display1 que necesitamos
Alfredo_Ocegueda 0:95d34170f70b 41 int display_decimal(int decimal); //funcion para obtener el valor del display2 que necesitamos
Alfredo_Ocegueda 0:95d34170f70b 42
Alfredo_Ocegueda 0:95d34170f70b 43 int main()
Alfredo_Ocegueda 0:95d34170f70b 44 {
Alfredo_Ocegueda 0:95d34170f70b 45 Timer volt;
Alfredo_Ocegueda 0:95d34170f70b 46 Timer resis;
Alfredo_Ocegueda 0:95d34170f70b 47
Alfredo_Ocegueda 0:95d34170f70b 48 while(1)
Alfredo_Ocegueda 0:95d34170f70b 49 {
Alfredo_Ocegueda 0:95d34170f70b 50 if(boton==1){ //utilizamos esta instruccion para cada vez que se presione el boton cambiemos de estado una variable
Alfredo_Ocegueda 0:95d34170f70b 51 estado=!estado;
Alfredo_Ocegueda 0:95d34170f70b 52 }
Alfredo_Ocegueda 0:95d34170f70b 53 if (estado == 0){
Alfredo_Ocegueda 0:95d34170f70b 54 volt.start();
Alfredo_Ocegueda 0:95d34170f70b 55 for(i=0; i<=9; i++){
Alfredo_Ocegueda 0:95d34170f70b 56 int resultado_voltaje = (lecvol*3.3*5780)/680;
Alfredo_Ocegueda 0:95d34170f70b 57 if(volt.read_ms() == tiempo){
Alfredo_Ocegueda 0:95d34170f70b 58 voltaje[i]=resultado_voltaje;
Alfredo_Ocegueda 0:95d34170f70b 59 promedio+=resultado_voltaje;
Alfredo_Ocegueda 0:95d34170f70b 60 tiempo+=200;
Alfredo_Ocegueda 0:95d34170f70b 61 }
Alfredo_Ocegueda 0:95d34170f70b 62 }
Alfredo_Ocegueda 0:95d34170f70b 63 if(volt.read_ms() ==2000){
Alfredo_Ocegueda 0:95d34170f70b 64 promedio_voltaje=promedio/10;
Alfredo_Ocegueda 0:95d34170f70b 65 if (promedio_voltaje >= 10){ // Si el resultado es mayor a 10 entonces separamos en dos numeros
Alfredo_Ocegueda 0:95d34170f70b 66 int display_1 = display_entero(promedio_voltaje/10); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 0:95d34170f70b 67 int display_2 = display_decimal(promedio_voltaje%10);// Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 0:95d34170f70b 68 }
Alfredo_Ocegueda 0:95d34170f70b 69 if (promedio_voltaje < 10){ // Si el resultado es menor a 10 entonces separamos en dos numeros uno sera la
Alfredo_Ocegueda 0:95d34170f70b 70 int display_1 = display_entero(promedio_voltaje); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 0:95d34170f70b 71 int display_2 = display_decimal(((float(promedio_voltaje))*10)-(promedio_voltaje*10)); // Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 0:95d34170f70b 72 }
Alfredo_Ocegueda 0:95d34170f70b 73 volt.reset();
Alfredo_Ocegueda 0:95d34170f70b 74 }
Alfredo_Ocegueda 0:95d34170f70b 75 }
Alfredo_Ocegueda 0:95d34170f70b 76 if (estado == 1){
Alfredo_Ocegueda 0:95d34170f70b 77 resis.start();
Alfredo_Ocegueda 0:95d34170f70b 78 for(i=0; i<=9; i++){
Alfredo_Ocegueda 0:95d34170f70b 79 int resultado_resistencia = ((3.3*10000)/(lecres*3.3))-10000;
Alfredo_Ocegueda 0:95d34170f70b 80 if(resis.read_ms() == tiempo){
Alfredo_Ocegueda 0:95d34170f70b 81 resistencia[i]=resultado_resistencia;
Alfredo_Ocegueda 0:95d34170f70b 82 promedio+=resultado_resistencia;
Alfredo_Ocegueda 0:95d34170f70b 83 tiempo+=200;
Alfredo_Ocegueda 0:95d34170f70b 84 }
Alfredo_Ocegueda 0:95d34170f70b 85 }
Alfredo_Ocegueda 0:95d34170f70b 86 if(resis.read_ms() == 2000){
Alfredo_Ocegueda 0:95d34170f70b 87 promedio_resistencia=promedio/10;
Alfredo_Ocegueda 0:95d34170f70b 88 resis.reset();
Alfredo_Ocegueda 0:95d34170f70b 89 }
Alfredo_Ocegueda 0:95d34170f70b 90 }
Alfredo_Ocegueda 0:95d34170f70b 91 }
Alfredo_Ocegueda 0:95d34170f70b 92 }
Alfredo_Ocegueda 0:95d34170f70b 93
Alfredo_Ocegueda 0:95d34170f70b 94 int display_entero (int entero){ // Esta funcion es para desplegar el numero en el primer display, a todos los resultados se les aplica un inversor
Alfredo_Ocegueda 0:95d34170f70b 95 switch(entero){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa
Alfredo_Ocegueda 0:95d34170f70b 96 case 0:
Alfredo_Ocegueda 0:95d34170f70b 97 dis_1=~63;
Alfredo_Ocegueda 0:95d34170f70b 98 break;
Alfredo_Ocegueda 0:95d34170f70b 99 case 1:
Alfredo_Ocegueda 0:95d34170f70b 100 display_1=~6;
Alfredo_Ocegueda 0:95d34170f70b 101 break;
Alfredo_Ocegueda 0:95d34170f70b 102 case 2:
Alfredo_Ocegueda 0:95d34170f70b 103 dis_1=~91;
Alfredo_Ocegueda 0:95d34170f70b 104 break;
Alfredo_Ocegueda 0:95d34170f70b 105 case 3:
Alfredo_Ocegueda 0:95d34170f70b 106 dis_1=~79;
Alfredo_Ocegueda 0:95d34170f70b 107 break;
Alfredo_Ocegueda 0:95d34170f70b 108 case 4:
Alfredo_Ocegueda 0:95d34170f70b 109 dis_1=~102;
Alfredo_Ocegueda 0:95d34170f70b 110 break;
Alfredo_Ocegueda 0:95d34170f70b 111 case 5:
Alfredo_Ocegueda 0:95d34170f70b 112 dis_1=~109;
Alfredo_Ocegueda 0:95d34170f70b 113 break;
Alfredo_Ocegueda 0:95d34170f70b 114 case 6:
Alfredo_Ocegueda 0:95d34170f70b 115 dis_1=~125;
Alfredo_Ocegueda 0:95d34170f70b 116 break;
Alfredo_Ocegueda 0:95d34170f70b 117 case 7:
Alfredo_Ocegueda 0:95d34170f70b 118 dis_1=~7;
Alfredo_Ocegueda 0:95d34170f70b 119 break;
Alfredo_Ocegueda 0:95d34170f70b 120 case 8:
Alfredo_Ocegueda 0:95d34170f70b 121 dis_1=~127;
Alfredo_Ocegueda 0:95d34170f70b 122 break;
Alfredo_Ocegueda 0:95d34170f70b 123 case 9:
Alfredo_Ocegueda 0:95d34170f70b 124 dis_1=~103;
Alfredo_Ocegueda 0:95d34170f70b 125 break;
Alfredo_Ocegueda 0:95d34170f70b 126 }
Alfredo_Ocegueda 0:95d34170f70b 127 return dis_1;
Alfredo_Ocegueda 0:95d34170f70b 128 }
Alfredo_Ocegueda 0:95d34170f70b 129
Alfredo_Ocegueda 0:95d34170f70b 130 int display_decimal(int decimal){ // Esta funcion es para desplegar el numero en el segundo display, a todos los resultados se les aplica un inversor
Alfredo_Ocegueda 0:95d34170f70b 131 switch(decimal){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa
Alfredo_Ocegueda 0:95d34170f70b 132 case 0:
Alfredo_Ocegueda 0:95d34170f70b 133 dis_2=~63;
Alfredo_Ocegueda 0:95d34170f70b 134 break;
Alfredo_Ocegueda 0:95d34170f70b 135 case 1:
Alfredo_Ocegueda 0:95d34170f70b 136 dis_2=~6;
Alfredo_Ocegueda 0:95d34170f70b 137 break;
Alfredo_Ocegueda 0:95d34170f70b 138 case 2:
Alfredo_Ocegueda 0:95d34170f70b 139 dis_2=~91;
Alfredo_Ocegueda 0:95d34170f70b 140 break;
Alfredo_Ocegueda 0:95d34170f70b 141 case 3:
Alfredo_Ocegueda 0:95d34170f70b 142 dis_2=~79;
Alfredo_Ocegueda 0:95d34170f70b 143 break;
Alfredo_Ocegueda 0:95d34170f70b 144 case 4:
Alfredo_Ocegueda 0:95d34170f70b 145 dis_2=~102;
Alfredo_Ocegueda 0:95d34170f70b 146 break;
Alfredo_Ocegueda 0:95d34170f70b 147 case 5:
Alfredo_Ocegueda 0:95d34170f70b 148 dis_2=~109;
Alfredo_Ocegueda 0:95d34170f70b 149 break;
Alfredo_Ocegueda 0:95d34170f70b 150 case 6:
Alfredo_Ocegueda 0:95d34170f70b 151 dis_2=~125;
Alfredo_Ocegueda 0:95d34170f70b 152 break;
Alfredo_Ocegueda 0:95d34170f70b 153 case 7:
Alfredo_Ocegueda 0:95d34170f70b 154 dis_2=~7;
Alfredo_Ocegueda 0:95d34170f70b 155 break;
Alfredo_Ocegueda 0:95d34170f70b 156 case 8:
Alfredo_Ocegueda 0:95d34170f70b 157 dis_2=~127;
Alfredo_Ocegueda 0:95d34170f70b 158 break;
Alfredo_Ocegueda 0:95d34170f70b 159 case 9:
Alfredo_Ocegueda 0:95d34170f70b 160 dis_2=~103;
Alfredo_Ocegueda 0:95d34170f70b 161 break;
Alfredo_Ocegueda 0:95d34170f70b 162 }
Alfredo_Ocegueda 0:95d34170f70b 163 return dis_2;
Alfredo_Ocegueda 0:95d34170f70b 164 }