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 funcionar, y ahi van mis preguntas:
Que frecuencia de muestreo estoy obteniendo?

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);
}
}