Outils pour utilisateurs

Outils du site


tuto_avr_eclipse_2nd_projet_-_timer_led

Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

tuto_avr_eclipse_2nd_projet_-_timer_led [2013/11/10 20:59]
spelle [Explication de Code]
tuto_avr_eclipse_2nd_projet_-_timer_led [2013/11/10 21:05] (Version actuelle)
spelle [Explication de Code]
Ligne 74: Ligne 74:
 En mode CTC, pour les Timer #0 ou #2 (8-bit), la frequence minimale (avec un prescaler de //1/1024// et une valeur de comptage au maximum (//0xFF = 255//) est de //~30Hz//. En mode CTC, pour les Timer #0 ou #2 (8-bit), la frequence minimale (avec un prescaler de //1/1024// et une valeur de comptage au maximum (//0xFF = 255//) est de //~30Hz//.
 Pour le Timer #1 (16-bit), avec les memes conditions (prescaler à //1/1024// et valeur de comptage au max (//0xFFFF = 65535//) est de //0.1Hz//. Pour le Timer #1 (16-bit), avec les memes conditions (prescaler à //1/1024// et valeur de comptage au max (//0xFFFF = 65535//) est de //0.1Hz//.
 +
 +> NB : Cette frequence max est la frequence de la broche OCnA qui est togglé a chaque //Compare Match// (en mode //CTC//)
  
 A tout moment, n'​hesitez pas a vous referer a la datasheet, les explications y sont (beaucoup) plus exhaustives ! :-) A tout moment, n'​hesitez pas a vous referer a la datasheet, les explications y sont (beaucoup) plus exhaustives ! :-)
Ligne 95: Ligne 97:
  
 <code c> <code c>
-OCR1A   ​= ​15624 ; // Set CTC compare value to 1Hz at 16MHz AVR clock, with a prescaler of 256+OCR1A   ​= ​62499 ; // Set CTC compare value to 1Hz at 16MHz AVR clock, with a prescaler of 256
 </​code>​ </​code>​
  
-La valeur //15624// est defini par la formule donnée dans la datasheet :+La valeur //62499// est defini par la formule donnée dans la datasheet :
  
 <code c> <code c>
Ligne 106: Ligne 108:
 Avec N etant la valeur du prescaler, soit //1//, //8//, //64//, //256//, ou //1024//. Avec N etant la valeur du prescaler, soit //1//, //8//, //64//, //256//, ou //1024//.
  
-En choisissant un prescaler, il est ensuite facile de trouver la valeur qui va bien. Pour avoir une periode à 1 seconde, le prescaler de //64// permet de monter jusqu'​a //125KHz//, et de descendre jusqu'​à //~1.9Hz//.+En choisissant un prescaler, il est ensuite facile de trouver la valeur qui va bien. Pour avoir une periode à 1 seconde, le prescaler de //256// permet de monter jusqu'​a //31.25KHz//, et de descendre jusqu'​à //~0.47Hz//.
  
 Les interruptions sont ensuite activées. Jusqu'​a present, elles etaient descativées ; on dit aussi masquées. Les interruptions sont ensuite activées. Jusqu'​a present, elles etaient descativées ; on dit aussi masquées.
Ligne 114: Ligne 116:
 </​code>​ </​code>​
  
-Le Timer est ensuite demarré simplement en configurant le prescaler. Il faut garder a l'​esprit que ecrire dans registre de controle, derriere il y a tout un ensemble de circuits logiques qui se mettent en route. En activant le prescaler, on vient demander l'​application du signal d'​horloge à //F_CPU/64 250KHz// sur notre Compteur/​Timer.+Le Timer est ensuite demarré simplement en configurant le prescaler. Il faut garder a l'​esprit que ecrire dans registre de controle, derriere il y a tout un ensemble de circuits logiques qui se mettent en route. En activant le prescaler, on vient demander l'​application du signal d'​horloge à //F_CPU/256 62.5KHz// sur notre Compteur/​Timer.
  
 <code c> <code c>
Ligne 136: Ligne 138:
 Bon, là pas de grosse difficultées,​ on vient dire que l'on defini une Interrupt Sub-Routine pour le Comparateur A du Timer #1. Oui, il y a deux comprateur pour le Timer #1, le A et le B. L'//​ISR//,​ quand elle est appellée va venir faire clignoter notre LED de la meme maniere que précédemment. Bon, là pas de grosse difficultées,​ on vient dire que l'on defini une Interrupt Sub-Routine pour le Comparateur A du Timer #1. Oui, il y a deux comprateur pour le Timer #1, le A et le B. L'//​ISR//,​ quand elle est appellée va venir faire clignoter notre LED de la meme maniere que précédemment.
  
-Ce qui se passe... Le Compteur/​Timer #1 compte jusqu'​a notre valeur a la vitesse de //15.625KHz//... Il arrive à //15625// en une seconde... Une fois à cette valeur le module de comparaison detecte que la valeur actuelle du Compteur est egale a celle de OCR1A, il leve le Flag OCF1A, qui si les interruptions ne sont pas masquées, génère une interruption.+Ce qui se passe... Le Compteur/​Timer #1 compte jusqu'​a notre valeur a la vitesse de //62.5KHz//... Il arrive à //62499// en une seconde... Une fois à cette valeur le module de comparaison detecte que la valeur actuelle du Compteur est egale a celle de OCR1A, il leve le Flag OCF1A, qui si les interruptions ne sont pas masquées, génère une interruption.
  
 L'​interruption est donc prise en compte par le mircoprocesseur,​ qui va s'​interrompre et va appeller le vecteur d'​interruption correspondant a l'​interruption qui l'a interrompu ; dans notre cas //​TIMER1_COMPA_vect//​. Dans les faits, il s'agit d'un simple saut a l'​adresse de la fonction definie comme //ISR//... L'​interruption est donc prise en compte par le mircoprocesseur,​ qui va s'​interrompre et va appeller le vecteur d'​interruption correspondant a l'​interruption qui l'a interrompu ; dans notre cas //​TIMER1_COMPA_vect//​. Dans les faits, il s'agit d'un simple saut a l'​adresse de la fonction definie comme //ISR//...
  
 ---- ----
- 
 ===== Remarques, Propositions d'​améliorations,​ Questions ===== ===== Remarques, Propositions d'​améliorations,​ Questions =====
  
tuto_avr_eclipse_2nd_projet_-_timer_led.txt · Dernière modification: 2013/11/10 21:05 par spelle