Unverified Commit e1c96065 authored by Jan Procházka's avatar Jan Procházka Committed by GitHub

Changed type of LEDC frequency from double to uint32_t (#6570)

parent fb60efd5
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
uint8_t channels_resolution[LEDC_CHANNELS] = {0}; uint8_t channels_resolution[LEDC_CHANNELS] = {0};
double ledcSetup(uint8_t chan, double freq, uint8_t bit_num) uint32_t ledcSetup(uint8_t chan, uint32_t freq, uint8_t bit_num)
{ {
if(chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH){ if(chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH){
log_e("No more LEDC channels available! (maximum %u) or bit width too big (maximum %u)", LEDC_CHANNELS, LEDC_MAX_BIT_WIDTH); log_e("No more LEDC channels available! (maximum %u) or bit width too big (maximum %u)", LEDC_CHANNELS, LEDC_MAX_BIT_WIDTH);
...@@ -106,7 +106,7 @@ uint32_t ledcRead(uint8_t chan) ...@@ -106,7 +106,7 @@ uint32_t ledcRead(uint8_t chan)
return ledc_get_duty(group,channel); return ledc_get_duty(group,channel);
} }
double ledcReadFreq(uint8_t chan) uint32_t ledcReadFreq(uint8_t chan)
{ {
if(!ledcRead(chan)){ if(!ledcRead(chan)){
return 0; return 0;
...@@ -115,7 +115,7 @@ double ledcReadFreq(uint8_t chan) ...@@ -115,7 +115,7 @@ double ledcReadFreq(uint8_t chan)
return ledc_get_freq(group,timer); return ledc_get_freq(group,timer);
} }
double ledcWriteTone(uint8_t chan, double freq) uint32_t ledcWriteTone(uint8_t chan, uint32_t freq)
{ {
if(chan >= LEDC_CHANNELS){ if(chan >= LEDC_CHANNELS){
return 0; return 0;
...@@ -142,12 +142,12 @@ double ledcWriteTone(uint8_t chan, double freq) ...@@ -142,12 +142,12 @@ double ledcWriteTone(uint8_t chan, double freq)
} }
channels_resolution[chan] = 10; channels_resolution[chan] = 10;
double res_freq = ledc_get_freq(group,timer); uint32_t res_freq = ledc_get_freq(group,timer);
ledcWrite(chan, 0x1FF); ledcWrite(chan, 0x1FF);
return res_freq; return res_freq;
} }
double ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){ uint32_t ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){
const uint16_t noteFrequencyBase[12] = { const uint16_t noteFrequencyBase[12] = {
// C C# D Eb E F F# G G# A Bb B // C C# D Eb E F F# G G# A Bb B
4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902
...@@ -156,7 +156,7 @@ double ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){ ...@@ -156,7 +156,7 @@ double ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){
if(octave > 8 || note >= NOTE_MAX){ if(octave > 8 || note >= NOTE_MAX){
return 0; return 0;
} }
double noteFreq = (double)noteFrequencyBase[note] / (double)(1 << (8-octave)); uint32_t noteFreq = (uint32_t)noteFrequencyBase[note] / (uint32_t)(1 << (8-octave));
return ledcWriteTone(chan, noteFreq); return ledcWriteTone(chan, noteFreq);
} }
...@@ -184,7 +184,7 @@ void ledcDetachPin(uint8_t pin) ...@@ -184,7 +184,7 @@ void ledcDetachPin(uint8_t pin)
pinMatrixOutDetach(pin, false, false); pinMatrixOutDetach(pin, false, false);
} }
double ledcChangeFrequency(uint8_t chan, double freq, uint8_t bit_num) uint32_t ledcChangeFrequency(uint8_t chan, uint32_t freq, uint8_t bit_num)
{ {
if(chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH){ if(chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH){
log_e("LEDC channel not available! (maximum %u) or bit width too big (maximum %u)", LEDC_CHANNELS, LEDC_MAX_BIT_WIDTH); log_e("LEDC channel not available! (maximum %u) or bit width too big (maximum %u)", LEDC_CHANNELS, LEDC_MAX_BIT_WIDTH);
......
...@@ -27,15 +27,15 @@ typedef enum { ...@@ -27,15 +27,15 @@ typedef enum {
} note_t; } note_t;
//channel 0-15 resolution 1-16bits freq limits depend on resolution //channel 0-15 resolution 1-16bits freq limits depend on resolution
double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits); uint32_t ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits);
void ledcWrite(uint8_t channel, uint32_t duty); void ledcWrite(uint8_t channel, uint32_t duty);
double ledcWriteTone(uint8_t channel, double freq); uint32_t ledcWriteTone(uint8_t channel, uint32_t freq);
double ledcWriteNote(uint8_t channel, note_t note, uint8_t octave); uint32_t ledcWriteNote(uint8_t channel, note_t note, uint8_t octave);
uint32_t ledcRead(uint8_t channel); uint32_t ledcRead(uint8_t channel);
double ledcReadFreq(uint8_t channel); uint32_t ledcReadFreq(uint8_t channel);
void ledcAttachPin(uint8_t pin, uint8_t channel); void ledcAttachPin(uint8_t pin, uint8_t channel);
void ledcDetachPin(uint8_t pin); void ledcDetachPin(uint8_t pin);
double ledcChangeFrequency(uint8_t channel, double freq, uint8_t resolution_bits); uint32_t ledcChangeFrequency(uint8_t channel, uint32_t freq, uint8_t resolution_bits);
#ifdef __cplusplus #ifdef __cplusplus
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment