Room echo calculator
Dependencies: Adafruit-GFX-MbedOS6 Adafruit_SSD1331_MbedOS6
Diff: main.cpp
- Revision:
- 0:33edf726559b
- Child:
- 1:2b95f921e7f2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Oct 07 13:04:40 2020 +0000 @@ -0,0 +1,69 @@ +/* +* +* Connections +* L432KC D3 --- SS PmodMIC3 +* L432KC D12 --- MISO PmodMIC3 +* L432KC D13 --- SCK PmodMIC3 +* GND --- GND PmodMIC3 +* Vcc --- VCC PmodMIC3 +* +* Pmod MIC3 +* https://reference.digilentinc.com/reference/pmod/pmodmic3/start +* ADC7476 +* https://www.ti.com/lit/ds/symlink/adcs7476.pdf +* +* Timo Karppinen 7.10.2020 +**************************************************/ +#include "mbed.h" + +SPI spi(D11, D12, D13); // mosi, miso, sclk +DigitalOut mic3cs(D3); + + +int raw = 0; // 16 bits from MIC3 +int sound32bit = 0; +int sound = 0; +DigitalOut LED(D9); + + +int main() +{ + // Chip must be deselected + mic3cs.write(1); + + // Setup the spi for 16 bit data, low steady state clock, + // rising edge capture, with a 1MHz clock rate + spi.format(16, 0); + spi.frequency(1000000); + ThisThread::sleep_for(100ms); + + while(1){ + // Select the device by seting chip select low + mic3cs.write(0); + ThisThread::sleep_for(1ms); // > 100 ns for the MAX31855 + + // Send 0x0000 to nowhere to read the 16 bits + raw = spi.write(0x0000); + + ThisThread::sleep_for(1ms); + + // Deselect the device + mic3cs.write(1); + printf("16 bits MIC3 = 0x%X", raw); + + // It is a two's complement for negative numbers. The sign is now on the 12th bit. + + sound32bit = raw << 22; // 22 bits to the left to create 32 bit two's complement + sound = sound32bit / 16777216; // 2 exp24 = 16 7777 216 means shifting 24 bits left without shifting the sign! + printf(" sound 12 bit = %d\n", sound); + + if(sound > 128){ + LED.write(1); + } + else{ + LED.write(0); + } + ThisThread::sleep_for(200ms); + } +} +