Page 1 of 1

ledc_timer_config_t problem

Posted: Tue Jan 05, 2021 1:42 pm
by gfia2000
Hi!

I have the next problem using Arduino core:
In file included from src\main.cpp:8:0:
lib/Salida/Salida.h:9:1: sorry, unimplemented: non-trivial designated initializers not supported
};
When I compile this:

Code: Select all

#include "driver/ledc.h"
#define PIN_S1 GPIO_NUM_4 

ledc_timer_config_t ledc_timer = {
    .speed_mode         = LEDC_HIGH_SPEED_MODE,
    .bit_num            = LEDC_TIMER_10_BIT,
    .timer_num          = LEDC_TIMER_0,
    .freq_hz            = 200
};
 
ledc_channel_config_t ledc_channel = {
    
    .gpio_num   = PIN_S1,
    .speed_mode = LEDC_HIGH_SPEED_MODE,
    .channel    = LEDC_CHANNEL_0,
    .intr_type  = LEDC_INTR_DISABLE,
    .timer_sel  = LEDC_TIMER_0,
    .duty       = 2,
    .hpoint     = 0  
};


S1()
{
    ledc_timer_config(&ledc_timer);
    ledc_channel_config(&ledc_channel);
}
I checked the channel_config_t order cause the code is in .h file...

The Arduino code is the next:

Code: Select all

#include <Salida.h>
void setup(){
S1();
}
void loop(){
}
Anyone can help me?

Thanks!

Re: ledc_timer_config_t problem

Posted: Tue Jan 05, 2021 3:41 pm
by gfia2000
After many hours, i can finally compile...

The problem is the union{}, but I solve this whit:

Code: Select all

    {.duty_resolution   = LEDC_TIMER_10_BIT}, //Implicit union statment
I hopeful help someone.

Good bye!

Re: ledc_timer_config_t problem

Posted: Wed Jan 06, 2021 3:56 pm
by ESP_Minatel
Hi,

Thank you by giving us your feedback!

Re: ledc_timer_config_t problem

Posted: Tue Jan 12, 2021 1:36 am
by abel-lisco
Hi,
I went thru the same issue...
If my memory does not fail, the problem is that the C compilers (the one used in Arduino and the one used in esp-idf) are not the same version, and you cannot initialize the members of the structure with the same syntax.
In Arduino, what worked to me, was to initialize each member separately:

ledc_timer.speed_mode = LEDC_HIGH_SPEED_MODE,
ledc_timer.bit_num = LEDC_TIMER_10_BIT,
ledc_timer.timer_num = LEDC_TIMER_0,
ledc_timer.freq_hz = 200

Also, just a couple of days ago I posted a repository at abellisco.github.io/liscolab
there is one folder named ledc-h, which contains an Arduino sketch to configure and prototype interactively using the ledc.h library
you can try configuring with the parameters you want (no coding is necessary), and see if it works. With the available commands you can replicate the example in the ledc_example.c example program (esp-idf example). There is one command available most of the ledc API functions.
Installation instructions are in the same folder, and you'll find the FreeRTOS+CLI library too in the liscolab repository (you need it to have the cli commands)
Also in this sketch you can see how the ledc_timer_config_t structure is initialized.

The sketch also provides you a command "getpulsein" that allows you measure the frequency, the period and the duty cycle of a signal at
the output PIN of the ledc channel (at low frequencies, so you do not need an oscilloscope during the tests).

Hope all of this helps you, we built it having in mind a "protoboard companion" :-), for configuring and testing without coding.