ESP32 頻率計數器(Frequency Counter)的主要控制是放在程式中,頻率計數器程式是可以更改時基(Time Base),PCNT 是作波形發生的數量,使用 ESP32 IDF 的 PCNT 和 RMT API來實現。
ESP32 頻率計數器 Frequency Counter 製作 |
// Please connect GPIO26 and GPIO18
#define GPIO_SIGNAL_INPUT 26 // RMT Input = GPIO26
#define GPIO_RMT_GATE 5
#define LEDC_OUTPUT_IO 18
// LEDC Output = GPIO 18
static void init_pcnt(uint8_t pulse_gpio, uint8_t ctrl_gpio,
pcnt_unit_t unit, pcnt_channel_t channel, uint16_t filter_length)
{
// set up counter
pcnt_config_t pcnt_config =
{
.pulse_gpio_num =
pulse_gpio,
.ctrl_gpio_num = ctrl_gpio,
.lctrl_mode =
PCNT_MODE_DISABLE,
.hctrl_mode =
PCNT_MODE_KEEP,
.pos_mode =
PCNT_COUNT_INC,
.neg_mode =
PCNT_COUNT_INC,
.counter_h_lim = 0,
.counter_l_lim = 0,
.unit = unit,
.channel = channel,
};
}
|
ESP32 頻率計數器 Frequency Counter 主程式:
void app_main()
{
frequency_count_configuration_t config;
config.pcnt_gpio = GPIO_SIGNAL_INPUT;
config.pcnt_unit = PCNT_UNIT;
config.pcnt_channel = PCNT_CHANNEL;
config.rmt_gpio = GPIO_RMT_GATE;
config.rmt_channel = RMT_CHANNEL;
config.rmt_clk_div = new_clk_div;
config.rmt_max_blocks = 2;
config.sampling_period_seconds = new_sample_period;
config.sampling_window_seconds = new_window_duration;
config.filter_length = new_filter_length;
config.window_start_callback = &pcnt_window_callback;
config.frequency_update_callback = &pcnt_freqcount_callback;
// task
takes ownership of allocated memory
xTaskCreate(&frequency_count_task_function,
"frequency_count_task", 4096, config, 5, NULL);
}
|
操作系統:Windows 7 64-bit 版本
開發環境:AiThinker05 版本
原程碼: ESP32 ESP-IDF V3.0rc1
程式:DIY-ESP32-029-PCNT_05_FreqCount_Menu-20181214
ESP32 頻率計數器 Frequency Counter 運行中 |
ESP32 頻率計數器 Frequency Counter 電路製作顯示 |
ESP32 頻率計數器 Frequency Counter 電路製作的設定菜單 |
ESP32 頻率計數器 Frequency Counter 電路製作的 Frequency Counter 設定菜單 |
ESP32 頻率計數器 Frequency Counter 電路製作設定最高頻率的菜單 |
ESP32 頻率計數器 Frequency Counter 電路製作和遙控器 |
2018年 12月 26日 天氣報告
氣溫:19.3度 @ 20:40
相對濕度:百分之 90%
天氣:天色良好