Advertisement
RuiViana

Frequencimetro

Oct 14th, 2017
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1.  
  2. unsigned int timer1_counter;                      // Variavel Para valor de precontagem de timer1
  3. long freq;                                        // Variavel para contagem
  4. unsigned long tempo;                              // Variavel para tempo de calculo
  5. unsigned long intervalo = 1000;                   // Variavel para intervalo de medida
  6. #define DEBUG;
  7. //--------------------------
  8. void setup()
  9. {
  10.   #ifdef DEBUG;                                 // Bloco para debug
  11. //  TCCR2B = TCCR2B & B11111000 | B00000001;        // Define frequencia PWM para D3 & D11 31250
  12.   TCCR2B = TCCR2B & B11111000 | B00000010;        // Define frequencia PWM para D3 & D11 3906.25
  13. //  TCCR2B = TCCR2B & B11111000 | B00000011;        // Define frequencia PWM para D3 & D11 976.5625
  14. //  TCCR2B = TCCR2B & B11111000 | B00000100;        // Define frequencia PWM para D3 & D11 488.28125
  15. //  TCCR2B = TCCR2B & B11111000 | B00000101;        // Define frequencia PWM para D3 & D11 244.140625
  16. //  TCCR2B = TCCR2B & B11111000 | B00000110;        // Define frequencia PWM para D3 & D11 122.0703125
  17. //  TCCR2B = TCCR2B & B11111000 | B00000111;        // Define frequencia PWM para D3 & D11 30.517578125
  18.   pinMode(11, OUTPUT);                            // Define port como output
  19.   analogWrite(11, 240);                           // Saida PWM no Port 11
  20. #endif;                                       // Bloco para debug
  21.  
  22.   Serial.begin(115200);                           // Habilita serial em 115200
  23.   noInterrupts();                                 // Desabilita todos interrupts
  24.   TCCR1A = 0;                                     // Limpa registrador de controle de timer1
  25.   TCCR1B = 0;                                     // ==
  26.   timer1_counter = 65535;                         // Tempo 65535 - overflow a cada 10 pulsos
  27.   TCNT1 = timer1_counter;                         // Tempo pre carregado
  28.   TCCR1B |= (1 << CS12);                          // Usa pulso externo
  29.   TCCR1B |= (1 << CS11);                          // ==
  30.   TCCR1B |= (1 << CS10);                          // ==
  31.   TIMSK1 |= (1 << TOIE1);                         // Habilita timer1  overflow interrupt
  32.   interrupts();                                   // Habilita todos interrupts
  33.   tempo = millis();                               // Atualiza tempo
  34. }
  35. //--------------------------
  36. ISR(TIMER1_OVF_vect)                              // Servico de interrupcao do time1
  37. {
  38.   TCNT1 = timer1_counter;                         // recarrega temp
  39.   freq++;                                         // Incrementa contage de frequencia
  40. }//--------------------------
  41. void tacometro()
  42. {
  43.    if ((millis() - tempo) > intervalo)
  44.   {
  45.     Serial.println(freq);                     // Calcula RPM com base em 60 segundos
  46.     freq = 0;                                     // Zera contagem
  47.     tempo = millis();                             // Atualiza tempo
  48.   }
  49. }
  50. //--------------------------
  51. void loop()
  52. {
  53.  tacometro();
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement