root / Ports / examples / toneGen / toneGen.pde
History | View | Annotate | Download (1.7 KB)
| 1 | //>>> The latest version of this code can be found at https://github.com/jcw/ !! |
|---|---|
| 2 | |
| 3 | // Tone generator based on a discrete DAC. |
| 4 | // 2010-11-18 <jcw@equi4.com> http://opensource.org/licenses/mit-license.php |
| 5 | // $Id: toneGen.pde 7763 2011-12-11 01:28:16Z jcw $ |
| 6 | |
| 7 | #include <Ports.h> |
| 8 | #include <RF12.h> |
| 9 | #include <avr/pgmspace.h> |
| 10 | |
| 11 | byte index; |
| 12 | |
| 13 | byte sine256[] PROGMEM = {
|
| 14 | 127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181, |
| 15 | 184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227, |
| 16 | 229,231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252, |
| 17 | 252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249, |
| 18 | 249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,221, |
| 19 | 219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173, |
| 20 | 170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115, |
| 21 | 111,108,105,102,99,96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46, |
| 22 | 44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2, |
| 23 | 2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23, |
| 24 | 25,27,29,31,33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84, |
| 25 | 87,90,93,96,99,102,105,108,111,115,118,121,124, |
| 26 | }; |
| 27 | |
| 28 | void setup () {
|
| 29 | // Serial.begin(57600); |
| 30 | // Serial.println("\n[toneGen]");
|
| 31 | pinMode(14, OUTPUT); |
| 32 | pinMode(15, OUTPUT); |
| 33 | pinMode(16, OUTPUT); |
| 34 | pinMode(17, OUTPUT); |
| 35 | pinMode(4, OUTPUT); |
| 36 | pinMode(5, OUTPUT); |
| 37 | pinMode(6, OUTPUT); |
| 38 | pinMode(7, OUTPUT); |
| 39 | cli(); |
| 40 | } |
| 41 | |
| 42 | void loop () {
|
| 43 | for (;;) {
|
| 44 | byte b = pgm_read_byte(sine256 + index++); |
| 45 | PORTD = (PORTD & 0x0F) | (b & 0xF0); |
| 46 | PORTC = (PORTC & 0xF0) | (b & 0x0F); |
| 47 | // delayMicroseconds(2); |
| 48 | } |
| 49 | } |