I am trying to interface this microphone https://store.invensense.com/datasheets/invensense/INMP621.pdf
with Arduino, what is attractive about this mic to me is that it can be connected directly to the pin without any preamps, etc. I am however having trouble planning how exactly can I be able to extract audio signal from it. As far as I understand if this is a PDM output, and according to specsheet the clock speed is 1 - 3Mhz, then arduino need to send 1 to 3Mhz clock pulses into microphone and in return it will receive a pulses back, with the same frequency. And width (duty cycle) of those pulses will tell me dB level that microphone hears. Did I get that right?
Then there is another question: what is the best way to code this in arduino, i.e. what's the best way to send out 1Mhz pulse and receive a pulse back at the same rate?
For PDM data, the density of the pulses indicates the signal amplitude. A high density of high pulses indicates a signal near positive
full scale, and a high density of low pulses indicates a signal near negative full scale. A perfect zero (DC) audio signal shows an
alternating pattern of high and low pulses.
And minimum speed is 1mhz... that is nasty, imo... I don't think an AVR-based Arduino is going to be fast enough - certainly, you couldn't do anything other than listening to the mic at any given time.
Msybe one of the faster ARM-based micros would do the trick.
From the description I think there is only one possibility with AVR: generate the 1MHz signal via PWM and low pass the microphone output and read via ADC.
I re-read the description there. IMO the right way to do this is with an external PDM decoder ic- TLV320DAC3203 is an example, but there are a great many others, and I put no effort intonpicking which one was best