Autor Tema: a que velocidad muestreo?  (Leído 1797 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Keiper

  • PIC10
  • *
  • Mensajes: 10
a que velocidad muestreo?
« en: 14 de Marzo de 2006, 06:46:00 »
Hola que tal, tengo un problema en mi programa que hace que no funcione correctamente.
Primero explicare lo que hace el programa:
Adquiero una señal de audio "simétrica" que varia en funcion al movimiento de un motor, y hago la conversion.
Voy guardando el valor máximo encontrado durante un tiempo de 10 segundos. Pasado ese tiempo continuo adquiriendo esa señal, pero ahora quiero que cuando se encuentre un valor igual o mayor al máximo guardado el motor se detenga.
El programa funciona, pero creo que no todo lo bien que podría funcionarSonrisa Gigante, y ahi van mis preguntas:
Que frecuencia de muestreo estoy obteniendo?Llorando
Se puede muestrear a mayor velocidad? ,obtener más muestras por periodo?
Gracias a todos.

#include <16F876.H>
#device ADC=10               //Directiva para obtener una resolucion de 10 bits.
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use Delay(Clock=4000000)     //Reloj
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7, RESTART_WDT)
long periodo=0;
float valor;

#INT_TIMER1                   //Desbordamiento TMR1
void timer1()
   {
   set_timer1(64536);        //Recarga TMR1 con 1ms como base de tiempo
   periodo=periodo+1;        //Incremento de la variable periodo
   }

void  motor()  //Rutina para activación de motor
   {
    output_high(pin_b0);   //pin_b0 y pin_b1 habilitan las señales del driver L239B
    output_low(pin_b1);
    output_high(pin_b2);
   }

float conversion()
{
   valor=read_adc();
   valor=valor/204.8;
   return(valor);
}

void main()
{
   float maximo;
   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);     //Configuracion del conversor A/D
   set_adc_channel(0);
   enable_interrupts(INT_TIMER1);                  
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);        
   enable_interrupts(GLOBAL);                        
   set_timer1(64536);    
   maximo=0;

while(1)
{
   while(periodo<10000)         // temp=10 segundos
      {
         conversion();
         if(valor>maximo)
         {
         maximo=valor;  //Guarda en max el  si es mayor que el anterior
         output_high(pin_b5);
         delay_ms(100);
         output_low(pin_b5);
         motor();
         printf("VALOR MAXIMO= %f voltios
",maximo );
         }
         else
         {
         motor();
         printf("Valor no maximo= %f voltios
",valor);
         }
      }
   disable_interrupts(INT_TIMER1);
   conversion();
   while(valor<maximo)
      {
         conversion();
         output_high(pin_b4);
         motor();
         printf("Buscando el valor maximo= %f voltios
", maximo);
      }
         setup_adc (adc_off);                 //Apaga ADC
         output_high(pin_b5);
         output_low(pin_b2);
         printf("Valor maximo encontrado= %f voltios
", valor);
}
}

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: a que velocidad muestreo?
« Respuesta #1 en: 14 de Marzo de 2006, 18:53:00 »
No hace falta que preguntes 2 veces, he aquí mi respuesta

http://miarroba.com/foros/ver.php?foroid=6510&temaid=4995350

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything