You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 satır
2.8KB

  1. // Simple sine wave & input level test for WM8731 Audio Codec Board
  2. //
  3. // Requires the MikroElektronika Audio Codec board or similar hardware
  4. // http://www.mikroe.com/add-on-boards/audio-voice/audio-codec-proto/
  5. //
  6. // When using AudioInputI2Sslave & AudioOutputI2Sslave with MikroE-506,
  7. // the sample rate will be the crystal frequency divided by 256. The
  8. // MikroE-506 comes with a 12.288 MHz crystal, for 48 kHz sample rate.
  9. // To get 44.1 kHz (as expected by the Teensy Audio Library) the crystal
  10. // should be replaced with 11.2896 MHz.
  11. //
  12. // Recommended connections:
  13. //
  14. // MikroE Teensy 3 Teensy 4
  15. // ------ -------- --------
  16. // SCK 9 21
  17. // MISO 13 8
  18. // MOSI 22 7
  19. // ADCL 23 20 (yes, ADCL & DACL connect together)
  20. // DACL 23 20
  21. // SDA 18 18
  22. // SCL 19 19
  23. // 3.3V +3.3V +3.3V
  24. // GND GND GND
  25. //
  26. // For connection using I2S master mode (WM8731 in slave mode, with MCLK):
  27. // https://forum.pjrc.com/threads/53854?p=198733&viewfull=1#post198733
  28. // https://forum.pjrc.com/threads/55334?p=201494&viewfull=1#post201494
  29. //
  30. // This example code is in the public domain.
  31. #include <Audio.h>
  32. #include <Wire.h>
  33. #include <SPI.h>
  34. #include <SD.h>
  35. #include <SerialFlash.h>
  36. // GUItool: begin automatically generated code
  37. AudioSynthWaveform waveform1; //xy=245,160
  38. AudioInputI2Sslave i2sslave1; //xy=265,252
  39. AudioOutputI2Sslave i2sslave2; //xy=429,158
  40. AudioAnalyzeRMS rms2; //xy=436,323
  41. AudioAnalyzeRMS rms1; //xy=444,265
  42. AudioConnection patchCord1(waveform1, 0, i2sslave2, 0);
  43. AudioConnection patchCord2(waveform1, 0, i2sslave2, 1);
  44. AudioConnection patchCord3(i2sslave1, 0, rms1, 0);
  45. AudioConnection patchCord4(i2sslave1, 1, rms2, 0);
  46. AudioControlWM8731master wm8731m1; //xy=292,379
  47. // GUItool: end automatically generated code
  48. void setup() {
  49. delay(1000); // allow the WM7831 extra time to power up
  50. wm8731m1.enable();
  51. AudioMemory(15);
  52. waveform1.begin(WAVEFORM_SINE);
  53. waveform1.frequency(440);
  54. waveform1.amplitude(0.9);
  55. wm8731m1.volume(0.50);
  56. wm8731m1.inputSelect(AUDIO_INPUT_MIC);
  57. // wm8731m1.inputSelect(AUDIO_INPUT_LINEIN); // not connected on MikroE-506
  58. }
  59. elapsedMillis msec;
  60. // Print a simple level meter
  61. void loop() {
  62. if (msec > 40) {
  63. if (rms1.available() && rms2.available()) {
  64. msec = 0;
  65. int level_left = rms1.read() * 30.0;
  66. int level_right = rms2.read() * 30.0;
  67. printchar(' ', 30 - level_left);
  68. printchar('<', level_left);
  69. Serial.print("||");
  70. printchar('>', level_right);
  71. Serial.println();
  72. }
  73. }
  74. }
  75. void printchar(char c, int num) {
  76. for (int i=0; i < num; i++) {
  77. Serial.write(c);
  78. }
  79. }