ADC+I2S(DMA) conficts with "dac_output_enable": ADC reads 0x00 Values

ESPI_1
Posts: 10
Joined: Thu Feb 27, 2020 7:08 am

ADC+I2S(DMA) conficts with "dac_output_enable": ADC reads 0x00 Values

Postby ESPI_1 » Fri Mar 13, 2020 8:19 am

Using ADC+I2S alone works:
- Test: Simply Connect the ADC-Input to 3V3, and we got 0X0FFF in the Buffer as expected --> OK

BUG:
Simply adding the Line
"dac_output_enable(DAC_CHANNEL_1)"
somewere! in the Project - even after the test1,
then the test reads only 0X0000 from the ADC-via spi

seems to be a conflict in the Startup of the library
or some missing initialisation?

Code: Untitled.c Select all



#include <stdint.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

// DAC-Cosinus
#include "soc/rtc_io_reg.h" //Used by DAC-Sin
#include "soc/rtc_cntl_reg.h"
#include "soc/rtc.h"

#include "driver/i2s.h"
#include "driver/adc.h"
#include "driver/dac.h"
#include "esp_adc_cal.h"
#include <soc/syscon_reg.h>

#define TAG "MyTag"
#define EXAMPLE_I2S_ADC_CHANNEL ADC1_CHANNEL_0 /*!< ADC1 channel 0 is GPIO36 (ESP32), GPIO1 (ESP32-S2) */
//Externaly Connect GPIO36 to 3v3

void MyTask(void* arg)
{
i2s_config_t i2s_config = {
// .mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN | I2S_MODE_ADC_BUILT_IN,
.mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN,
.sample_rate = 16000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.communication_format = I2S_COMM_FORMAT_I2S,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.intr_alloc_flags = 1,
.dma_buf_count = 2,
.dma_buf_len = 1024,
.use_apll = 0,
};
adc1_config_channel_atten(EXAMPLE_I2S_ADC_CHANNEL, ADC_ATTEN_11db);
adc1_config_width(ADC_WIDTH_BIT_12);
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_set_adc_mode(ADC_UNIT_1, EXAMPLE_I2S_ADC_CHANNEL);
i2s_adc_enable(I2S_NUM_0);

const static size_t i2s_read_len = 1024;
size_t bytes_read;
char* i2s_read_buff = (char*) calloc(i2s_read_len, sizeof(char));

ESP_LOGI(TAG, "Test1: expect dump of 0X0FFF");
i2s_read(EXAMPLE_I2S_NUM, (void*) i2s_read_buff, i2s_read_len, &bytes_read, portMAX_DELAY);
if(bytes_read>0){
ESP_LOG_BUFFER_HEXDUMP(TAG, i2s_read_buff, bytes_read, ESP_LOG_INFO );
}
vTaskDelay(2/portTICK_PERIOD_MS);


dac_cosine_enable(DAC_CHANNEL_1);
//********************* BUG BUG BUG BUG BUG ******************************************
// Simply enabeling "dac_output_enable" in Project --> BOTH!!! Test1 and Test2 will Fail( read only 0X0000)
#if 1
ESP_LOGI(TAG, "dac_output_enable");
dac_output_enable(DAC_CHANNEL_1);// GPIO25
#endif


ESP_LOGI(TAG, "\nTest2:");
i2s_read(EXAMPLE_I2S_NUM, (void*) i2s_read_buff, i2s_read_len, &bytes_read, portMAX_DELAY);
if(bytes_read>0){
ESP_LOG_BUFFER_HEXDUMP(TAG, i2s_read_buff, bytes_read, ESP_LOG_INFO );
}

while(1){
vTaskDelay(2000/portTICK_PERIOD_MS);
}//while
}


void ADC_SPI_DAC_Init(){
xTaskCreate(MyTask, "MyTask", 1024*3, NULL, 10, NULL);
}

Who is online

Users browsing this forum: No registered users and 2 guests