From 0ad9cb174127df4348781bc4343e525a0195cdb0 Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Thu, 27 Jul 2023 10:32:20 +0100 Subject: [PATCH] just use tone()/noTone() to support PWM sound now (#17) --- hw/esp32/dac.h | 1 - hw/esp8266/pwm.h | 1 - hw/lilygo-vga32.h | 6 +--- sound_pwm.cpp | 74 +++-------------------------------------------- sound_pwm.h | 3 +- 5 files changed, 6 insertions(+), 79 deletions(-) diff --git a/hw/esp32/dac.h b/hw/esp32/dac.h index a7c3c8d..a980e52 100644 --- a/hw/esp32/dac.h +++ b/hw/esp32/dac.h @@ -1,4 +1,3 @@ // sound: dac and pwm #define DAC_SOUND 25 #define PWM_SOUND 25 -#define PWM_DUTY 20 // 20/1024 -> volume diff --git a/hw/esp8266/pwm.h b/hw/esp8266/pwm.h index 8e4413c..c29a942 100644 --- a/hw/esp8266/pwm.h +++ b/hw/esp8266/pwm.h @@ -1,4 +1,3 @@ // sound #define PWM_SOUND D2 -#define PWM_DUTY 20 // 20/1024 -> volume #define PWM_TOP 1024 diff --git a/hw/lilygo-vga32.h b/hw/lilygo-vga32.h index 44a9668..0c510d4 100644 --- a/hw/lilygo-vga32.h +++ b/hw/lilygo-vga32.h @@ -10,11 +10,7 @@ // sound: dac and pwm #define DAC_SOUND 25 - -// PWM doesn't work -// "assert failed: ledc_clk_cfg_to_global_clk ledc.c:443 (false)" -//#define PWM_SOUND 25 -//#define PWM_DUTY 20 // 20/1024 -> volume +#define PWM_SOUND 25 // "tape" storage... #undef USE_SD diff --git a/sound_pwm.cpp b/sound_pwm.cpp index f4d4972..de4c2f5 100644 --- a/sound_pwm.cpp +++ b/sound_pwm.cpp @@ -1,82 +1,16 @@ #include #include "sound_pwm.h" -#include "hardware.h" -#if defined(PWM_SOUND) && defined(ESP32) -#include - -#define CHANNEL LEDC_CHANNEL_0 -#define TIMER LEDC_TIMER_0 -#define SPEED_MODE LEDC_HIGH_SPEED_MODE - -void PWM::begin(unsigned gpio) { - ledc_timer_config_t timer_conf; - timer_conf.duty_resolution = LEDC_TIMER_10_BIT; - timer_conf.freq_hz = 440; - timer_conf.speed_mode = SPEED_MODE; - timer_conf.timer_num = TIMER; - ESP_ERROR_CHECK(::ledc_timer_config(&timer_conf)); - - ledc_channel_config_t ledc_conf; - ledc_conf.channel = CHANNEL; - ledc_conf.duty = 0; - ledc_conf.gpio_num = gpio; - ledc_conf.intr_type = LEDC_INTR_DISABLE; - ledc_conf.speed_mode = SPEED_MODE; - ledc_conf.timer_sel = TIMER; - ESP_ERROR_CHECK(::ledc_channel_config(&ledc_conf)); -} - -void PWM::set_duty(unsigned duty) { - ESP_ERROR_CHECK(::ledc_set_duty(SPEED_MODE, CHANNEL, duty)); - ESP_ERROR_CHECK(::ledc_update_duty(SPEED_MODE, CHANNEL)); -} - -void PWM::stop() { - set_duty(0); -} - -void PWM::set_freq(unsigned freq) { - ESP_ERROR_CHECK(::ledc_set_freq(SPEED_MODE, TIMER, freq)); -} - -#elif defined(PWM_SOUND) && defined(ESP8266) -#include - -static unsigned gpio, duty; -const unsigned period = 1024; +static unsigned gpio; void PWM::begin(unsigned gpio) { ::gpio = gpio; - pinMode(gpio, OUTPUT); -} - -void PWM::set_duty(unsigned duty) { - ::duty = duty; } void PWM::stop() { - stopWaveform(gpio); + noTone(gpio); } -void PWM::set_freq(unsigned freq) { - uint32_t t = 1000000 / freq; - uint32_t h = duty * t / period; - startWaveform(gpio, h, t-h, 0); +void PWM::start(unsigned freq) { + tone(gpio, freq); } - -#else -#pragma message "No PWM" - -void PWM::begin(unsigned gpio) { -} - -void PWM::set_duty(unsigned duty) { -} - -void PWM::stop() { -} - -void PWM::set_freq(unsigned freq) { -} -#endif diff --git a/sound_pwm.h b/sound_pwm.h index e4d87e4..89e5609 100644 --- a/sound_pwm.h +++ b/sound_pwm.h @@ -4,9 +4,8 @@ class PWM { public: void begin(unsigned gpio); - void set_duty(unsigned duty); void stop(); - void set_freq(unsigned freq); + void start(unsigned freq); }; #endif