kopia lustrzana https://github.com/espressif/esp-idf
rodzic
7c0020bfd0
commit
d30f3e7aa8
|
@ -0,0 +1,115 @@
|
||||||
|
/*
|
||||||
|
Tests for the adc2 device driver
|
||||||
|
*/
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "driver/adc.h"
|
||||||
|
#include "driver/dac.h"
|
||||||
|
#include "unity.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_event_loop.h"
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
|
static const char* TAG = "test_adc2";
|
||||||
|
|
||||||
|
#define DEFAULT_SSID "TEST_SSID"
|
||||||
|
#define DEFAULT_PWD "TEST_PASS"
|
||||||
|
|
||||||
|
static esp_err_t event_handler(void *ctx, system_event_t *event)
|
||||||
|
{
|
||||||
|
printf("ev_handle_called.\n");
|
||||||
|
switch(event->event_id) {
|
||||||
|
case SYSTEM_EVENT_STA_START:
|
||||||
|
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START");
|
||||||
|
//do not actually connect in test case
|
||||||
|
//;
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_GOT_IP:
|
||||||
|
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP");
|
||||||
|
ESP_LOGI(TAG, "got ip:%s\n",
|
||||||
|
ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_DISCONNECTED:
|
||||||
|
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED");
|
||||||
|
TEST_ESP_OK(esp_wifi_connect());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("adc2 work with wifi","[adc]")
|
||||||
|
{
|
||||||
|
int read_raw;
|
||||||
|
int target_value;
|
||||||
|
|
||||||
|
//adc and dac init
|
||||||
|
TEST_ESP_OK( dac_output_enable( DAC_CHANNEL_1 ));
|
||||||
|
TEST_ESP_OK( dac_output_enable( DAC_CHANNEL_2 ));
|
||||||
|
TEST_ESP_OK( dac_output_voltage( DAC_CHANNEL_1, 30 ));
|
||||||
|
TEST_ESP_OK( dac_output_voltage( DAC_CHANNEL_2, 60 ));
|
||||||
|
TEST_ESP_OK( adc2_config_channel_atten( ADC2_CHANNEL_8, ADC_ATTEN_0db ));
|
||||||
|
TEST_ESP_OK( adc2_config_channel_atten( ADC2_CHANNEL_9, ADC_ATTEN_0db ));
|
||||||
|
|
||||||
|
//init wifi
|
||||||
|
printf("nvs init\n");
|
||||||
|
esp_err_t r = nvs_flash_init();
|
||||||
|
if (r == ESP_ERR_NVS_NO_FREE_PAGES) {
|
||||||
|
printf("no free pages, erase..\n");
|
||||||
|
TEST_ESP_OK(nvs_flash_erase());
|
||||||
|
r = nvs_flash_init();
|
||||||
|
}
|
||||||
|
TEST_ESP_OK( r);
|
||||||
|
tcpip_adapter_init();
|
||||||
|
TEST_ESP_OK(esp_event_loop_init(event_handler, NULL));
|
||||||
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
|
TEST_ESP_OK(esp_wifi_init(&cfg));
|
||||||
|
wifi_config_t wifi_config = {
|
||||||
|
.sta = {
|
||||||
|
.ssid = DEFAULT_SSID,
|
||||||
|
.password = DEFAULT_PWD
|
||||||
|
},
|
||||||
|
};
|
||||||
|
TEST_ESP_OK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||||
|
TEST_ESP_OK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
|
||||||
|
|
||||||
|
//test read value
|
||||||
|
TEST_ESP_OK( adc2_get_raw( ADC2_CHANNEL_8, ADC_WIDTH_12Bit, &read_raw ));
|
||||||
|
target_value = 30*4096*3/256; //3 = 3.3/1.1
|
||||||
|
printf("dac set: %d, adc read: %d (target_value: %d)\n", 30, read_raw, target_value );
|
||||||
|
TEST_ASSERT_INT_WITHIN( 600, target_value, read_raw );
|
||||||
|
TEST_ESP_OK( adc2_get_raw( ADC2_CHANNEL_9, ADC_WIDTH_12Bit, &read_raw ));
|
||||||
|
target_value = 60*4096*3/256;
|
||||||
|
printf("dac set: %d, adc read: %d (target_value: %d)\n", 60, read_raw, target_value );
|
||||||
|
TEST_ASSERT_INT_WITHIN( 600, target_value, read_raw );
|
||||||
|
|
||||||
|
//now start wifi
|
||||||
|
printf("wifi start...\n");
|
||||||
|
TEST_ESP_OK(esp_wifi_start());
|
||||||
|
|
||||||
|
//test reading during wifi on
|
||||||
|
TEST_ASSERT_EQUAL( adc2_get_raw( ADC2_CHANNEL_8, ADC_WIDTH_12Bit, &read_raw ), ESP_ERR_TIMEOUT );
|
||||||
|
TEST_ASSERT_EQUAL( adc2_get_raw( ADC2_CHANNEL_9, ADC_WIDTH_12Bit, &read_raw ), ESP_ERR_TIMEOUT );
|
||||||
|
|
||||||
|
//wifi stop again
|
||||||
|
printf("wifi stop...\n");
|
||||||
|
TEST_ESP_OK( esp_wifi_stop() );
|
||||||
|
TEST_ESP_OK(esp_wifi_deinit());
|
||||||
|
nvs_flash_deinit();
|
||||||
|
|
||||||
|
//test read value
|
||||||
|
TEST_ESP_OK( adc2_get_raw( ADC2_CHANNEL_8, ADC_WIDTH_12Bit, &read_raw ));
|
||||||
|
target_value = 30*4096*3/256; //3 = 3.3/1.1
|
||||||
|
printf("dac set: %d, adc read: %d (target_value: %d)\n", 30, read_raw, target_value );
|
||||||
|
TEST_ASSERT_INT_WITHIN( 600, target_value, read_raw );
|
||||||
|
TEST_ESP_OK( adc2_get_raw( ADC2_CHANNEL_9, ADC_WIDTH_12Bit, &read_raw ));
|
||||||
|
target_value = 60*4096*3/256;
|
||||||
|
printf("dac set: %d, adc read: %d (target_value: %d)\n", 60, read_raw, target_value );
|
||||||
|
TEST_ASSERT_INT_WITHIN( 600, target_value, read_raw );
|
||||||
|
|
||||||
|
printf("test passed...\n");
|
||||||
|
|
||||||
|
TEST_IGNORE_MESSAGE("this test case is ignored due to the critical memory leak of tcpip_adapter and event_loop.");
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := adc2
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Example: ADC2
|
||||||
|
|
||||||
|
This test code shows how to configure ADC2 and read the voltage connected to GPIO pin.
|
||||||
|
|
||||||
|
|
||||||
|
### ADC2 functions:
|
||||||
|
|
||||||
|
ADC1_CHANNEL_7: GPIO27, voltage range [0V..3.1V], the data range [0..4095],
|
||||||
|
saturates at about 1.1V.
|
||||||
|
|
||||||
|
DAC_CHANNEL_1: GPIO25, output range [0V..3.3V]
|
||||||
|
|
||||||
|
|
||||||
|
### Test:
|
||||||
|
|
||||||
|
Please choose the channel (GPIO) to output DAC signals and the channel to input
|
||||||
|
signals to ADC by menuconfig:
|
||||||
|
|
||||||
|
make menuconfig
|
||||||
|
|
||||||
|
Then connect two pins by a wire directly.
|
||||||
|
|
||||||
|
E.g. Choose GPIO27 for ADC and GPIO 25 for DAC in menuconfig (default option).
|
||||||
|
Then connect them up.
|
||||||
|
|
||||||
|
Connection of ADC and DAC to the same pin is also allowed. In this case, you don't
|
||||||
|
have to connect by a wire externally. E.g. choose GPIO 26 for both ADC and DAC in
|
||||||
|
menuconfig.
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
menu "Example Configuration"
|
||||||
|
|
||||||
|
choice ADC2_EXAMPLE_CHANNEL
|
||||||
|
bool "ADC2 Channel Num"
|
||||||
|
default ADC2_EXAMPLE_CHANNEL_7
|
||||||
|
help
|
||||||
|
The channel of ADC2 used in this example.
|
||||||
|
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_0
|
||||||
|
bool "ADC2 Channel 0 (GPIO 4)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_1
|
||||||
|
bool "ADC2 Channel 1 (GPIO 0)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_2
|
||||||
|
bool "ADC2 Channel 2 (GPIO 2)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_3
|
||||||
|
bool "ADC2 Channel 3 (GPIO 15)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_4
|
||||||
|
bool "ADC2 Channel 4 (GPIO 13)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_5
|
||||||
|
bool "ADC2 Channel 5 (GPIO 12)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_6
|
||||||
|
bool "ADC2 Channel 6 (GPIO 14)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_7
|
||||||
|
bool "ADC2 Channel 7 (GPIO 27)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_8
|
||||||
|
bool "ADC2 Channel 8 (GPIO 25)"
|
||||||
|
config ADC2_EXAMPLE_CHANNEL_9
|
||||||
|
bool "ADC2 Channel 9 (GPIO 26)"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config ADC2_EXAMPLE_CHANNEL
|
||||||
|
int
|
||||||
|
default 0 if ADC2_EXAMPLE_CHANNEL_0
|
||||||
|
default 1 if ADC2_EXAMPLE_CHANNEL_1
|
||||||
|
default 2 if ADC2_EXAMPLE_CHANNEL_2
|
||||||
|
default 3 if ADC2_EXAMPLE_CHANNEL_3
|
||||||
|
default 4 if ADC2_EXAMPLE_CHANNEL_4
|
||||||
|
default 5 if ADC2_EXAMPLE_CHANNEL_5
|
||||||
|
default 6 if ADC2_EXAMPLE_CHANNEL_6
|
||||||
|
default 7 if ADC2_EXAMPLE_CHANNEL_7
|
||||||
|
default 8 if ADC2_EXAMPLE_CHANNEL_8
|
||||||
|
default 9 if ADC2_EXAMPLE_CHANNEL_9
|
||||||
|
|
||||||
|
choice DAC_EXAMPLE_CHANNEL
|
||||||
|
bool "DAC Channel Num"
|
||||||
|
default DAC_EXAMPLE_CHANNEL_1
|
||||||
|
help
|
||||||
|
The channel of DAC used in this example.
|
||||||
|
|
||||||
|
config DAC_EXAMPLE_CHANNEL_1
|
||||||
|
bool "DAC Channel 1 (GPIO25)"
|
||||||
|
config DAC_EXAMPLE_CHANNEL_2
|
||||||
|
bool "DAC Channel 2 (GPIO26)"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config DAC_EXAMPLE_CHANNEL
|
||||||
|
int
|
||||||
|
default 1 if DAC_EXAMPLE_CHANNEL_1
|
||||||
|
default 2 if DAC_EXAMPLE_CHANNEL_2
|
||||||
|
|
||||||
|
endmenu
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* ADC2 Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/queue.h"
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
#include "driver/adc.h"
|
||||||
|
#include "driver/dac.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_adc_cal.h"
|
||||||
|
|
||||||
|
#define DAC_EXAMPLE_CHANNEL CONFIG_DAC_EXAMPLE_CHANNEL
|
||||||
|
#define ADC2_EXAMPLE_CHANNEL CONFIG_ADC2_EXAMPLE_CHANNEL
|
||||||
|
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
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 );
|
||||||
|
} 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 );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#
|
||||||
|
# Main Makefile. This is basically the same as a component makefile.
|
||||||
|
#
|
Ładowanie…
Reference in New Issue