EXAMPLE Developing a custom pcb for Daisy Seed - Funbox

I keep getting the following error when trying to create the .bin file:

neptune.cpp: In function 'int main()':
neptune.cpp:903:8: error: 'class daisy::DaisyPetal' has no member named 'InitMidi'
903 | hw.InitMidi();
| ^~~~~~~~
neptune.cpp:904:8: error: 'class daisy::DaisyPetal' has no member named 'midi'
904 | hw.midi.StartReceive();
| ^~~~
neptune.cpp:910:12: error: 'class daisy::DaisyPetal' has no member named 'midi'
910 | hw.midi.Listen();
| ^~~~
neptune.cpp:912:18: error: 'class daisy::DaisyPetal' has no member named 'midi'
912 | while(hw.midi.HasEvents()) // MIDI is not working for some reason, TODO figure out why??
| ^~~~
neptune.cpp:914:34: error: 'class daisy::DaisyPetal' has no member named 'midi'
914 | HandleMidiMessage(hw.midi.PopEvent());


Did anyone face a similar issue, or have any idea how fix it?
 
I just ordered 5x PCBs also (JLCPCB Order Total: $5.85). I have been loving the BE-100 NAM profile and wanted to basically just make a dedicated pedal for it!
 
I finished my funbox build and unfortunately the noise level/high pitch sound I am hearing is a non-starter

When I find a few more minutes, I will swap the daisy with my other one from my kshep pedal and see if that changes anything

I wanted to comb over the schematic and any other potential culprits in the meantime (MCP6024 in funbox vs OPA1652 in kshep pedal for example)

Edit: I forgot to sand away some of the powder coat at the jacks, let me try that too
 
Last edited:
Fixed the input/output jacks to have the enclosure properly grounded (checked before and after with a multi-meter), no difference to the noise I am hearing

Tried a tl074 instead of the mcp6024, no real difference I could hear

The noise is pretty minimal when the effect is bypassed (I tried stripping the audio callback down to a bare minimum to try and reproduce the noise but it really only starts to really rear its head when a bit of gain is applied to the input signal), I also tried Earth and it sounded pretty good.

Interestingly when I load the kshep project onto it (with the same NAM model, etc), it seems to have less noise, if this is true, I am pretty baffled so far. I have been chasing down everything I can with no real luck yet. I will update if I find anything out...
 
@xconverge Sorry to hear you're getting alot of noise, it seems like some people get it and some don't. Part of it might be related to the effect you run on it, like you mentioned. If you're using a high gain NAM model it will probably get alot of noise, some post-effect gain reduction in your code might help. My design of the Funbox board isn't great for noise in the first place, if I do another revision it would be to address that. Better layout of the audio path, separation of analog/digital components to reduce crosstalk, better power filtering, and probably a 4 layer board with signal - gnd - gnd- signal, like the kshep pedal. Although limited space and thru hole components makes it challenging! I'd probably use kshep's first pedal, the 4 knob with smaller enclosure, with thru components, as a reference.
 
I swapped daisyseeds with no change. Again the bypass sounds PRETTY good and doesnt have the whine I was hearing.

(With the help of some LLMs) I got to a working solution for my needs though!

I captured the output from the pedal into my DAW to view the waterfall and was able basically fully remove the whine with 5 extremely narrow (q=24) notch filters at exactly 1khz, 2khz, 3khz, 4khz, and 5khz. This definitely wasn't great for the guitar tone though

But it did put me on a path of correlating block size (48) vs sample rate (48000) and understanding that this noise was perfectly related to the block size and it's harmonics. I also changed the block size to 96 and the tone changed, further confirming this

I implemented a block-synchronous coherent canceller that removes energy exactly at those frequencies before and after the NAM model

The canceller does not remove 1 khz in general (like a notch filter), it removes only components that are phase-coherent across blocks, meaning:
  • Same frequency
  • Same phase
  • Same alignment to the block boundary

The whine I was hearing satisfies all three, guitar notes do not.

Overall I am happy and can definitely make this work

reference: https://github.com/xconverge/FunBox/blob/tweaks/software/Mercury/mercury.cpp
 
Ok I am all set!


- I made it not a submodule so that it was easy for me to mess with
- I added my preferred BE100 high gain profile
- I added a crybaby wah pedal implementation for the expression pedal

I am now in full rage against the machine mode and it is great!
 
Until now, I've been playing with pre-made bin files downloaded from Releases. But I wanted to try Mercury, which isn't available as a bin file.
So...
I installed Git, downloaded everything I needed, and replaced the daisy_petal files. The first problem occurred with the next step - I ran Git cmd as administrator -> make -C libDaisy. Unfortunately, there's no such command as make. I did some Googling, installed make, added new system variables - still no make. Finally, I copied make to the git/cmd folder. And it seems to be making progress, but I get this error:
make: Entering directory 'C:/Windows/System32/FunBox'
make: *** libDaisy: No such file or directory. Stop.
make: Leaving directory 'C:/Windows/System32/FunBox'


But I see that the libDaisy folder is there. Any ideas what I might be doing wrong?
 
C:\Windows\System32 is a fishy place for your project to be located. This might be related to your comment about running commands as admin, which shouldn't be necessary. Try a fresh clone in your Documents folder.
 
@temol Here is what I just did for you on my mac (and I attached the .bin to this post for you, rename the .txt to .bin), building on windows is definitely going to be a bit more painful than macos or linux. If it were me I would toss these directions into an LLM and use WSL (basically gives you a linux terminal/environment that is usable in windows) to have a linux based shell/environment in windows to modify things/work with it

Code:
git clone [email protected]:GuitarML/FunBox.git
cd FunBox
git submodule update --init --recursive
cp mod/daisy_petal.* libDaisy/src/
cd libDaisy
make -j8
cd ../DaisySP
make -j8
cd ../software/Mercury/
make -j8
 

Attachments

Last edited:
C:\Windows\System32 is a fishy place for your project to be located.

I agree..
Now I have everything in my user directory. It's better, but still a bit of a struggle.
Code:
$ make -C libDaisy
make: Entering directory 'C:/Users/root/FunBox/libDaisy'
mkdir -p build/Drivers/Patched/STM32H7xx_HAL_Driver/Src
arm-none-eabi-gcc -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -mcpu=cortex-m7 -Isrc
-Isrc/sys -Isrc/usbd -Isrc/usbh -IDrivers/CMSIS_5/CMSIS/Core/Include -IDrivers/C
MSIS-Device/ST/STM32H7xx/Include -IDrivers/STM32H7xx_HAL_Driver/Inc -IDrivers/ST
M32H7xx_HAL_Driver/Inc/Legacy -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc
 -IMiddlewares/Patched/ST/STM32_USB_Device_Library/Class/CDC/Inc -IMiddlewares/S
T/STM32_USB_Host_Library/Core/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Class/
MSC/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Class/MIDI/Inc -IMiddlewares/Thi
rd_Party/FatFs/src -Isrc -I. -DCORE_CM7 -DSTM32H750xx -DSTM32H750IB -DARM_MATH_C
M7 -Dflash_layout -DHSE_VALUE=16000000 -DUSE_HAL_DRIVER -DUSE_FULL_LL_DRIVER -DD
ATA_IN_D2_SRAM -DNDEBUG=1 -DRELEASE=1 -ggdb -Wall -Wno-attributes -Wno-strict-al
iasing -Wno-maybe-uninitialized -Wno-missing-attributes -Wno-stringop-overflow
-O3 -fasm -fdata-sections -ffunction-sections -finline-functions -std=gnu11 -c D
rivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c -o build/Drivers/Pa
tched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.o -MD -MP -MF build/stm32h7xx_
ll_sdmmc.dep
process_begin: CreateProcess(NULL, arm-none-eabi-gcc -mthumb -mfloat-abi=hard -m
fpu=fpv5-d16 -mcpu=cortex-m7 -Isrc -Isrc/sys -Isrc/usbd -Isrc/usbh -IDrivers/CMS
IS_5/CMSIS/Core/Include -IDrivers/CMSIS-Device/ST/STM32H7xx/Include -IDrivers/ST
M32H7xx_HAL_Driver/Inc -IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy -IMiddlewares/S
T/STM32_USB_Device_Library/Core/Inc -IMiddlewares/Patched/ST/STM32_USB_Device_Li
brary/Class/CDC/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Core/Inc -IMiddlewar
es/ST/STM32_USB_Host_Library/Class/MSC/Inc -IMiddlewares/ST/STM32_USB_Host_Libra
ry/Class/MIDI/Inc -IMiddlewares/Third_Party/FatFs/src -Isrc -I. -DCORE_CM7 -DSTM
32H750xx -DSTM32H750IB -DARM_MATH_CM7 -Dflash_layout -DHSE_VALUE=16000000 -DUSE_
HAL_DRIVER -DUSE_FULL_LL_DRIVER -DDATA_IN_D2_SRAM -DNDEBUG=1 -DRELEASE=1 -ggdb -
Wall -Wno-attributes -Wno-strict-aliasing -Wno-maybe-uninitialized -Wno-missing-
attributes -Wno-stringop-overflow -O3 -fasm -fdata-sections -ffunction-sections
-finline-functions -std=gnu11 -c Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h
7xx_ll_sdmmc.c -o build/Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sd
mmc.o -MD -MP -MF build/stm32h7xx_ll_sdmmc.dep, ...) failed.
make (e=2): Nie mo┐na odnalečŠ okreťlonego pliku.
make: *** [Makefile:370: build/Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7x
x_ll_sdmmc.o] Error 2
make: Leaving directory 'C:/Users/root/FunBox/libDaisy'

This - "make (e=2): Nie mo┐na odnalečŠ okreťlonego pliku." - means: The specified file could not be found.


@temol Here is what I just did for you on my mac (and I attached the .bin to this post for you, rename the .txt to .bin), building on windows is definitely going to be a bit more painful than macos or linux. If it were me I would toss these directions into an LLM and use WSL (basically gives you a linux terminal/environment that is usable in windows) to have a linux based shell/environment in windows to modify things/work with it

You're probably right. Unfortunately, I rarely use the terminal and sometimes have to learn a lot about it. Thank you very much for the bin, I'll try it out soon.
 
I agree..
Now I have everything in my user directory. It's better, but still a bit of a struggle.
Code:
$ make -C libDaisy
make: Entering directory 'C:/Users/root/FunBox/libDaisy'
mkdir -p build/Drivers/Patched/STM32H7xx_HAL_Driver/Src
arm-none-eabi-gcc -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -mcpu=cortex-m7 -Isrc
-Isrc/sys -Isrc/usbd -Isrc/usbh -IDrivers/CMSIS_5/CMSIS/Core/Include -IDrivers/C
MSIS-Device/ST/STM32H7xx/Include -IDrivers/STM32H7xx_HAL_Driver/Inc -IDrivers/ST
M32H7xx_HAL_Driver/Inc/Legacy -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc
 -IMiddlewares/Patched/ST/STM32_USB_Device_Library/Class/CDC/Inc -IMiddlewares/S
T/STM32_USB_Host_Library/Core/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Class/
MSC/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Class/MIDI/Inc -IMiddlewares/Thi
rd_Party/FatFs/src -Isrc -I. -DCORE_CM7 -DSTM32H750xx -DSTM32H750IB -DARM_MATH_C
M7 -Dflash_layout -DHSE_VALUE=16000000 -DUSE_HAL_DRIVER -DUSE_FULL_LL_DRIVER -DD
ATA_IN_D2_SRAM -DNDEBUG=1 -DRELEASE=1 -ggdb -Wall -Wno-attributes -Wno-strict-al
iasing -Wno-maybe-uninitialized -Wno-missing-attributes -Wno-stringop-overflow
-O3 -fasm -fdata-sections -ffunction-sections -finline-functions -std=gnu11 -c D
rivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.c -o build/Drivers/Pa
tched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sdmmc.o -MD -MP -MF build/stm32h7xx_
ll_sdmmc.dep
process_begin: CreateProcess(NULL, arm-none-eabi-gcc -mthumb -mfloat-abi=hard -m
fpu=fpv5-d16 -mcpu=cortex-m7 -Isrc -Isrc/sys -Isrc/usbd -Isrc/usbh -IDrivers/CMS
IS_5/CMSIS/Core/Include -IDrivers/CMSIS-Device/ST/STM32H7xx/Include -IDrivers/ST
M32H7xx_HAL_Driver/Inc -IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy -IMiddlewares/S
T/STM32_USB_Device_Library/Core/Inc -IMiddlewares/Patched/ST/STM32_USB_Device_Li
brary/Class/CDC/Inc -IMiddlewares/ST/STM32_USB_Host_Library/Core/Inc -IMiddlewar
es/ST/STM32_USB_Host_Library/Class/MSC/Inc -IMiddlewares/ST/STM32_USB_Host_Libra
ry/Class/MIDI/Inc -IMiddlewares/Third_Party/FatFs/src -Isrc -I. -DCORE_CM7 -DSTM
32H750xx -DSTM32H750IB -DARM_MATH_CM7 -Dflash_layout -DHSE_VALUE=16000000 -DUSE_
HAL_DRIVER -DUSE_FULL_LL_DRIVER -DDATA_IN_D2_SRAM -DNDEBUG=1 -DRELEASE=1 -ggdb -
Wall -Wno-attributes -Wno-strict-aliasing -Wno-maybe-uninitialized -Wno-missing-
attributes -Wno-stringop-overflow -O3 -fasm -fdata-sections -ffunction-sections
-finline-functions -std=gnu11 -c Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h
7xx_ll_sdmmc.c -o build/Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_sd
mmc.o -MD -MP -MF build/stm32h7xx_ll_sdmmc.dep, ...) failed.
make (e=2): Nie mo┐na odnalečŠ okreťlonego pliku.
make: *** [Makefile:370: build/Drivers/Patched/STM32H7xx_HAL_Driver/Src/stm32h7x
x_ll_sdmmc.o] Error 2
make: Leaving directory 'C:/Users/root/FunBox/libDaisy'

This - "make (e=2): Nie mo┐na odnalečŠ okreťlonego pliku." - means: The specified file could not be found.




You're probably right. Unfortunately, I rarely use the terminal and sometimes have to learn a lot about it. Thank you very much for the bin, I'll try it out soon.
You installed this, right? and then added it to your PATH


does this work:

Code:
where arm-none-eabi-gcc
arm-none-eabi-gcc --version
 
You installed this, right? and then added it to your PATH

Now I have it installed.
make -C libDaisy worked without errors, same with make -C DaisySP.
Now I get errors when trying to compile to bin files.
Code:
pluto.cpp: In function 'int main()':
pluto.cpp:926:8: error: 'class daisy::DaisyPetal' has no member named 'InitMidi'
  926 |     hw.InitMidi();
      |        ^~~~~~~~
pluto.cpp:927:8: error: 'class daisy::DaisyPetal' has no member named 'midi'
  927 |     hw.midi.StartReceive();
      |        ^~~~
pluto.cpp:933:12: error: 'class daisy::DaisyPetal' has no member named 'midi'
  933 |         hw.midi.Listen();
      |            ^~~~
pluto.cpp:935:18: error: 'class daisy::DaisyPetal' has no member named 'midi'
  935 |         while(hw.midi.HasEvents())
      |                  ^~~~
pluto.cpp:937:34: error: 'class daisy::DaisyPetal' has no member named 'midi'
  937 |             HandleMidiMessage(hw.midi.PopEvent());
      |                                  ^~~~
make: *** [../../libDaisy/core/Makefile:286: build/pluto.o] Error 1


does this work:

Code:
where arm-none-eabi-gcc
arm-none-eabi-gcc --version

Code:
$ where arm-none-eabi-gcc
C:\Program Files\DaisyToolchain\bin\arm-none-eabi-gcc.exe


$ arm-none-eabi-gcc --version
arm-none-eabi-gcc.exe (GNU Arm Embedded Toolchain 10-2020-q4-major) 10.2.1 20201
103 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


I'm also having trouble loading Mercury into Daisy Seed. I'm using the web programmer (Bootloader option). After loading the file, the boot LED doesn't go out; it just blinks happily. I've tried different versions of the bootloader from the website menu, and only the amount of data sent changes, but each time it ends with the LED blinking. I think I had the same problem with Neptune.
 
Now I have it installed.
make -C libDaisy worked without errors, same with make -C DaisySP.
Now I get errors when trying to compile to bin files.
Code:
pluto.cpp: In function 'int main()':
pluto.cpp:926:8: error: 'class daisy::DaisyPetal' has no member named 'InitMidi'
  926 |     hw.InitMidi();
      |        ^~~~~~~~
pluto.cpp:927:8: error: 'class daisy::DaisyPetal' has no member named 'midi'
  927 |     hw.midi.StartReceive();
      |        ^~~~
pluto.cpp:933:12: error: 'class daisy::DaisyPetal' has no member named 'midi'
  933 |         hw.midi.Listen();
      |            ^~~~
pluto.cpp:935:18: error: 'class daisy::DaisyPetal' has no member named 'midi'
  935 |         while(hw.midi.HasEvents())
      |                  ^~~~
pluto.cpp:937:34: error: 'class daisy::DaisyPetal' has no member named 'midi'
  937 |             HandleMidiMessage(hw.midi.PopEvent());
      |                                  ^~~~
make: *** [../../libDaisy/core/Makefile:286: build/pluto.o] Error 1




Code:
$ where arm-none-eabi-gcc
C:\Program Files\DaisyToolchain\bin\arm-none-eabi-gcc.exe


$ arm-none-eabi-gcc --version
arm-none-eabi-gcc.exe (GNU Arm Embedded Toolchain 10-2020-q4-major) 10.2.1 20201
103 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


I'm also having trouble loading Mercury into Daisy Seed. I'm using the web programmer (Bootloader option). After loading the file, the boot LED doesn't go out; it just blinks happily. I've tried different versions of the bootloader from the website menu, and only the amount of data sent changes, but each time it ends with the LED blinking. I think I had the same problem with Neptune.
Did you do

cp mod/daisy_petal.* libDaisy/src/

Before building libDaisy?
 
Also, pluto looks to not use the bootloader, but mercury does, this means different checkboxes on the web flasher or different (an additional) command with the CLI.

Let's just stick with trying to get mercury built and onto the daisy first, even though it is the minorly more invovled one due to the bootloader

you can do this by putting the daisy in DFU mode (some combination of pressing both buttons), and then using the web flasher tool to use the bootloader tab to flash the bootloader.

For my use, just using mercury for example, I only flash the bootloader once with "make program-boot"

then any subsequent code changes I am using "make program-dfu" (within a few seconds of pressing the reset button, you can freeze it in this ready-to-flash state by pressing reset and then shortly after pressing boot I think) to update the mercury .bin on the device
 
Oooo. I have some Synthux kits on the way that are Daisy Seed Based, but maybe it's time to try a Funbox too?
 
Back
Top