Estoy intentando enviar el valor de un contador que se ejecuta en timer1 (32 bits) a otro chip, idealmente a través de SPI. El temporizador dispara una interrupción cada 1 ms para incrementar el contador. En general, la variable aumenta constantemente, pero por alguna razón, la variable retrocede ocasionalmente.
unsigned long t=0;
void timer1ISR(){
timerFlagBit=0;//clear interrupt flag
t++;//increment the counter
}
void sendValue(){
static unsigned long tempT;
tempT=t; //save the value to a temporary variable
Spi_Write(tempT>>16); //most sig byte. I only want a three byte value
Spi_Write(tempT>>8);
Spi_Write(tempT); //least sig byte
}
void main(){
init();
startTimer();
while(1){
Delay_us(500);
sendValue();
}
}
¿Algún consejo sobre cómo transmitir un valor que se incremente rápidamente?
Aquí hay algunos ejemplos (saqué valores repetitivos): Se incrementa en un paso de uno a 0 a 20. El siguiente valor justo después de 20 es 99. Luego aumenta de 99 a 114 en un paso de uno y luego el siguiente valor es 95. Después de 95 vienen 96, 97, 98, luego 197, 198, 199, 200, 201. Después de 201, vuelve a 182 y comienza a aumentar de 182 a 196. Después de 196, salta a 276.
Entonces, solo al principio, salta de acuerdo con un patrón si grafico todos los valores. Se ve así: Al cabo de un rato el valor se estabiliza. He jugado con la prioridad con el temporizador pero nada ha cambiado.
Esto se hace en una foto de Microchip.