Bonjour,
Aujourd'hui je viens vous ennuyer avec les timers de l'atmega328p
Je suis entrain de coder une fonction qui me permetrais de voir depuis quand le µc est allumé (millis() sous arduino), pour cella j'utilise le timer1 qui est de 16bits mais je ne sais pour qu'elle raison ça ne fonctionne pas ...
Le code :
Je vois bien que TCNT1L change mais TCNT1H lui ne bouge pas ...Code:#include <avr/io.h> #include <avr/interrupt.h> unsigned long int ms = 0; void timer1_init() { TCCR1A = 0x00; //Désactive les comparateur + Mode normal TCCR1B = 0x00; /* Horloge à 16Mhz 1 période = 62.5ns clk/8 = 0.5µs clk/64 = 4µs Le prescale sera à 8 */ TCCR1B |= (1<<CS12) | (0<<CS11) | (1<<CS10); //Prescale à 8 TIMSK1 = 1<<TOIE1; // Initialisation de l'interuption de débordement sei(); } unsigned long int millis() { return TCNT1 / 2 + ms; } ISR(TIMER1_OVF_vect) { ms += 32768; //Lors du débordement le timer est égale à (2^16)*0.5 ms } int main(void) { timer1_init(); DDRD = 0xff; while(1) { PORTD = TCNT1H; } }
Quelle-qu'un saurait-il me dire ou est l'erreur ?
Merci d'avance
-----