Bonjour à tous
Je sollicite votre aide car je suis depuis plusieurs jours sur un problème que je ne parviens pas à résoudre. J?ai débuté l?étude des microcontrôleurs. J?ai réalisé le traditionnel « Hello world » de la led qui clignote pour valider que tout fonctionne parfaitement. Maintenant je souhaite passer l?étape suivante : multiplexage + timer pour faire un basic compteur 3 chiffres. Voir mon programme plus bas Le multiplexage est OK j?ai bien 999 qui s?affiche correctement. Pour la clarté du programme je n?ai pas détaillé les fonctions :
clear_all() efface les chiffres DigitTo7SegEncoder renvoies les digits à allumer OutPort() allume effectivement les digits fournit par DigitTo7SegEncoder affiche() elle appelle les 3 fonctions précédentes pour l?affichage des
3 chiffresJ?ai choisi le timer0 (c?est le plus simple et je ne cherche pas pour le moment de précision temporelle) pour décrémenter le compteur (variable compte) Là où se situe mon problème c?est concernant le timer ; il ne se déclenche JAMAIS !!! J?ai même mis une led « mouchard » pour vérifier si la procédure est exécutée au moins une fois (elle ne s?est jamais allumée) Après avoir épluché le web en long en large et en travers, je suis en manque d?idée. D?ailleurs vous remarquerez une fonction delay que j?ai réécrit. Avant j?utilisais delay_loop_1 ou 2 de delay.h car j?avais lu que ces fonctions utilisaient les timers et j?ai pensé que le problème pouvait venir de là mais apparemment non.
Précision peut être utile : Micro : ATMEGA8 16PU (sans quartz - 1Mhz) les fuses ont été laissé défaut usine Compilé avec atmel studio 6 (en procédure debug pas à pas le timer est bien exécuté) Optimisation compilation: -O2 Programmateur : série Logiciel : ponyprog
Je me vois mal continuer sur les micros sans utiliser les timer ;-) Merci d?avance pour votre aide
Mon chef d??uvre un peu bancal :
#define F_CPU 1000000UL #include #include
/*Global Variables Declarations*/ volatile uint16_t compte = 999; unsigned char digit1; unsigned char digit2; unsigned char digit3;
/*Function Declarations*/ unsigned char DigitTo7SegEncoder(unsigned char digit); void clear_all(); void affiche(); void OutPort(unsigned char val); void delay();
void main() { // paramétrage du timer TCCR0|=(1