Drumgizmo in a box

  • CD4517 - 64bit shift register

Run Pi in SPI slave mode and supply external SPI clock source which will also be used as audio clock rate. It will still act as it's own SPI master but with the external clock.

USE DAC in TDM mode with 8 channels on one I2S pin

  • pcm3168: Thermal pad … should this be grounded? What about effect (heat)?
  • Try to find a “platform” to where it can be soldered with breakout of pins to larger scale

Demultiplexing SPI

multiplexer 16bit pr. channel to 2 bit per channel (ie. 2 channels per 32 bit sample) and write 20 channels in total this way where the 16 is the actual output and the last 4 are unused (but can be used for sync)


Midi Input: http://www.samplerbox.org/article/midiinwithrpi


  • Create af slagplan
  • HW: Figure out how to exactly use the TI chip
    • Thermal pad is soldered using soldering paste and the pad itself is connected to the back of the board through plaided holes to another pad for heat disposal.
  • HW: Schematic + description
  • SW: Yocto recipe/layer: Add static ip config, add spidev_test recipe
  • SW: Rewrite spidev_test to support contiously loop and input check
  • SW: Run spidev_test loop and test cpu usage - is it using DMA?

Bring logic analyzer and rpi3 and probes

Synchronisation between SPI/ALSA and FPGA

Each sample uses 1 bit as sync bit. Channel 0 has the bit set to 1, the rest has it set to 0. If the FPGA detects a drift, (pattern doesn't match) it can shift the input one bit and test again - repeating until the pattern matches again. While seeking for a new lock pattern, the output should be muted. When the lock pattern has been found again a number of samples should be processed before the output is unmuted again in order to make sure that we didn't simply find an audio pattern that matched the lock pattern (highly unlikely!)

CS on the SPI can be used as a reset mechanism, ie. CS high will reset the FPGA channel counter. CS could be set high for each 1024 samples or similar, key-frame style.

Future ideas

  • Use the 12 ADCs with a lower resolution for analogue input for triggering of drums.
root@raspberrypi3:/var/volatile/tmp# spidev_test -D /dev/spidev0.0 -i /tmp/stuff -s 64000000
spi mode: 0x0
bits per word: 8
max speed: 64000000 Hz (64000 KHz)

Mem: 164996K used, 782672K free, 131260K shrd, 2752K buff, 138176K cached
CPU:   0% usr  30% sys   0% nic  68% idle   0% io   0% irq   0% sirq
Load average: 0.88 0.72 0.36 4/97 437
  437   327 root     R     257m  28%  23% spidev_test -D /dev/spidev0.0 -i /tmp/
  153     2 root     RW       0   0%   8% [spi0]
  422   307 root     R     2980   0%   0% top -d1

Serie modstand på transfer lines på ~100ohm for at undgå relfektions effekter.


Set static ip address in /etc/networking/interfaces.


  • DG (+ dependencies) Yocto recipe
  • Design print
    • Add PCM3168A as kicad component
  • ALSA SPI driver
    • Codec configuration (Read datasheet)
    • Data transfer
  • FPGA / Shift array (SPI to I2S)
dev/drumgizmo_in_a_box.txt · Last modified: 2017/10/03 21:34 by deva
Trace: drumgizmo_in_a_box
GNU Free Documentation License 1.3
Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0