2018年12月5日 星期三

DIY - ESP32:ESP32 ADC / DAC 模擬數碼轉換器程式 (四十五)

DIY - ESP32:ESP32 ADC / DAC 模擬數碼轉換器程式 (四十五):

ESP32 在 IDF 內已經有 ADC(模擬數碼轉換器 / Analog to Digital Converter) / DAC(數碼模擬轉換器 / Digital to Analog Converter) API 函數模塊和範例程式,可以直接編譯使用,首先是設置 ADC 和 DAC 的輸入和輸出引腳,由於選擇 GPIO26 的輸入和輸出引腳是一個,ESP32 內部會直接連接,程序會輸出 DAC 電壓,然後 ADC 會接收,並通過 SAR 計算出資料,然後顯示。

ESP32 ADC / DAC 模擬數碼轉換器製作
測試範例:
編譯並加載示例。
打開串口監視器以查看屏幕上打印的消息。
 
ESP32 ADC / DAC 模擬數碼轉換器程式 IO 設定:
#define DAC_EXAMPLE_CHANNEL       2   // DAC Channel 2 (GPIO26)
#define ADC2_EXAMPLE_CHANNEL     9   // ADC2 Channel 9 (GPIO 26)

ESP32 ADC / DAC 模擬數碼轉換器程式:
void app_main()
{
    uint8_t output_data=0;
    int     read_raw;
    esp_err_t r;

    gpio_num_t adc_gpio_num, dac_gpio_num;

    assert( adc2_pad_get_io_num( ADC2_EXAMPLE_CHANNEL, &adc_gpio_num ) == ESP_OK );
    assert( dac_pad_get_io_num( DAC_EXAMPLE_CHANNEL, &dac_gpio_num ) == ESP_OK );

    printf("ADC channel %d @ GPIO %d, DAC channel %d @ GPIO %d.\n",  ADC2_EXAMPLE_CHANNEL, adc_gpio_num,
                DAC_EXAMPLE_CHANNEL, dac_gpio_num );

    dac_output_enable( DAC_EXAMPLE_CHANNEL );

    //be sure to do the init before using adc2.
    printf("adc2_init...\n");
    adc2_config_channel_atten( ADC2_EXAMPLE_CHANNEL, ADC_ATTEN_0db );

    vTaskDelay(2 * portTICK_PERIOD_MS);

    printf("start conversion.\n");
   
    while(1) {
        dac_output_voltage( DAC_EXAMPLE_CHANNEL, output_data++ );
        r = adc2_get_raw( ADC2_EXAMPLE_CHANNEL, ADC_WIDTH_12Bit, &read_raw);
        if ( r == ESP_OK ) {
            printf("%d: %d\n", output_data, read_raw );
           
            sprintf(dsp_buffer,"%d=%d    ", output_data, read_raw );
            oled_Print(0, 3, dsp_buffer, 1);
           
        } else if ( r == ESP_ERR_INVALID_STATE ) {
            printf("ADC2 not initialized yet.\n");
        } else if ( r == ESP_ERR_TIMEOUT ) {
            //This can not happen in this example. But if WiFi is in use, such error code could be returned.
            printf("ADC2 is in use by Wi-Fi.\n");
        }
            vTaskDelay( 2 * portTICK_PERIOD_MS );
    }
}

操作系統:Windows 7 64-bit 版本
開發環境:AiThinker05 版本
原程碼: ESP32 ESP-IDF V3.0rc1
程式: DIY-ESP32-011-ADC_01_IDF-20181124

ESP32 ADC / DAC 模擬數碼轉換器程式運行中
ESP32 ADC / DAC 模擬數碼轉換器程式電路製作顯示
ESP32 ADC / DAC 模擬數碼轉換器程式串行監視器上的示例輸出
相關網址:
※ DIY - ESP32:ESP32 ADC 模擬數碼轉換器介紹 (四十三)
※ DIY - ESP32:ESP32 ADC / DAC 模擬數碼轉換器電路 (四十四)
※ DIY - ESP32:ESP32 ADC 模擬數碼轉換器 API 函數(四十六)
※ DIY - ESP32:ESP32 ADC 模擬數碼轉換器 API 函數巨集及其它(四十七)
※ DIY - ESP32:ESP32 DAC 數位類比轉換器 API 函數(四十八)
※ DIY - ESP32:ESP32 DAC 數位類比轉換器 API 函數巨集及其它(四十九)
※ DIY - ESP32:ESP32 ADC 類比數位轉換器測試(五十)
※ DIY - ESP32:ESP32 ADC DVM 數字電壓錶電路(五十一)
※ DIY - ESP32:ESP32 ADC DVM 數字電壓錶程式 (五十二)

2018年 12月 5日 天氣報告
氣溫:23.1@ 21:00
相對濕度:百分之 74%
天氣:大致多雲

沒有留言:

張貼留言