Go Down

Topic: CTC Mode  (Read 142 times) previous topic - next topic

gaelperr

Hello,

Je voudrais utiliser le mode CTC sur le timer 2 (OC2B --> pin 3 arduino)
J'ai regardé comment le configurer sur le datasheet de l'atmega et j'arrive à ça :

TCCR2A = 0xD2;         
TCCR2B = 0x07;   //Division clock par 1024   
TIMSK2 = 0x06;        //Activer interrupt et comparaisons

Ensuite je rentre une valeur dans OCR2A entre 0 et 255 pour modifier le rapport cyclique.

Mais je n'obtiens aucun signal en réalité... J'ai lu et relue le datasheet, mais je ne vois pas ce qui me manque..

Merci de votre aide.    

dfgh

hello
TCCR2A = 0b00010000; // compteur OCR2B                                   
TCCR2B = 0b00000001; // pas de prescaler 
TIMSK2 = 0b00000001; // debordements pris en compte
OCR2B  = 10;
sei();

_pepe_

#2
Apr 17, 2018, 11:15 am Last Edit: Apr 17, 2018, 11:28 am by _pepe_
Bonjour

Quote
Code: [Select]
TCCR2A = 0xD2;
TCCR2B = 0x07;
TIMSK2 = 0x06;

De ces valeurs, on déduit la configuration suivante :

  WGM2:010 mode 2 CTC (Clear Timer on Compare Match)
  COM2A:11 force OC2A à 1 quand TC2=OCR2A
  COM2B:01 change OC2B quand TC2=OCR2B
  CS2:111  prédiviseur N=1024
  OCIEA:1  interruption Output Compare Match A activée 
  OCIEB:1  interruption Output Compare Match B activée
  TOIE:0   interruption Overflow désactivée


Dans le mode CTC, OCR2A définit la valeur finale du comptage, et par conséquent la fréquence de sortie. Avec COM2B=1, on obtient sur la sortie OC2B (pin 3) un signal carré (rapport cyclique = 50%) de fréquence :

 f = fcpu/(2N(1+OCR2A))

avec ici N=1024.

A priori :
- si la sortie OC2A (pin 11) n'est pas utilisée, COM2A devrait rester à 0 ;
- le fait d'activer les interruptions n'est pas utile. TIMSK2 devrait rester à 0 (valeur par défaut).

Pour que le programme fonctionne, il faudrait :
- configurer en sortie la pin OC2B (pin 3) afin qu'elle produise un signal ( pinMode(3,OUTPUT); )
- écrire dans OCR2A la valeur fixant la fréquence ;
- écrire dans OCR2B une valeur inférieure à celle de OCR2A.

OCR2B fixe juste le retard (déphasage) entre le canal B et le canal A.


Si le but est de produire un signal avec un rapport cyclique différent de 50%, alors il faut configurer le compteur-timer dans un mode PWM. Si l'on souhaite régler finement la fréquence, on doit choisir le mode 5 (PWM Phase Correct) ou le mode 7 (Fast PWM).

68tjs

La configuration est incomplete.
Tu as bien donné les ordres pour que le timer 2 prenne le contrôle d'une pin.

Mais tu n'a pas configuré l'étage de sortie de cette pin.
Ce sont des opérations indépendantes l'une de l'autre.

Il faut que tu place la pin en configuration de sortie, soit avec un pinMode, soit puisque tu es dans les registres autant continuer en configurant le bon registre DDRX.

Go Up