¿Debo usar Counter1 para registrar datos de series de tiempo?

0

Mi Atmega328 grabará datos de un sensor externo a aproximadamente 100Hz durante varios minutos. La comunicación se realiza a través de peticiones I2C al sensor. Necesito almacenar el tiempo de medición (en relación con la primera medición) junto con los datos del sensor. Se requiere una precisión de al menos 1 ms.

Mi plan es:

  • Inicie Counter1 (16 bits) en una escala apropiada
  • Cuando el Contador1 se ajusta, incrementa algún registro
  • Cuando se solicitan datos del sensor, también almacene los valores de Counter1 y el registro de recuento de envoltura

¿Es este un buen plan? ¿Hay mejores soluciones?

    
pregunta Andreas

2 respuestas

1

Suena bien. La forma en que esto se hace generalmente es que el reinicio del temporizador se lance e interrumpa, lo que establece un indicador. En su bucle principal, maneje todo lo que necesita manejo, y luego espere a que se establezca la bandera. Una vez establecido, restablezca la bandera a cero, llame a su rutina de lectura, aumente su índice y luego repita.

Esto supone que tienes tiempo para hacer todo lo que necesitas hacer entre los reinicios del temporizador. Si no lo haces, es un tema más complicado.

Seudocódigo abajo. Cada compilador tendrá diferentes formas de definir las rutinas de interrupción.

int1 flag=0;


null timer_isr(){
flag=1;
preload_your_timer_to_correct_value; // there are more exact ways to do this
}    


main {
            int8 x=0;
            setup_and_start_your timer;
            preload_your_timer_to_correct_value;
            x=0;  //This is your index


                while (1) {
                while (flag==0) {} //program will hold here
                flag =0 ;
                read_data_and_put_in_location x // pseudocode, obviously
                x +=;




                }

        }
    
respondido por el Scott Seidman
0

La marca de tiempo es una excelente solución, y existen chips ADC con función de marca de tiempo de hardware. Lamentablemente no esta.

Así que querrás usar un contador de temporizador si existe.

Esta referencia podría ayudarte Programación del temporizador de 16 bits en atmega328

    
respondido por el Iancovici

Lea otras preguntas en las etiquetas