@@ -56,10 +56,11 @@ uint8_t channels_resolution[LEDC_CHANNELS] = {0};
5656
5757double ledcSetup (uint8_t chan , double freq , uint8_t bit_num )
5858{
59- if (chan >= LEDC_CHANNELS ){
60- log_e ("No more LEDC channels available! You can have maximum %u" , LEDC_CHANNELS );
59+ if (chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH ){
60+ log_e ("No more LEDC channels available! (maximum %u) or bit width too big ( maximum %u) " , LEDC_CHANNELS , LEDC_MAX_BIT_WIDTH );
6161 return 0 ;
6262 }
63+
6364 uint8_t group = (chan /8 ), timer = ((chan /2 )%4 );
6465
6566 ledc_timer_config_t ledc_timer = {
@@ -69,9 +70,12 @@ double ledcSetup(uint8_t chan, double freq, uint8_t bit_num)
6970 .freq_hz = freq ,
7071 .clk_cfg = LEDC_DEFAULT_CLK
7172 };
72- ledc_timer_config (& ledc_timer );
73+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
74+ {
75+ log_e ("ledc setup failed!" );
76+ return 0 ;
77+ }
7378 channels_resolution [chan ] = bit_num ;
74-
7579 return ledc_get_freq (group ,timer );
7680}
7781
@@ -95,7 +99,7 @@ void ledcWrite(uint8_t chan, uint32_t duty)
9599
96100uint32_t ledcRead (uint8_t chan )
97101{
98- if (chan >= LEDC_CHANNELS ){
102+ if (chan >= LEDC_CHANNELS ){
99103 return 0 ;
100104 }
101105 uint8_t group = (chan /8 ), channel = (chan %8 );
@@ -130,7 +134,12 @@ double ledcWriteTone(uint8_t chan, double freq)
130134 .freq_hz = freq ,
131135 .clk_cfg = LEDC_DEFAULT_CLK
132136 };
133- ledc_timer_config (& ledc_timer );
137+
138+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
139+ {
140+ log_e ("ledcSetup failed!" );
141+ return 0 ;
142+ }
134143 channels_resolution [chan ] = 10 ;
135144
136145 double res_freq = ledc_get_freq (group ,timer );
@@ -153,7 +162,7 @@ double ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){
153162
154163void ledcAttachPin (uint8_t pin , uint8_t chan )
155164{
156- if (chan >= LEDC_CHANNELS ){
165+ if (chan >= LEDC_CHANNELS ){
157166 return ;
158167 }
159168 uint8_t group = (chan /8 ), channel = (chan %8 ), timer = ((chan /2 )%4 );
@@ -177,7 +186,8 @@ void ledcDetachPin(uint8_t pin)
177186
178187double ledcChangeFrequency (uint8_t chan , double freq , uint8_t bit_num )
179188{
180- if (chan >= LEDC_CHANNELS ){
189+ if (chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH ){
190+ log_e ("LEDC channel not available! (maximum %u) or bit width too big (maximum %u)" , LEDC_CHANNELS , LEDC_MAX_BIT_WIDTH );
181191 return 0 ;
182192 }
183193 uint8_t group = (chan /8 ), timer = ((chan /2 )%4 );
@@ -189,9 +199,13 @@ double ledcChangeFrequency(uint8_t chan, double freq, uint8_t bit_num)
189199 .freq_hz = freq ,
190200 .clk_cfg = LEDC_DEFAULT_CLK
191201 };
192- ledc_timer_config (& ledc_timer );
193- channels_resolution [chan ] = bit_num ;
194202
203+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
204+ {
205+ log_e ("ledcChangeFrequency failed!" );
206+ return 0 ;
207+ }
208+ channels_resolution [chan ] = bit_num ;
195209 return ledc_get_freq (group ,timer );
196210}
197211
0 commit comments