16bit resolution PWM wave player with SD card, super lite version.
Dependencies: mbed DirectSPI FastPWM
Supported boards (confirmed):
Nucleo-F030R8
Nucleo-L152RE
Nucleo-F401RE
Nucleo-F411RE
Only compilation is OK (unchecked, but may work):
Nucleo-L073RZ
Nucleo-F334R8
Nucleo-F303RE
Nucleo-F429ZI
Nucleo-F446RE
Nucleo-F446ZE
Nucleo-L476RG
Supported SD card:
SDSC/SDHC card,
FAT16 and FAT32.
(1) At first, format SD card using SD Card Formatter
https://www.sdcard.org/downloads/formatter_4/index.html
(2) Copy PCM wav files to the SD card.
Supported file:
PCM wave file that have file extension ".wav" on root directory.
16bit/8bit, fs(sampling rate)=32kHz,44.1kHz,48kHz.
Stereo/Mono.
Hardware setting:
Refer to the file port_setting.txt
PWM output port:
Left upper(Hi) PWM 8bit out: PB_5 (TM3_CH2)
Right upper(Hi) PWM 8bit out: PB4 (TM3_CH1)
Left lower(Low) PWM 8bit out: PC_9 (TM3_CH4)
Right lower(Low) PWM 8bit out: PC_8 (TM3_CH3)
USER_BUTTON: PC_13(default button)
Next song: One click in Play mode.
Pause : Push long time .
Play : One click from Pause.
Diff: wave_player_main.cpp
- Revision:
- 19:54aed6200a35
- Parent:
- 18:082bce602af9
- Child:
- 20:c7066a530b1f
--- a/wave_player_main.cpp Sat Feb 23 21:12:14 2019 +0900 +++ b/wave_player_main.cpp Wed Sep 16 20:36:42 2020 +0900 @@ -29,7 +29,7 @@ word lwReadCount; byte lbSample_bits = 16; byte lbCh_mode = CH_STEREO; -byte bVolumeUpFactor; +byte bGainNormalizeFactor; bool fPlaying = false; DigitalIn btn_bit_now(USER_BUTTON,PullUp); @@ -72,11 +72,16 @@ } } #endif + //# Gain up + dword wL = (((word)bL_hi)<<8) + bL_low; + dword wR = (((word)bR_hi)<<8) + bR_low; + wL <<= bGainNormalizeFactor; + wR <<= bGainNormalizeFactor; //# change pwm duties - pwm_dutyL_hi( ((word)bL_hi) << bVolumeUpFactor ); - pwm_dutyL_low( ((word)bL_low) << bVolumeUpFactor ); - pwm_dutyR_hi( ((word)bR_hi) << bVolumeUpFactor ); - pwm_dutyR_low( ((word)bR_low) << bVolumeUpFactor ); + pwm_dutyL_hi( wL >> 8); + pwm_dutyL_low( wL & 0xff); + pwm_dutyR_hi( wR >> 8); + pwm_dutyR_low( wR & 0xff); #else // not PWM16BIT word wL =0,wR = 0; @@ -90,10 +95,10 @@ } #if DATA_8BIT_SUPPORT else { /* 8bit data */ - wL = wR = send_ff() << bVolumeUpFactor; + wL = wR = send_ff() << bGainNormalizeFactor; lwReadCount -= 1; if( lbCh_mode == CH_STEREO ) { /* for stereo */ - wR = send_ff() << bVolumeUpFactor; + wR = send_ff() << bGainNormalizeFactor; lwReadCount -= 1; } } @@ -127,7 +132,7 @@ wave_player_main *******************/ void wave_player_main(){ - bVolumeUpFactor = calcPcmValidBits() - 8; + bGainNormalizeFactor = calcPcmValidBits() - 8; word wBtnLowCount = 0; #if HAVE_LED_IND_BLINK byte bTimeout_led = 0;