Libreria principal del graficador de bode

Files at this revision

API Documentation at this revision

Comitter:
JAgustinOtero
Date:
Thu Dec 06 00:07:02 2018 +0000
Commit message:
LIbreria principal

Changed in this revision

GraficadorDeBode.cpp Show annotated file Show diff for this revision Revisions of this file
GraficadorDeBode.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 1f97d368029f GraficadorDeBode.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GraficadorDeBode.cpp	Thu Dec 06 00:07:02 2018 +0000
@@ -0,0 +1,725 @@
+/*
+Libreria principal:
+en la misma se juntan las funciones de muestreo y toma de datos con las funciones de graficos
+ para poder muestrear en display los datos analizados
+
+
+*/
+
+#include "mbed.h"
+#include "math.h"
+#include "st7920.h"
+#include "ST7920Libreries.h"
+#include "GraficadorDeBode.h"
+#include "AD9833.h"
+#include "math.h"
+#include "string.h"
+#include "hal.h"
+
+#define Rango 100000
+
+#define R 1000.0
+#define C 1.0*pow(10.0,-6.0)
+
+#define K pow(10.0,potencia)
+
+enum {graficoComp, menuPrincipal, menuZoom, Info};
+enum {graficocompleto, zoom};
+enum {deshabilitado, habilitado};
+enum {HDTexto, GraficoCompleto, Zoom, TomarMediciones, FaseAngulo, InfoAdicional};
+
+//////////////////////////////////////////////////////////////
+//////////// PUERTOS /////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+Serial PC(USBTX,USBRX,115200);
+DigitalIn PULSADORMENU(PTC17);
+DigitalIn PULSADORRIGHT(PTA17);
+DigitalIn PULSADORLEFT(PTD2);
+DigitalIn PULSADORDOWN(PTA16);
+DigitalIn PULSADORUP(PTD3);
+DigitalIn FLANCOENTRADA(PTE20);
+DigitalIn FLANCOSALIDA(PTE21);
+AnalogIn ADC (PTC2);
+AnalogIn ADC2 (PTC1);
+DigitalOut A (PTB8);
+DigitalOut B (PTB9);
+//DigitalOut MC (PTB10);
+DigitalOut HOLA(PTE29);
+DigitalOut HOLA2(PTE30);
+//////////////////////////////////////////////////////////////
+//////////// VARIABLES ///////////////////////////////////////
+//////////////////////////////////////////////////////////////
+volatile char mode_rx_diff;    // flag
+unsigned char hab=0;
+unsigned int cantMediciones=114;
+uint32_t diff;
+unsigned char opcion=0;
+unsigned char screen=0;
+/*screen=3 menu 2
+  screen=2 ZOOM
+  screen=1 menu
+  screen=0 grafico*/
+unsigned char grafico_var=0;
+/*grafico_var=0 grafico completo
+  grafico_var=1 Zoom*/
+unsigned char text_var=1;
+/*texto habilitado/deshabilitado*/
+unsigned char neg=0,pos=0,polpantalla[6]= {2,2,2,2,2,2};
+unsigned char ZOOM=0;
+float tiempo = 0;
+unsigned char modo=fase;
+unsigned char habgrafico=0;
+unsigned char corte=0;
+float  defasaje[108]= {0};
+float defasaje_aux=0;
+float gananciadB[108]= {0};
+float ganancia[108] = {0};
+float frecuencias[108]= {
+    1,1,1,1,2,2,2,2,3,3,3,4,5,6,7,8,9,
+    11,12,14,16,18,20,23,26,29,33,37,42,48,54,61,69,78,88,
+    112,127,143,162,183,206,233,263,297,335,379,428,483,545,615,695,784,885,
+    1128,1274,1483,1623,1832,2069,2335,2636,2975,3359,3792,4281,4832,5455,6158,6951,7847,8858,
+    11288,12742,14384,16237,18329,20691,23357,26366,29763,33598,37926,42813,48329,54555,61584,69519,78476,88586,
+    112883,127427,143844,162377,183298,206913,233572,263665,297635,335981,379269,428133,483293,545559,615848,695192,784759,885866
+};
+char fcVector[7]= {0};
+float VMax=0;
+unsigned char fc_var=0;
+unsigned char fcVal=0;
+unsigned char MULTIPLEXOR=4;
+float muestras=0;
+float var_aux_muestras=0;
+float Vref=1/sqrt(2.0);
+unsigned int k=0;
+uint16_t var_fase=0;
+unsigned char hab_tiempo=0;
+
+//////////////////////////////////////////////////////////////
+//////////// FUNCIONES ///////////////////////////////////////
+//////////////////////////////////////////////////////////////
+
+/*realiza un barrido en frecuencia y toma valores tanto de modulo como de fase
+a su vez tambien varia la ganancia del modulo
+*/
+void barridoEnFrecuencia0a9(unsigned char i)
+{
+    unsigned int k=0;
+    unsigned int j=0;
+    setFreq(frecuencias[i]);
+    wait(0.4);
+    
+    /*medicion de MODULO*/
+    /*para frecuencias menores a 10Hz realiza un muestreo de 30000 muestras*/
+    if(i<1) {
+        MULTIPLEXOR=0;
+        A=(MULTIPLEXOR) & 1;
+        B=(MULTIPLEXOR & 2) >> 1;
+        //MC=(MULTIPLEXOR & 4) >> 2;
+        wait(0.5);
+    }
+    if(ganancia[i-1]>0.7) {
+        if(MULTIPLEXOR>0)MULTIPLEXOR--;
+        A=(MULTIPLEXOR) & 1;
+        B=((MULTIPLEXOR) & 2) >> 1;
+        //MC=((MULTIPLEXOR) & 4) >> 2;
+        wait(0.5);
+    } else if (ganancia[i-1]<0.075) {
+        if(MULTIPLEXOR<2)MULTIPLEXOR++;
+        A=(MULTIPLEXOR) & 1;
+        B=((MULTIPLEXOR) & 2) >> 1;
+        //MC=((MULTIPLEXOR) & 4) >> 2;
+        wait(0.5);
+    }
+    if(MULTIPLEXOR == 0 )Vref=1/1.4;
+    else if(MULTIPLEXOR == 1 )Vref=10/1.4;
+    else if(MULTIPLEXOR == 2 )Vref=100/1.4;
+    //else if(MULTIPLEXOR == 3 )Vref=0.1/sqrt(2.0);
+    //else if(MULTIPLEXOR == 4 )Vref=0.01/sqrt(2.0);
+    ganancia[i]=0;
+    if(i>=18){
+        /*for(unsigned int l=0; l<3; l++) {
+            ganancia[i] += ADC.read();
+        }
+        ganancia[i]=ganancia[i]/3.0;*/
+        ganancia[i] = ADC.read();
+        }
+    else if(i<18) {
+
+        for(k=0; k<30000; k++) {
+            var_aux_muestras=ADC2.read();
+            if(var_aux_muestras > muestras)muestras = var_aux_muestras;
+        }
+        ganancia[i] = muestras;
+    }
+    muestras=0;
+    k=0;
+    gananciadB[i] = 20 * log10( 3.3 * ganancia[i] / (float)Vref);
+    if(gananciadB[i]>60)gananciadB[i]=60;
+    else if(gananciadB[i]<-60)gananciadB[i]=-60;
+    if(gananciadB[i]<-19 && gananciadB[i]>-21)corte=i;
+    
+    /*medicion de FASE*/
+    /*Realiza un promedio entre 3 valores de la misma frecuencia*/
+    defasaje[i]=0;
+    if(gananciadB[i]>-30) {
+        //HOLA=1;
+
+        new_tx_value=0;
+        new_rx_value=0;
+
+        while(1) {
+            uint32_t diff;
+
+            if (new_tx_value==1) {
+                /*HOLA=1;
+                HOLA=0;*/
+                hab=2;
+
+            }
+            if(new_rx_value==1 && hab==2) {
+                /*HOLA2=1;
+                HOLA2=0;*/
+                hab=1;
+
+            }
+            if(hab==1) {
+                diff = rx_pin_captured_value - tx_pin_captured_value;
+                if((diff / TICKS_PER_MS) < 1000000) {
+                    defasaje[i]+=(diff/TICKS_PER_MS) * 360.0 / 1000.0 * frecuencias[i];
+                    //printf("%.1fHz : %.2fº\n" ,frecuencias[i],defasaje[i] );
+                }
+                hab=0;
+                j++;
+                setFreq(frecuencias[i]);
+                wait(0.3);
+                if(j>=3)break;
+                
+            }
+            
+                new_tx_value=0;
+                new_rx_value=0;
+        }
+    } else defasaje[i] = 1190; /*descarta cualquier valor de fase que corresponda a un valor de frecuencia cuya ganancia sea menor a -20dB*/
+    if(defasaje[i]<1180)defasaje[i]=defasaje[i]/3.0;
+    
+    j=0;
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void grafico()
+{
+    /*grafica los ejes cartecianos con los valores de modulo y fase segun corresponda(Solo luego de tomar una primer medicion)*/
+    Vline(0 , 10 , 64 , 1);
+    Hline(0 , 32 , 127 , 1);
+    DivisionesEjeY(2 , 10 , 6 , 10 , 3 , 1);
+    DivisionesEjeX(10 , 19 , 6 , 32 , 3 , 1);
+    if(text_var==1) {
+        TextoEjeY(modo,0);
+        TextoEjeX(0);
+    }
+    flechaY(2 , 32, 0 ,1);
+    flechaY(125 , 32, 1 ,1);
+    if(habgrafico==1) {
+        graficarcompleto(gananciadB);
+        if(modo==fase) {
+            Vline(0,12+corte,63,1);
+            for(unsigned int i = 0; i<32; i++) {
+                point(12+18,i*2,0);  }      
+        Vline(0,12+corte,63,1);
+            for(unsigned int i = 0; i<32; i++) {
+                point(12+18,i*2,0);
+            }
+        }
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void polaridad()
+{
+    /*Analiza si los valores de cierto rango de frecuencia estan por encima de 0, por debajo de 0 o ambos*/
+    if(modo==modulo) {
+        for(unsigned int j=0 ; j<6 ; j++) {
+            for(unsigned int i=0 ; i <= (cantMediciones / 6) ; i++ ) {
+                /*----------------------------------------------*/
+                if(gananciadB[(j*(cantMediciones/6))+i]>=0)pos++;
+
+                if(gananciadB[(j*(cantMediciones/6))+i]<0)neg++;
+                /*----------------------------------------------*/
+                if(pos>=(cantMediciones/6)-1) polpantalla[j]=0;
+
+                else if(neg>=(cantMediciones/6)-1) polpantalla[j]=1;
+
+                else polpantalla[j]=2;
+            }
+        }
+    }
+    if(modo==fase) {
+        for(unsigned int j=0 ; j<6 ; j++) {
+            for(unsigned int i=0 ; i <= (cantMediciones / 6) ; i++ ) {
+                /*----------------------------------------------*/
+                if(gananciadB[(j*(cantMediciones/6))+i]>=0)pos++;
+
+                if(gananciadB[(j*(cantMediciones/6))+i]<0)neg++;
+                /*----------------------------------------------*/
+                if(pos>=(cantMediciones/6)-1) polpantalla[j]=0;
+
+                else if(neg>=(cantMediciones/6)-1) polpantalla[j]=1;
+
+                else polpantalla[j]=2;
+            }
+        }
+    }
+    neg=0;
+    pos=0;
+
+}
+
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+/*Calcula la frecuencia de corte*/
+void FrecuenciaDeCorte()
+{
+    unsigned long fc = 0;
+    char InfoFc[9]= {'L','A',' ','F','C',' ','E','S',' '};
+    for(fcVal=0 ; fcVal<cantMediciones; fcVal++) {
+        if(gananciadB[fcVal] > VMax-4 && gananciadB[fcVal] < VMax-2) break;
+    }
+    fc = frecuencias[fcVal];
+    fcVector[0] = fc / 100000 + 48;
+    fcVector[1] = (fc / 10000) - ((fcVector[0] - 48) * 10) + 48;
+    fcVector[2] = ((fc / 1000) - ((fcVector[1] - 48) * 10)) - ((fcVector[0] - 48) * 100) + 48;
+    fcVector[3] = (((fc / 100) - ((fcVector[2] - 48) * 10)) - ((fcVector[1] - 48) * 100)) - ((fcVector[0] - 48) * 1000) + 48;
+    fcVector[4] = ((((fc / 10) - ((fcVector[3] - 48) * 10)) - ((fcVector[2] - 48) * 100)) - ((fcVector[1] - 48) * 1000)) - ((fcVector[0] - 48) * 10000) + 48;
+    fcVector[5] = (((((fc / 1) - ((fcVector[4] - 48) * 10)) - ((fcVector[3] - 48) * 100)) - ((fcVector[2] - 48) * 1000)) - ((fcVector[1] - 48) * 10000)) - ((fcVector[0] - 48) * 100000) + 48;
+    //PC.printf("%d%d%d%d%d%dHz",fcVector[0],(fcVector[1]),fcVector[2],fcVector[3],fcVector[4],fcVector[5]);
+    strcat(InfoFc,fcVector);
+    //PC.puts(InfoFc);
+    text(7,7,InfoFc,16,1);
+    fc_var=1;
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void infoBasica()
+{
+
+    FrecuenciaDeCorte();
+
+
+    //PC.printf("%d%d%d%d%d%dHz",fcVector[0],fcVector[1],fcVector[2],fcVector[3],fcVector[4],fcVector[5]);
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+float Valormaximo ()
+{
+    float aux = -100;
+    for(unsigned int i=0 ; i<cantMediciones ; i++ ) {
+        if(gananciadB[i]>aux) {
+            aux = gananciadB[i];
+        }
+    }
+    return aux;
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void graficoZOOM()
+{
+    /*-------------------------------------*//*ZOOM 0: GANANCIA POSITIVA*//*-------------------------------------*/
+    Vline(0 , 1 , 63 , 1);
+    if(polpantalla[ZOOM-1]==0) {
+        Hline(0 , 62 , 127 , 1);
+        DivisionesEjeY(2 , 20 , 3 , 1 , 3 , 1);
+        DivisionesEjeX(1 , 125 , 1 , 62 , 3 , 1);
+        if(text_var==1) {
+            text(4 , 62 , "0" , 1, 1);
+            text(4 , 4 , "60" , 2 , 1);
+            text(4 , 24 , "40" , 2 , 1);
+            text(4 , 44 , "20" , 2 , 1);
+            text(13,4,"dB",2,1);//dB
+        }
+        if(ZOOM==1) {
+            text(104,4,"1-10HZ",6,1);
+        }
+        if(ZOOM==2) {
+            text(96,4,"10-100HZ",8,1);
+        }
+        if(ZOOM==3) {
+            text(96,4,"100-1KHZ",8,1);
+        }
+        if(ZOOM==4) {
+            text(96,4,"1K-10KHZ",8,1);
+        }
+        if(ZOOM==5) {
+            text(88,4,"10K-100KHZ",10,1);
+        }
+        if(ZOOM==6) {
+            text(92,4,"100K-1MHZ",9,1);
+        }
+
+    }
+    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+    /*-------------------------------------*//*ZOOM 1: GANANCIA NEGATIVA*//*-------------------------------------*/
+    if(polpantalla[ZOOM-1]==1) {
+        Hline(0 , 1 , 127 , 1);
+        DivisionesEjeY(1 , 20 , 3 , 1 , 3 , 1);
+        DivisionesEjeX(1 , 125 , 1 , 1 , 3 , 1);
+        if(text_var==1) {
+            text(4 , 6 , "0" , 1, 1);
+            text(4 , 23 , "-20" , 3, 1);
+            text(4 , 43 , "-40" , 3 , 1);
+            text(4 , 63 , "-60" , 3 , 1);
+            text(17,63,"dB",2,1);//dB
+        }
+        if(ZOOM==1) {
+            text(104,63,"1-10HZ",6,1);
+        }
+        if(ZOOM==2) {
+            text(96,63,"10-100HZ",8,1);
+        }
+        if(ZOOM==3) {
+            text(96,63,"100-1KHZ",8,1);
+        }
+        if(ZOOM==4) {
+            text(96,63,"1K-10KHZ",8,1);
+        }
+        if(ZOOM==5) {
+            text(96,63,"10K-100KHZ",10,1);
+        }
+        if(ZOOM==6) {
+            text(92,63,"100K-1MHZ",9,1);
+        }
+
+    }
+    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+    /*-------------------------------------*//*ZOOM 2: GANANCIA MIXTA*//*-------------------------------------*/
+    if(polpantalla[ZOOM-1]==2) {
+        Hline(0 , 32 , 127 , 1);
+        DivisionesEjeY(2 , 10 , 6 , 1 , 3 , 1);
+        DivisionesEjeX(1 , 125 , 1 , 32 , 3 , 1);
+        if(text_var==1) {
+            text(4,4,"60",2,1);//60
+            text(4,14,"40",2,1);//40
+            text(4,24,"20",2,1);//20
+            text(6,38,"0",1,1);//0
+            text(3,44,"-20",3,1);//-20
+            text(3,54,"-40",3,1);//-40
+            text(3,63,"-60",3,1);//-60
+            text(13,4,"dB",2,1);//dB
+        }
+        if(ZOOM==1) {
+            text(104,4,"1-10HZ",6,1);
+        }
+        if(ZOOM==2) {
+            text(96,4,"10-100HZ",8,1);
+        }
+        if(ZOOM==3) {
+            text(96,4,"100-1KHZ",8,1);
+        }
+        if(ZOOM==4) {
+            text(96,4,"1K-10KHZ",8,1);
+        }
+        if(ZOOM==5) {
+            text(96,4,"10K-100KHZ",10,1);
+        }
+        if(ZOOM==6) {
+            text(92,4,"100K-1MHZ",9,1);
+        }
+
+    }
+    if(habgrafico==1) {
+        graficarZOOM(gananciadB);
+    }
+    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void menu()
+{
+    Cuadrado(0,127,8,63,1);
+    text(57,6,"MENU",4,1);
+    text(7,14,"HABILITAR O DESHABILITAR TEXTO",30,1);
+    text(7,23,"GRAFICO COMPLETO",16,1);
+    text(7,32,"ZOOM",4,1);
+    text(7,41,"TOMAR MEDICIONES Y GRAFICAR",26,1);
+    text(7,50,"MOSTRAR MODULO O FASE",21,1);
+    text(7,59,"INFORMACION ADICIONAL",21,1);
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void menu2()
+{
+    Cuadrado(0,127,8,63,1);
+    text(57,6,"ZOOM",4,1);
+    text(7,14,"1HZ A 10HZ",10,1);
+    text(7,23,"10HZ A 100HZ",12,1);
+    text(7,32,"100HZ A 1KHZ",12,1);
+    text(7,41,"1KHZ A 10KHZ",12,1);
+    text(7,50,"10KHZ A 100KHZ",14,1);
+    text(7,59,"100KHZ A 1MHZ",13,1);
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void graficarcompleto(float gananciadB[])
+{
+    /*grafica los valores tomados previamente*/
+    if(modo==modulo) {
+        for(unsigned int i=1 ; i<=cantMediciones ; i++) {
+            if(gananciadB[i]>=-60 && gananciadB[i]<=60)point(10+i,32 - (gananciadB[i]/2.0),0);
+            wait_ms(10);
+            //linea(10+((114/cantMediciones)*(i-1)) , 32 - (gananciadB[i-1]/2.0) , 10+((114/cantMediciones)*i) , 32 - (gananciadB[i]/2.0), 1);
+            //32 - ((20.0 * log10(hola))/2.0)
+        }
+    } else if(modo==fase) {
+        for(unsigned int i=1 ; i<=cantMediciones ; i++) {
+            if(defasaje[i]<=180)point(10+i,32 + (defasaje[i]/6.0),0);
+            else if(defasaje[i]>180 && defasaje[i]<360)point(10+i,32 - ((360 - defasaje[i])/6.0),0);
+            else
+                wait_ms(10);
+        }
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void graficarZOOM(float gananciadB[])
+{
+    polaridad();
+    if(modo==modulo) {
+        if(polpantalla[ZOOM-1]==0) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 62 - gananciadB[(cantMediciones/6)*(ZOOM-1)+(i-1)] , 1+(i*126/(cantMediciones/6)) , 62-gananciadB[(cantMediciones/6)*(ZOOM-1)+(i)], 1);
+            }
+        }
+        if(polpantalla[ZOOM-1]==1) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 2 - gananciadB[(cantMediciones/6)*(ZOOM-1)+(i-1)] , 1+(i*126/(cantMediciones/6)) , 2-gananciadB[(cantMediciones/6)*(ZOOM-1)+(i)], 1);
+            }
+        }
+        if(polpantalla[ZOOM-1]==2) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 32 - (gananciadB[(cantMediciones/6)*(ZOOM-1)+(i-1)]/2) , 1+(i*126/(cantMediciones/6)) , 32-(gananciadB[(cantMediciones/6)*(ZOOM-1)+(i)]/2), 1);
+            }
+        }
+    } else if(modo==fase) {
+        if(polpantalla[ZOOM-1]==0) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 62 - defasaje[(cantMediciones/6)*(ZOOM-1)+(i-1)/3] , 1+(i*126/(cantMediciones/6)) , 62-defasaje[(cantMediciones/6)*(ZOOM-1)+(i)/3], 1);
+            }
+        }
+        if(polpantalla[ZOOM-1]==1) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 2 - defasaje[(cantMediciones/6)*(ZOOM-1)+(i-1)/3] , 1+(i*126/(cantMediciones/6)) , 2-defasaje[(cantMediciones/6)*(ZOOM-1)+(i)/3], 1);
+            }
+        }
+        if(polpantalla[ZOOM-1]==2) {
+            for(unsigned int i=1 ; i<=(cantMediciones/6) ; i++) {
+                linea(1+((i-1)*126/(cantMediciones/6)) , 32 - (defasaje[(cantMediciones/6)*(ZOOM-1)+(i-1)]/6) , 1+(i*126/(cantMediciones/6)) , 32-(defasaje[(cantMediciones/6)*(ZOOM-1)+(i)]/6), 1);
+            }
+        }
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void PULSADORMENU_fun ()
+{
+    //enum{grafico, menu, ZOOM, menu2};
+    switch(screen) {
+        case graficoComp:
+            if(PULSADORMENU==1) {
+                wait(0.1);
+                if(PULSADORMENU==1)
+                    CLRScreen();
+                menu();
+                PC.printf("menu");
+                screen=1;
+            }
+            break;
+        case menuPrincipal:
+            if(PULSADORMENU==1) {
+                wait(0.1);
+                if(PULSADORMENU==1)
+                    CLRScreen();
+                /*-------------------------------------*//*OPCION 0: HABILITACION DE TEXTO*//*-------------------------------------*/
+                if(opcion==HDTexto) {
+                    text_var = !text_var;
+                    grafico();
+                    screen = 0;
+                } else if(opcion==GraficoCompleto) {
+                    grafico();
+                    ZOOM = 0;
+                    grafico_var=0;
+                    screen = 0;
+                    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+                    /*-------------------------------------*//*OPCION 2: ZOOM*//*------------------------------------------------------*/
+                } else if(opcion==Zoom) {
+                    menu2();
+                    screen = 2;
+                    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+                    /*-------------------------------------*//*OPCION 3: TOMA DE VALORES*//*-------------------------------------*/
+                } else if(opcion==TomarMediciones) {
+                    if(Rango==100000)cantMediciones=90;
+                    else if(Rango==1000000)cantMediciones=108;
+                    text(31,15,"TOMANDO VALORES",15,1);
+                    point(92,15,1);
+                    point(94,15,1);
+                    point(96,15,1);
+                    Cuadrado(5,121,20,50,1);
+                    setFreq(1);
+                    wait(0.3);
+                    for(unsigned int i= 0 ; i<cantMediciones  ; i++ ) {
+                        barridoEnFrecuencia0a9(i);
+                        Vline(20,6+i,50,1);
+                    }
+                    setFreq(1000);
+                    /*-------------------------------------*//*-------------------------------------*//*-------------------------------------*/
+                    CLRScreen();
+                    habgrafico=1;
+                    ZOOM=0;
+                    fc_var=0;
+                    grafico();
+                    polaridad();
+                    VMax=Valormaximo();
+                    screen = 0;
+                } else if(opcion==FaseAngulo) {
+                    //CLRScreen();
+                    if(modo==modulo)modo = fase;
+                    else if(modo==fase)modo = modulo;
+                    grafico();
+                    ZOOM = 0;
+                    grafico_var=0;
+                    screen = 0;
+                } else if(opcion==InfoAdicional) {
+                    //CLRScreen();
+                    infoBasica();
+                    screen=3;
+                }
+                opcion = 0;
+            }
+            break;
+        case menuZoom:
+            if(PULSADORMENU==1) {
+                wait(0.1);
+                if(PULSADORMENU==1)
+                    CLRScreen();
+                ZOOM = opcion + 1;
+                graficoZOOM();
+                grafico_var=1;
+                screen=0;
+                opcion = 0;
+            }
+            break;
+        case Info:
+            if(PULSADORMENU==1) {
+                wait(0.1);
+                if(PULSADORMENU==1)
+                    CLRScreen();
+                grafico();
+                screen=0;
+            }
+            break;
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+unsigned char PULSADORDOWN_fun()
+{
+    if(PULSADORDOWN==1 && (screen == 1 || screen == 2)) {
+        wait(0.1);
+        if(PULSADORDOWN==1) {
+            if(opcion<5 && screen == 1)opcion++;
+            else if(opcion<5 && screen == 2)opcion++;
+            for(unsigned char x=1 ; x < 5 ; x++) {
+                CLRVline(9,x,62);
+            }
+        }
+    }
+    return opcion;
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+unsigned char PULSADORUP_fun()
+{
+    if(PULSADORUP==1 && (screen == 1 || screen == 2)) {
+        wait(0.1);
+        if(PULSADORUP==1) {
+            if(opcion>0)opcion--;
+            for(unsigned char x=1 ; x < 5 ; x++) {
+                CLRVline(9,x,62);
+            }
+        }
+    }
+    return opcion;
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void PULSADORLEFT_fun()
+{
+    char var=0;
+    if(PULSADORLEFT==1) {
+        wait(0.1);
+        if(PULSADORLEFT==1 && screen ==0) {
+            if(ZOOM == 0)
+                var=1;
+            else var=0;
+            if(ZOOM >= 1) {
+                CLRScreen();
+                ZOOM--;
+            }
+            if (ZOOM == 0) {
+                if(var==0)CLRScreen;
+                grafico();
+            }
+        }
+        if(grafico_var==1 && ZOOM >= 1) {
+            graficoZOOM();
+            if(habgrafico==1) {
+                graficarZOOM(gananciadB);
+            }
+        }
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+void PULSADORRIGHT_fun()
+{
+    if(PULSADORRIGHT==1 && screen ==0) {
+        wait(0.1);
+        if(PULSADORRIGHT==1) {
+            if(ZOOM < 6) {
+                if(ZOOM==0)grafico_var=1;
+                CLRScreen();
+                ZOOM++;
+                if(grafico_var==1) graficoZOOM();
+                if(habgrafico==1) {
+                    graficarZOOM(gananciadB);
+                }
+            }
+        }
+    }
+}
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////
+unsigned char screen_pass()
+{
+    return screen;
+}
+
+void MedidorDeTiempo()
+{
+    if(hab_tiempo)
+        tiempo++;
+}
\ No newline at end of file
diff -r 000000000000 -r 1f97d368029f GraficadorDeBode.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GraficadorDeBode.h	Thu Dec 06 00:07:02 2018 +0000
@@ -0,0 +1,18 @@
+void grafico(void);
+void menu(void);
+void graficoZOOM(void);
+void graficarcompleto(float gananciadB[]);
+void graficarZOOM(float gananciadB[]);
+void PULSADORMENU_fun (void);
+unsigned char PULSADORDOWN_fun(void);
+unsigned char PULSADORUP_fun(void);
+void PULSADORLEFT_fun(void);
+void PULSADORRIGHT_fun(void);
+unsigned char screen_pass(void);
+void barridoEnFrecuencia0a9(unsigned char i);
+void menu2(void);
+void FrecuenciaDeCorte(void);
+void infoBasica(void);
+void polaridad(void);
+float Valormaximo (void);
+void MedidorDeTiempo(void);
\ No newline at end of file