RuiViana

Teste_PCNT.ino

Jul 4th, 2020
953
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include "driver/pcnt.h"                                    // Biblioteca de pulse count
  3.  
  4. #define PCNT_TEST_UNIT      PCNT_UNIT_0
  5. #define PCNT_CHANNEL        PCNT_CHANNEL_0
  6. #define PCNT_INPUT_SIG_IO   23
  7.  
  8. int16_t contador = 0;                                     // Contador de pulsos
  9. bool flag = false;                                        // Flag indicativo de overflow de pcnt
  10. uint32_t valor1 = 0;
  11. uint32_t valor2 = 0;
  12. uint32_t valor3 = 0;
  13. //----------------------------------------------------------------------------------
  14. void setup()
  15. {
  16.   Serial.begin(115200);                                   // Inicializa a serial
  17.   pcnt_config_t pcnt_config = { };                        // Instancia pulse config
  18.   pcnt_config.pulse_gpio_num = PCNT_INPUT_SIG_IO;         // Port de entrada dos pulsos
  19.   pcnt_config.channel = PCNT_CHANNEL;
  20.   pcnt_config.pos_mode = PCNT_COUNT_INC;                  // Conta na subida do pulso
  21.   pcnt_unit_config(&pcnt_config);                         // Inicializa PCNT
  22. }
  23. //----------------------------------------------------------------------------------
  24. void loop()
  25. {
  26.   if (flag == false)
  27.   {
  28.     pcnt_counter_clear(PCNT_TEST_UNIT);                     // Zera o contador PCNT
  29.     pcnt_get_counter_value(PCNT_TEST_UNIT, &contador);
  30.     valor1 = contador;
  31.     pcnt_get_counter_value(PCNT_TEST_UNIT, &contador);
  32.     valor2 = contador;
  33. //    valor2 = contador;        // No minimo 12,5 ns por instrucao
  34. //    valor2 = contador;
  35. //    valor2 = contador;
  36. //    valor2 = contador;
  37. //    valor2 = contador;
  38. //    valor2 = contador;
  39. //    valor2 = contador;
  40. //    valor2 = contador;
  41. //    valor2 = contador;
  42. //    valor2 = contador;
  43. //    valor2 = contador;
  44. //    valor2 = contador;
  45. //    valor2 = contador;
  46. //    valor2 = contador;
  47. //    valor2 = contador;
  48. //    valor2 = contador;
  49. //    valor2 = contador;
  50. //    valor2 = contador;
  51. //    valor2 = contador;
  52. //    valor2 = contador;      // No minimo total 12,5 * 20 = 250 ns  =  10 puslsos em 40 MHz
  53.     pcnt_get_counter_value(PCNT_TEST_UNIT, &contador);
  54.     valor3 = contador ;       // Com as 20 instrucoes aqui deveria ser 10 a mais do que sem elas
  55.     flag = true;
  56.     delay(100);
  57.   }
  58.   if (flag == true)
  59.   {
  60.     printf(" contador-1: %d", valor1);
  61.     printf(" contador-2: %d", valor2);
  62.     printf(" contador-3: %d\n", valor3);
  63.     flag = false;
  64.     pcnt_counter_clear(PCNT_TEST_UNIT);
  65.   }
  66. }
RAW Paste Data