forest-all-around/sampler/lib/Audio_SdFat/examples/HardwareTesting/WM8731MikroSine/WM8731MikroSine.ino

90 lines
2.6 KiB
C++

// Simple sine wave & input level test for WM8731 Audio Codec Board
//
// Requires the MikroElektronika Audio Codec board or similar hardware
// http://www.mikroe.com/add-on-boards/audio-voice/audio-codec-proto/
//
// When using AudioInputI2Sslave & AudioOutputI2Sslave with MikroE-506,
// the sample rate will be the crystal frequency divided by 256. The
// MikroE-506 comes with a 12.288 MHz crystal, for 48 kHz sample rate.
// To get 44.1 kHz (as expected by the Teensy Audio Library) the crystal
// should be replaced with 11.2896 MHz.
//
// Recommended connections:
//
// Mikroe Teensy 3.1
// ------ ----------
// SCK 9
// MISO 13
// MOSI 22
// ADCL 23 (yes, ADCL & DACL connect together)
// DACL 23
// SDA 18
// SCL 19
// 3.3V +3.3V
// GND GND
//
// For connection using I2S master mode (WM8731 in slave mode, with MCLK):
// https://forum.pjrc.com/threads/53854?p=198733&viewfull=1#post198733
// https://forum.pjrc.com/threads/55334?p=201494&viewfull=1#post201494
//
// This example code is in the public domain.
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=245,160
AudioInputI2Sslave i2sslave1; //xy=265,252
AudioOutputI2Sslave i2sslave2; //xy=429,158
AudioAnalyzeRMS rms2; //xy=436,323
AudioAnalyzeRMS rms1; //xy=444,265
AudioConnection patchCord1(waveform1, 0, i2sslave2, 0);
AudioConnection patchCord2(waveform1, 0, i2sslave2, 1);
AudioConnection patchCord3(i2sslave1, 0, rms1, 0);
AudioConnection patchCord4(i2sslave1, 1, rms2, 0);
AudioControlWM8731master wm8731m1; //xy=292,379
// GUItool: end automatically generated code
void setup() {
wm8731m1.enable();
AudioMemory(15);
waveform1.begin(WAVEFORM_SINE);
waveform1.frequency(440);
waveform1.amplitude(0.9);
wm8731m1.volume(0.50);
wm8731m1.inputSelect(AUDIO_INPUT_MIC);
// wm8731m1.inputSelect(AUDIO_INPUT_LINEIN); // not connected on MikroE-506
}
elapsedMillis msec;
// Print a simple level meter
void loop() {
if (msec > 40) {
if (rms1.available() && rms2.available()) {
msec = 0;
int level_left = rms1.read() * 30.0;
int level_right = rms2.read() * 30.0;
printchar(' ', 30 - level_left);
printchar('<', level_left);
Serial.print("||");
printchar('>', level_right);
Serial.println();
}
}
}
void printchar(char c, int num) {
for (int i=0; i < num; i++) {
Serial.write(c);
}
}