Anonymous avatar Anonymous committed dcd46dc Draft

initial commit

Comments (0)

Files changed (2)

+syntax: glob
+*~
+*#

sine_generator_plus_serial3/sine_generator_plus_serial3.pde

+/*
+sine_generator_plus_serial3.pde (MAPLE)
+
+Based upon sine_generator in examples with addition of writing to USART while audio_codec is running too. Just outputs a count of the main loop iterations every N steps while an interupt generates the sine tone outupt.
+
+
+guest openmusiclabs 7.13.11
+this program creates a sinewave of variable frequency and
+amplitude, presented at both left and right outputs. there
+isnt any interpolation, so you only get 256 discrete frequencies
+across the span of 44Hz to 10kHz.
+
+Additional it shows how to use Serial3 USART to communicate with the board during
+processing.
+
+Hardware connections
+--------------------
+From the the maple documentaiton the USART Pin Map
+         Tx     Rx      Ck      cts     rts
+Serial3	D29	D30	D31	D32	D33
+(this also applies to the Maple RET6 edition)
+These pins are also listed as being ***5V tolerant***
+
+
+I chose Serial3 because these pins are on the 2x8 header "EXT" block which aren't
+connected to the audio codec shield.
+
+
+So I connected 3 wires to my FTDI basic board:
+   D29 (Tx) to the Rx on the FTDI basic board
+   D30 (Rx) to the Tx on the FTDI basic board
+        GND to GND on on the FTDI basic board
+
+
+
+	
+*/
+
+// setup codec parameters
+// must be done before #includes
+// see readme file in libraries folder for explanations
+#define SAMPLE_RATE 44 // 44.1kHz sample rate
+#define ADCS 2 // use both ADCs
+
+// try faster 9600, 19200, 14400, 38400, 57600, 56000,
+// 115200, 128000, 230400,460800, 153600, 256000,921600
+// the FTDI 232R datasheet says it can go to 3 Mbaud
+#define BAUDRATE 1500000
+
+#define N_SENDSERIAL 100 // send a serial value every N steps through the loop   
+// include necessary libraries
+// note the Maple library
+#include <AudioCodec_Maple.h>
+
+// create data variables for audio transfer
+// even though there is no input needed, the codec requires stereo data
+// note the uint16 typedef, there is no "unsigned int16" type
+int16 left_in = 0; // in from codec (LINE_IN)
+int16 right_in = 0;
+int16 left_out = 0; // out to codec (HP_OUT)
+int16 right_out = 0;
+
+// create variables for ADC results
+// it only has positive values -> unsigned
+uint16 mod0_value = 0;
+uint16 mod1_value = 0;
+
+// create sinewave lookup table
+// note the int16, ints are 32b in Maple land
+int16 sinewave[] __FLASH__ = {
+  // this file is stored in AudioCodec_Maple.h and is a 1024 value
+  // sinewave lookup table of signed 16bit integers
+  // you can replace it with your own waveform if you like
+  #include <sinetable.inc>
+};
+uint16 location; // lookup table value location
+unsigned int g_count = 0;
+
+void setup() {
+  Serial3.begin(BAUDRATE);
+  SerialUSB.end(); // usb conflicts with the codec in this mode
+                   // a different operating mode which allows both
+                   // is in the works
+  // setup codec and microcontroller registers
+  AudioCodec_init(); // call this last if you are setting up other things
+}
+
+void loop() {
+  // while (1); // reduces clock jitter
+
+  if (!(g_count % N_SENDSERIAL)) {
+     Serial3.println(g_count);
+  }
+  g_count++;
+}
+
+// timer1 interrupt routine - all data processed here
+void AudioCodec_interrupt() {
+
+  // &'s are necessary on data_in variables
+  AudioCodec_data(&left_in, &right_in, left_out, right_out);
+  
+  // create some temporary variables
+  // these tend to work faster than using the main data variables
+  // as they arent fetched and stored all the time
+  int16 temp1;
+  
+  // create a variable frequency and amplitude sinewave
+  // fetch a sample from the lookup table
+  temp1 = sinewave[location];
+  // step through table at rate determined by mod1
+  // use upper byte of mod1 value to set the rate
+  // and have an offset of 1 so there is always an increment.
+  location += 1 + (mod1_value >> 8);
+  // if weve gone over the table boundary -> loop back
+  // around to the other side.
+  location &= 0x03ff; // fast way of doing rollover for 2^n numbers
+                      // otherwise it would look like this:
+                      // if (location >= 1024) {
+                      // location -= 1024;
+                      // }
+  
+  // set amplitude with mod0
+  // multiply our sinewave by the mod0 value
+  // since it returns a 32bit value it needs to be scaled with ">> 16"
+  temp1 = (temp1 * mod0_value) >> 16;
+  left_out = temp1; // put sinusoid out on left channel
+  right_out = -temp1; // put inverted version out on right chanel
+
+  // get ADC values
+  // & is required before adc variables
+  AudioCodec_ADC(&mod0_value, &mod1_value);
+
+
+  // you dont need to reti() with Maple
+}
+
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.