Autor Tema: Almacenar datos  (Leído 1594 veces)

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

Desconectado eleguez

  • PIC10
  • *
  • Mensajes: 21
Almacenar datos
« en: 06 de Febrero de 2007, 16:59:30 »
Hola a tod@s, tengo algun problemilla al programar el pic 16f876A, a ver si me podeis ayudar.

Tengo una entrada analógica cada 200ms y la visualizo en un LCD, lo he programado para que lea 100 entradas y haga la media,

for(i=0;i<=99;++i)
{
medida=read_adc();
delay_us(200);
lectura+=medida;
}
x=(lectura/100);

pero para que no me varíe tanto el resultado, queria que almacene 100 entradas y al tener una nueva entrada, quite la primera de esas 100 ya existentes, le añada la ultima y haga la media y asi sucesibamente. ¿alquien me puede decir como hacerlo?





Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Almacenar datos
« Respuesta #1 en: 06 de Febrero de 2007, 17:28:39 »
Hola, lo que comentas se puede hacer con una "cola" o estructura "FIFO"... pero esto es un poco lioso de implementar,al menos para mi :D. Esperemos a ver si alguien tiene una solución más simple...

Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Almacenar datos
« Respuesta #2 en: 06 de Febrero de 2007, 17:31:22 »
Se me acaba de ocurrir....¿Por que no "ves" los 100 bytes como un circulo, donde a continuacion del 100 viene el 1? Vas escribiendo en el 1,2,3....99,100 y pasas de nuevo al 1. El secreto esta en llevar en alguna variable la posicion del principio de la cola, de forma que simpre sepas cual es el ultimo dato....
De esa forma de ahorras el mover los datos cada vez que queres agregar uno....

¿Se entiende? :shock:

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Almacenar datos
« Respuesta #3 en: 06 de Febrero de 2007, 17:34:50 »
Debes hacer un arreglo de 100 elementos, luego sumar esos 100 valores.  Por último una vez obtenido esto , usas un indice j que permita ir de 0 a 99 , y al llegar a 100 se haga 0 (nunca sería 100).

Cada lectura sería medida[j] = read_adc();

Entonces sería algo asi como

Código: C
  1. int medida[100];
  2. long lectura;
  3. int j, primeravuelta;
  4.  
  5.  
  6. void calculo_media(int max)
  7. {
  8.    lectura = 0;
  9.    for (i=0;i<max;i++)   lectura += medida[i];
  10. }
  11.  
  12.  
  13. void main (void) {
  14.  
  15.    primeravuelta = 0;  // indica que nunca llegó a 100 ni siquiera 1 vez
  16.    j=0;
  17.   while (1) {
  18.       medida[j]=read_adc();
  19.       delay_us(200);
  20.       j++;
  21.       if (j==100) {
  22.           j=0;
  23.           primeravuelta = 1;
  24.       }
  25.       if (primeravuelta) calculo_media(100)
  26.       else calculo_media(j);
  27.   }
  28.  
  29. }

El resultado estará siempre en lectura la cual es una variable global pero pudieras por ejemplo cambiar el prototipo de la función de cálculo para que te devuelva el cálculo ahí mismo.

No lo he probado pero debiera funcionar, de todas formas, lo importante creo que es la 'idea' de como resolver algo asi.

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