ccvcv

Dependencies:   TextLCD mbed

Fork of PRACTICA3 by compartido

Committer:
carlospomar
Date:
Fri Nov 10 12:54:55 2017 +0000
Revision:
3:30f1e2f8308c
Parent:
2:0ef1b1712e64
Child:
4:71a955ddc240
practica 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
carlospomar 0:73a5b9689b80 1 #include "mbed.h"
carlospomar 3:30f1e2f8308c 2 #include "TextLCD.h"
carlospomar 1:591fea5f363b 3
carlospomar 3:30f1e2f8308c 4 #define constante (3,3^2)/((2^16)-1)*100) // valor constante para el cálculo de Vrms
carlospomar 2:0ef1b1712e64 5 #define vector 100 // valor para definir el tamaño de los búfferes de muestreo
carlospomar 3:30f1e2f8308c 6
carlospomar 1:591fea5f363b 7 //TextLCD (6 puertos, TextLCD::LCD16x2); rs,e,d4-d7
carlospomar 3:30f1e2f8308c 8 InterruptIn Sw (); //pulsador en el puerto
carlospomar 3:30f1e2f8308c 9 AnalogIn leer (); // leer del puerto
carlospomar 1:591fea5f363b 10 Ticker muestreo;
carlospomar 1:591fea5f363b 11 Ticker visualizar;
carlospomar 1:591fea5f363b 12 int contt=0;
carlospomar 1:591fea5f363b 13 int contm=0;
carlospomar 2:0ef1b1712e64 14 int contvpp=0;
carlospomar 3:30f1e2f8308c 15 int dato=0, // variable para seleccionar el dato a mostrar
carlospomar 2:0ef1b1712e64 16 int bufferlleno=0; // variable de estado
carlospomar 2:0ef1b1712e64 17 int flag1; // variable para indicar cuando se tiene que cambiar de buffer
carlospomar 2:0ef1b1712e64 18 int flag2; // variable para indicar cuando se tiene que
carlospomar 2:0ef1b1712e64 19 int flag3; // variable para indicar cuando se tiene que calcular Vpp
carlospomar 3:30f1e2f8308c 20 int Vpmax=0; // variable para guardar el valor del pico superior
carlospomar 3:30f1e2f8308c 21 int Vpmin=0; // variable para guardar el valor del pico inferior
carlospomar 2:0ef1b1712e64 22 int Vpp=0;
carlospomar 2:0ef1b1712e64 23 float buffer1 [vector]; // buffer de muestreo 1 de tamaño 100
carlospomar 2:0ef1b1712e64 24 float buffer2 [vector]; // buffer de muestreo 2 de tamaño 100
carlospomar 2:0ef1b1712e64 25 float Vrms; // variabla para guardar el valor de RMS
carlospomar 3:30f1e2f8308c 26 float valor;
carlospomar 3:30f1e2f8308c 27 float sumatorio; // variable que es la suma de los valores de la muestra
carlospomar 2:0ef1b1712e64 28 float muestra; // variabla para hacer las operaciones
carlospomar 0:73a5b9689b80 29
carlospomar 1:591fea5f363b 30
carlospomar 3:30f1e2f8308c 31 //void temporizador ()
carlospomar 3:30f1e2f8308c 32 //{
carlospomar 3:30f1e2f8308c 33 // if (flag2) {
carlospomar 3:30f1e2f8308c 34 //
carlospomar 3:30f1e2f8308c 35 // }
carlospomar 3:30f1e2f8308c 36 // contt++;
carlospomar 3:30f1e2f8308c 37 // if (contt==100) {
carlospomar 3:30f1e2f8308c 38 // contt =0;
carlospomar 3:30f1e2f8308c 39 // flag2 =!flag2;
carlospomar 3:30f1e2f8308c 40 // bufferlleno=0;
carlospomar 3:30f1e2f8308c 41 // }
carlospomar 3:30f1e2f8308c 42 //}
carlospomar 1:591fea5f363b 43
carlospomar 1:591fea5f363b 44 void boton()
carlospomar 1:591fea5f363b 45 {
carlospomar 1:591fea5f363b 46 dato++;
carlospomar 1:591fea5f363b 47 if (dato>1) {
carlospomar 1:591fea5f363b 48 dato = 0;
carlospomar 0:73a5b9689b80 49 }
carlospomar 0:73a5b9689b80 50 }
carlospomar 1:591fea5f363b 51
carlospomar 1:591fea5f363b 52 void LCD()
carlospomar 1:591fea5f363b 53 {
carlospomar 1:591fea5f363b 54 lcd.cls();
carlospomar 1:591fea5f363b 55 switch (dato) {
carlospomar 1:591fea5f363b 56 case 0;
carlospomar 3:30f1e2f8308c 57 lcdprintf("Vrms: %n V",Vrms); //Vrms :\n%3.3f V,Vrms
carlospomar 1:591fea5f363b 58 break;
carlospomar 1:591fea5f363b 59 case 1;
carlospomar 3:30f1e2f8308c 60 lcdprintf("Vpp: %n V",Vpp); //
carlospomar 1:591fea5f363b 61 break;
carlospomar 1:591fea5f363b 62 }
carlospomar 1:591fea5f363b 63 }
carlospomar 1:591fea5f363b 64
carlospomar 2:0ef1b1712e64 65 void calculovpp ()
carlospomar 2:0ef1b1712e64 66 {
carlospomar 2:0ef1b1712e64 67 for(contvpp=0; contvpp=99; contvpp++)
carlospomar 2:0ef1b1712e64 68 if (muestra(contvpp)>Vpmax) {
carlospomar 2:0ef1b1712e64 69 Vpmax=muestra(contvpp);
carlospomar 2:0ef1b1712e64 70 } else {
carlospomar 2:0ef1b1712e64 71 if (muestra(contvpp)<Vpmin) {
carlospomar 2:0ef1b1712e64 72 Vpmin=muestra(contvpp);
carlospomar 2:0ef1b1712e64 73 } else {
carlospomar 2:0ef1b1712e64 74 if(!flag3) {
carlospomar 2:0ef1b1712e64 75 Vpp = Vpmax-Vpmin;
carlospomar 2:0ef1b1712e64 76 flag3=!flag3;
carlospomar 2:0ef1b1712e64 77 }
carlospomar 2:0ef1b1712e64 78 }
carlospomar 2:0ef1b1712e64 79 }
carlospomar 2:0ef1b1712e64 80 }
carlospomar 2:0ef1b1712e64 81
carlospomar 3:30f1e2f8308c 82 void calculovrms ()
carlospomar 3:30f1e2f8308c 83 {
carlospomar 3:30f1e2f8308c 84 for (contvrms=0; contvrms=99; contvrms++)
carlospomar 3:30f1e2f8308c 85 {valor = muestra(contvrms);
carlospomar 3:30f1e2f8308c 86 valor = valor*valor;
carlospomar 3:30f1e2f8308c 87 sumatorio = sumatorio + valor;}
carlospomar 3:30f1e2f8308c 88 Vrms = (constante*sumatorio)^(0.5);
carlospomar 3:30f1e2f8308c 89 }
carlospomar 2:0ef1b1712e64 90
carlospomar 1:591fea5f363b 91 int main()
carlospomar 1:591fea5f363b 92 {
carlospomar 1:591fea5f363b 93 muestreo.attach_us (&temporizador,200);
carlospomar 1:591fea5f363b 94 visualizar.attach (&mostrar, 1);
carlospomar 1:591fea5f363b 95 Sw.rise(&boton);
carlospomar 1:591fea5f363b 96
carlospomar 1:591fea5f363b 97 //printf("pwm set to %.2f %%\n", mypwm.read() * 100);
carlospomar 1:591fea5f363b 98
carlospomar 1:591fea5f363b 99 while(1) {
carlospomar 1:591fea5f363b 100 if (bufferlleno) {
carlospomar 1:591fea5f363b 101 suma=0;
carlospomar 2:0ef1b1712e64 102 flag3=0;
carlospomar 1:591fea5f363b 103 for (contm=0; contm<100: contm++) {
carlospomar 2:0ef1b1712e64 104 if (flag1==1) {
carlospomar 1:591fea5f363b 105 muestra=buffer1[contm];
carlospomar 1:591fea5f363b 106 } else {
carlospomar 1:591fea5f363b 107 muestra=buffer2[contm];
carlospomar 1:591fea5f363b 108 }
carlospomar 1:591fea5f363b 109 }
carlospomar 1:591fea5f363b 110 }
carlospomar 1:591fea5f363b 111
carlospomar 1:591fea5f363b 112 }
carlospomar 1:591fea5f363b 113 }