|
|
|
|
|
|
|
|
{"type":"AudioInputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"adc","inputs":0,"outputs":1,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"adc","inputs":0,"outputs":1,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputAnalogStereo","data":{"defaults":{"name":{"value":"new"}},"shortName":"adcs","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputAnalogStereo","data":{"defaults":{"name":{"value":"new"}},"shortName":"adcs","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sslave","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sslave","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
|
|
|
{"type":"AudioInputPDM","data":{"defaults":{"name":{"value":"new"}},"shortName":"pdm","inputs":0,"outputs":1,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputTDM","data":{"defaults":{"name":{"value":"new"}},"shortName":"tdm","inputs":0,"outputs":16,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputTDM","data":{"defaults":{"name":{"value":"new"}},"shortName":"tdm","inputs":0,"outputs":16,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usb","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioInputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usb","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioOutputI2S","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
{"type":"AudioOutputI2S","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<script type="text/x-red" data-help-name="AudioInputPDM"> |
|
|
|
|
|
<h3>Summary</h3> |
|
|
|
|
|
<div class=tooltipinfo> |
|
|
|
|
|
<p>Receive (and filter) a Pulse Density Modulated bitstream. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p align=center><img src="img/pdmmic.jpg"><br><small>PDM MEMS Mic</small></p> |
|
|
|
|
|
</div> |
|
|
|
|
|
<h3>Audio Connections</h3> |
|
|
|
|
|
<table class=doc align=center cellpadding=3> |
|
|
|
|
|
<tr class=top><th>Port</th><th>Purpose</th></tr> |
|
|
|
|
|
<tr class=odd><td align=center>Out 0</td><td>Filtered Audio Output</td></tr> |
|
|
|
|
|
</table> |
|
|
|
|
|
<h3>Functions</h3> |
|
|
|
|
|
<p>This object has no functions to call from the Arduino sketch. It |
|
|
|
|
|
simply streams data from the PDM data, filters out the high frequency |
|
|
|
|
|
noise and gives you the audio signal.</p> |
|
|
|
|
|
<h3>Hardware</h3> |
|
|
|
|
|
<p>PDM has been tested with this <a href="https://www.adafruit.com/product/3492"> |
|
|
|
|
|
Adafruit MP34DT01-M Microphone Board</a>. |
|
|
|
|
|
</p> |
|
|
|
|
|
<table class=doc align=center cellpadding=3> |
|
|
|
|
|
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr> |
|
|
|
|
|
<tr class=odd><td align=center>9</td><td>CLK</td><td>Output, 2.8235 MHz</td></tr> |
|
|
|
|
|
<tr class=odd><td align=center>13</td><td>DATA</td><td>Input, Data on rising edge</td></tr> |
|
|
|
|
|
</table> |
|
|
|
|
|
<p>Data is input on the rising edge. The SEL pin on MP34DT01-M should be |
|
|
|
|
|
connected LOW for proper data capture.</p> |
|
|
|
|
|
<!--<h3>Examples</h3>--> |
|
|
|
|
|
<h3>Notes</h3> |
|
|
|
|
|
<p>Filtering consumes approximately 39% of the CPU when running at |
|
|
|
|
|
96 MHz. The code currently consumes this time inside a high |
|
|
|
|
|
priority interrupt, blocking other libraries. Perhaps future |
|
|
|
|
|
versions will perform filtering at lower priority. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p>The filter used is a 512 tap FIR with approx ±1.1 dB gain |
|
|
|
|
|
flatness to 10 kHz. While far from audiophile grade, this should |
|
|
|
|
|
perform far better than the rapid rolloff of Cascaded Integrator |
|
|
|
|
|
Comb (CIC) or simple moving average filters commonly used on |
|
|
|
|
|
other microcontrollers. The filter also consumes 2104 bytes of |
|
|
|
|
|
RAM for buffering and 32K of Flash for a lookup table to optimized |
|
|
|
|
|
the filter computation. |
|
|
|
|
|
</p> |
|
|
|
|
|
</script> |
|
|
|
|
|
<script type="text/x-red" data-template-name="AudioInputPDM"> |
|
|
|
|
|
<div class="form-row"> |
|
|
|
|
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label> |
|
|
|
|
|
<input type="text" id="node-input-name" placeholder="Name"> |
|
|
|
|
|
</div> |
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
<script type="text/x-red" data-help-name="AudioInputUSB"> |
|
|
<script type="text/x-red" data-help-name="AudioInputUSB"> |
|
|
<h3>Summary</h3> |
|
|
<h3>Summary</h3> |
|
|
<div class=tooltipinfo> |
|
|
<div class=tooltipinfo> |