2018年11月22日 星期四

DIY - ESP32:ESP32 RMT API 函數介紹(三十五)

DIY - ESP32:ESP32 RMT API 函數介紹(三十五):

RMT(遠程控制 / Remote Control )驅動程序模塊可用於發送和接收紅外遙控(Infrared Remote Control)信號。 由於 RMT 模塊的靈活性,驅動器還可用於產生或接收許多其他不同類型的信號。

ESP32 RMT (Remote Control)圖框
信號是由一系列脈衝組成,根據值列表產生成,並由 RMT 的發射。 這些數值定義脈衝持續時間和二進制水平, 發射器還可以提供載波用作信號調製。

RMT 設置和操作的步驟:
  • 配置驅動程序(Configure Driver)
  • 傳輸數據或接收數據(Transmit Data or Receive Data)
  • 更改操作參數(Change Operation Parameters)
  • 使用中斷(Use Interrupts)

RMT 有八個通道,編號從 0 到 7。 每個通道都能夠獨立傳輸或接收數據。 使用結構 rmt_channel_t 中定義的索引引用它們。

配置驅動程序(Configure Driver):
  • 通過設置 rmt_config_t 結構的特定成員和參數來配置。
  • 要配置的通道,從 rmt_channel_t 枚舉器中選擇一個。
  • RMT 操作模式 - 此通道是用於傳輸還是接收數據,通過將 rmt_mode 成員設置為 rmt_mode_t 中的一個值來選擇。
  • 通過設置 gpio_num 選擇的發送或接收 RMT 信號的引腳號是多少。
  • 通道將使用多少個內存塊,使用 mem_block_num 設置。
  • 時鐘分頻器,用於確定 RMT 發送器產生的脈衝長度範圍或接收器識別的脈衝長度範圍。 通過將 clk_div 設置為 [1 .. 255] 範圍內的值來選擇。 RMT 源時鐘通常為 APB CLK,默認為 80Mhz。

接收模式(Receive Mode):
  • 在接收模式下,設置 rx_config 和 rmt_rx_config_t 的以下成員。
  • 在 RMT 接收器的輸入上啟用過濾器 - filter_en 過濾器的閾值,以滴答數設置 - filter_ticks_thresh。 短於此設置的脈衝將被濾除。 注意,輸入的刻度值範圍是 [0..255]。
  • 一個脈衝長度閾值,它將使 RMT 接收器空閒,設置為滴答數 - idle_threshold。 接收器將忽略比此設置更長的脈衝。

接收數據(Receive Data):
在啟動接收器之前,我們需要有存儲接收資料位置, RMT 控制器有八個通道之間共享 512 x 32 位內部 RAM。 在典型的情況下,它不足以作為所有接收(和發出)項目的最終存儲。 因此,此 API 支持動態檢索傳入項目,以將其保存在用戶定義的大小的環形緩衝區中。 調用上面討論的 rmt_driver_install()時會提供大小。 要獲取此緩衝區的句柄,請調用rmt_get_ringbuf_handle()。

完成上述步驟後,我們可以通過調用 rmt_rx_start()啟動接收器,然後移動到檢查緩衝區內的內容。 為此,您可以使用與環形緩衝區交互的常見 FreeRTOS 函數。 請參閱示例如何在外圍設備中執行此操作。

接收模式參數(Receive Mode Parameters):
  • 過濾器設置 - rmt_set_rx_filter()
  • 接收器閾值設置 - rmt_set_rx_idle_thresh()
  • 無論發送器還是接收器都有權訪問RMT的內存 - rmt_set_memory_owner(),選擇來自rmt_mem_owner_t。

Header File: driver/include/driver/rmt.h

相關網址:
※ DIY - ESP32:ESP32 紅外線接收器發射器電路(三十三)
※ DIY - ESP32:ESP32 紅外線接收器發射器程式(三十四)
※ DIY - ESP32:ESP32 RMT API 函數(三十六)
※ DIY - ESP32:ESP32 RMT API 函數結構件及其它(三十七)

2018年 11月 22日 天氣報告
氣溫:21.3@ 19:40
相對濕度:百分之 56%
天氣:大致多雲

沒有留言:

張貼留言