Hey fellas, I have a MEMS PDM microphone correctly soldered on the right pins, but data always comes back as "0" when using the Adafruit PDM library with their example code. My board has a SAMD21E17 and I'm using Mattairtech's bootloader configured as so. The basic arduino functionality works fine - usb detection & programming, blinking led, fastled etc...
Judging by the multiplex info in the spec sheet, only a few pins are I2S/PDM compatible, but the pair I picked seems correct - 10 for clock and 7 for data, also used in this example. The difference I'm aware of, is that on Matt's board (unlike on a genuine Arduino Zero) the pins are numbered the same. 10 is actually 10, 7 is actually 7 etc... There's probably more to it though, I kinda don't fully understand SERCOMS and other such internals, so what's missing?
I printed the adafruit library pdm object internals and they are this but don't really help me...
This is still the prototype pcb, definitely found a few mistakes (as always lol) but I soldered around them and the arduino part works. I had to change the port mapping in FastLED library, figure this issue is related with the PDM library too, there's a lot of #if defined(ARDUINO_SAMD_ZERO) stuff in there...
It's an imgur album that has 3 pics, two of which are the schematic, not sure what your os is, all 3 show up in a vertical list in my windows chrome...
I am using chrome on linux and I see three vertically. The middle one has a ton of data on it like maybe part of the gerber or cad file. I have no clue as to how this is powered The third appears to be a connector. Your link shows both analog and digital outputs from the microphones. You need to narrow it down. It shows your mice is connected to the NMI.
Fixed, the problem was that the ZeroPDM library's configure() assumed certain MUXes from EPioType for certain pins based on a mapping from somewhere in the real SAMD Core, which didn't hold true for my variant's modified samd-core. So it picked MUX_PA10G_I2S_SCK0 -> 6 -> PIO_COM to pass into pinPeripheral() but 6 is actually PIO_ANALOG_DAC in Mattairtech's WVariant.h. I used PIO_COM(15) directly for both data and clock pins and voila.