Outils pour utilisateurs

Outils du site


td2_tns

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
td2_tns [2015/03/29 23:42]
bvandepo [Mise en place de l'achitecture logicielle pour le TNS]
td2_tns [2016/03/29 17:00] (Version actuelle)
bvandepo [Configuration du timer 2 en générateur d'interruptions]
Ligne 52: Ligne 52:
 <ifauth @prof> <ifauth @prof>
 ===Solution:​=== ===Solution:​===
 +<file cpp configtimer.cpp>​ 
 +void setupTimer2(unsigned char prescaler, unsigned int period){
   TCCR2A = 0;// set entire TCCR2A register to 0   TCCR2A = 0;// set entire TCCR2A register to 0
   TCCR2B = 0;// same for TCCR2B   TCCR2B = 0;// same for TCCR2B
   TCNT2  = 0;//​initialize counter value to 0   TCNT2  = 0;//​initialize counter value to 0
-  OCR2A = 124;+  OCR2A = period;
   // turn on CTC mode   // turn on CTC mode
   TCCR2A |= (1 << WGM21);   TCCR2A |= (1 << WGM21);
-  TCCR2B |= (1 << CS21); // config of prescaler+  TCCR2B |= prescaler & 0x7; // config of prescaler
   // enable timer compare interrupt   // enable timer compare interrupt
   TIMSK2 |= (1 << OCIE2A); ​   TIMSK2 |= (1 << OCIE2A); ​
 +}
 +</​file>​
 </​ifauth>​ </​ifauth>​
  
Ligne 77: Ligne 80:
 <ifauth @prof> <ifauth @prof>
 ===Solution:​=== ===Solution:​===
 +<file cpp adc1.cpp>​
   void setupADCPolling()   void setupADCPolling()
   {   {
 +        ADCSRB=0; ​
  ADCSRA ​  = 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0 | 1 << ADEN; // div 128, enabled  ADCSRA ​  = 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0 | 1 << ADEN; // div 128, enabled
-        ADMUX    = 0;  //choix entrée analogique 0 et référence de tension =VCC+        ADMUX    = 1 << 6;  //choix entrée analogique 0 et référence de tension =VCC
   }   }
   /*! \brief ADC Conversion Routine in single ended mode */   /*! \brief ADC Conversion Routine in single ended mode */
Ligne 93: Ligne 97:
        ​return result ;        ​return result ;
   }   }
 +  </​file>​
 </​ifauth>​ </​ifauth>​
 +
 +
 +
 +<ifauth @prof>
 +TODO: expliquer la décomposition en 2 fonctions
 +
 +<file cpp adc2.cpp>​
 +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////​
 +/*! \brief ADC Conversion Routine start */
 +inline void startReadADCPolling(void)
 +{
 +  ADCSRA ​ |= (1 << ADSC);​  ​       // Start ADC Conversion
 +}
 +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////​
 +/*! \brief ADC Conversion Routine wait and read */
 +inline unsigned int finishReadADCPolling(void)
 +{
 +  unsigned int result;
 +  while ((ADCSRA & (1 << ADIF)) != 0x10); // Wait till conversion is complete
 +  result ​  = ADC;                                              // Read the ADC Result
 +  ADCSRA ​ |= (1 << ADIF);​  ​       // Clear ADC Conversion Interrupt Flag
 +  return result ;
 +}
 +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////​
 +</​file>​
 +</​ifauth>​
 +
 Le convertisseur de l'​Atmega328 est capable de fonctionner en mode "free running"​. Dans ce mode l'ADC effectue la conversion du canal sélectionné aussi rapidement que possible est génère une interruption de fin de conversion. La routine d'​interruptions associée peut alors lire le résultat de la conversion sans attente. Le convertisseur de l'​Atmega328 est capable de fonctionner en mode "free running"​. Dans ce mode l'ADC effectue la conversion du canal sélectionné aussi rapidement que possible est génère une interruption de fin de conversion. La routine d'​interruptions associée peut alors lire le résultat de la conversion sans attente.
  
td2_tns.1427665342.txt.gz · Dernière modification: 2015/03/29 23:42 par bvandepo