From 938ba62f57ed2c002bae4aec236eeaeb200e4cba Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 4 Jan 2024 15:57:58 +1100 Subject: refactor handling of volume steps; improve controls --- src/drivers/i2s_dac.cpp | 4 ++-- src/drivers/include/wm8523.hpp | 2 ++ src/drivers/wm8523.cpp | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/i2s_dac.cpp b/src/drivers/i2s_dac.cpp index 0ef1005a..4d29f917 100644 --- a/src/drivers/i2s_dac.cpp +++ b/src/drivers/i2s_dac.cpp @@ -95,8 +95,8 @@ I2SDac::I2SDac(IGpios& gpio, i2s_chan_handle_t i2s_handle) vTaskDelay(pdMS_TO_TICKS(10)); wm8523::WriteRegister(wm8523::Register::kPsCtrl, 0b0); - // Ramp volume changes - wm8523::WriteRegister(wm8523::Register::kDacCtrl, 0b11); + // Use zero-cross detection for volume changes. + wm8523::WriteRegister(wm8523::Register::kDacCtrl, 0b10000); } I2SDac::~I2SDac() { diff --git a/src/drivers/include/wm8523.hpp b/src/drivers/include/wm8523.hpp index b13cf34b..a64f6bac 100644 --- a/src/drivers/include/wm8523.hpp +++ b/src/drivers/include/wm8523.hpp @@ -23,6 +23,8 @@ extern const uint16_t kLineLevelReferenceVolume; extern const uint16_t kDefaultVolume; extern const uint16_t kDefaultMaxVolume; +extern const uint16_t kZeroDbVolume; + constexpr auto VolumeToDb(uint16_t vol) -> int_fast8_t { return (vol - kLineLevelReferenceVolume) / 4; } diff --git a/src/drivers/wm8523.cpp b/src/drivers/wm8523.cpp index 5f6c8053..9fe3e001 100644 --- a/src/drivers/wm8523.cpp +++ b/src/drivers/wm8523.cpp @@ -32,6 +32,8 @@ const uint16_t kDefaultVolume = kLineLevelReferenceVolume - 96; // Default to +6dB == 2Vrms == 'CD Player' const uint16_t kDefaultMaxVolume = kLineLevelReferenceVolume + 12; +const uint16_t kZeroDbVolume = 0x190; + static const uint8_t kAddress = 0b0011010; auto ReadRegister(Register reg) -> std::optional { -- cgit v1.2.3