Last active
August 21, 2019 10:48
-
-
Save samyk/55510275d4cb39ced219cc3ad767295e to your computer and use it in GitHub Desktop.
134kHz sine wave on Teensy 3.6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// We can send 223 analog values (per wavelength) with an unrolled loop to get ~134kHz sine wave on 180MHz Teensy 3.6 | |
// | |
// A version that uses virtually no CPU by controlling the DAC via DMA and PDB is here: | |
// https://gist.github.com/samyk/6273cf9a45d63a50c38c8b50a39a8f52 | |
// | |
// -samy kamkar | |
// If you want to use a for loop, you can only send 161vals per wavelength | |
/* | |
#define SINE 161 | |
int nums[] = { | |
2048, 2127, 2207, 2287, 2366, 2444, 2523, 2600, 2676, 2752, 2826, 2900, 2972, 3042, 3111, 3179, 3245, 3308, 3370, 3430, 3488, 3544, 3597, 3648, 3697, 3743, 3786, 3827, 3865, 3901, 3933, 3963, 3990, 4014, 4034, 4052, 4067, 4079, 4087, 4093, 4095, 4094, 4090, 4083, 4073, 4060, 4044, 4024, 4002, 3977, 3949, 3917, 3883, 3847, 3807, 3765, 3720, 3673, 3623, 3571, 3516, 3460, 3401, 3340, 3277, 3212, 3145, 3077, 3007, 2936, 2863, 2789, 2714, 2638, 2561, 2484, 2405, 2326, 2247, 2167, 2087, 2008, 1928, 1848, 1769, 1690, 1611, 1534, 1457, 1381, 1306, 1232, 1159, 1088, 1018, 950, 883, 818, 755, 694, 635, 579, 524, 472, 422, 375, 330, 288, 248, 212, 178, 146, 118, 93, 71, 51, 35, 22, 12, 5, 1, 0, 2, 8, 16, 28, 43, 61, 81, 105, 132, 162, 194, 230, 268, 309, 352, 398, 447, 498, 551, 607, 665, 725, 787, 850, 916, 984, 1053, 1123, 1195, 1269, 1343, 1419, 1495, 1572, 1651, 1729, 1808, 1888, 1968, 2048 | |
}; | |
*/ | |
// ensure volatile to prevent optimizations removing code | |
#define DAC0(a) *(volatile int16_t *)&(DAC0_DAT0L)=a | |
void setup() | |
{ | |
pinMode(13, OUTPUT); | |
digitalWrite(13, HIGH); | |
analogWriteResolution(12); | |
SIM_SCGC2 |= SIM_SCGC2_DAC0; | |
DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2 | |
/* | |
while (1) | |
for (int i = 0; i < SINE; i++) | |
(int16_t *)&(DAC0_DAT0L) = nums[i]; | |
*/ | |
//noInterrupts(); | |
// 223 values (per sine) with unrolled loop to get ~134kHz on 180MHz Teensy 3.6 | |
while (1) | |
{ | |
DAC0(2048); DAC0(2105); DAC0(2163); DAC0(2220); DAC0(2278); DAC0(2335); DAC0(2392); DAC0(2449); DAC0(2505); DAC0(2561); DAC0(2617); DAC0(2672); DAC0(2727); DAC0(2781); DAC0(2834); DAC0(2887); DAC0(2940); DAC0(2991); DAC0(3042); DAC0(3092); DAC0(3141); DAC0(3190); DAC0(3237); DAC0(3283); DAC0(3329); DAC0(3373); DAC0(3417); DAC0(3459); DAC0(3500); DAC0(3540); DAC0(3579); DAC0(3617); DAC0(3653); DAC0(3689); DAC0(3722); DAC0(3755); DAC0(3786); DAC0(3816); DAC0(3844); DAC0(3871); DAC0(3897); DAC0(3921); DAC0(3943); DAC0(3964); DAC0(3984); DAC0(4002); DAC0(4018); DAC0(4033); DAC0(4046); DAC0(4058); DAC0(4068); DAC0(4077); DAC0(4084); DAC0(4089); DAC0(4093); DAC0(4095); DAC0(4095); DAC0(4094); DAC0(4091); DAC0(4086); DAC0(4080); DAC0(4073); DAC0(4063); DAC0(4052); DAC0(4040); DAC0(4026); DAC0(4010); DAC0(3993); DAC0(3974); DAC0(3954); DAC0(3932); DAC0(3909); DAC0(3884); DAC0(3858); DAC0(3830); DAC0(3801); DAC0(3771); DAC0(3739); DAC0(3706); DAC0(3671); DAC0(3635); DAC0(3598); DAC0(3560); DAC0(3521); DAC0(3480); DAC0(3438); DAC0(3395); DAC0(3351); DAC0(3306); DAC0(3260); DAC0(3213); DAC0(3165); DAC0(3117); DAC0(3067); DAC0(3017); DAC0(2965); DAC0(2914); DAC0(2861); DAC0(2808); DAC0(2754); DAC0(2699); DAC0(2644); DAC0(2589); DAC0(2533); DAC0(2477); DAC0(2420); DAC0(2364); DAC0(2306); DAC0(2249); DAC0(2192); DAC0(2134); DAC0(2076); DAC0(2019); DAC0(1961); DAC0(1903); DAC0(1846); DAC0(1789); DAC0(1731); DAC0(1675); DAC0(1618); DAC0(1562); DAC0(1506); DAC0(1451); DAC0(1396); DAC0(1341); DAC0(1287); DAC0(1234); DAC0(1181); DAC0(1130); DAC0(1078); DAC0(1028); DAC0(978); DAC0(930); DAC0(882); DAC0(835); DAC0(789); DAC0(744); DAC0(700); DAC0(657); DAC0(615); DAC0(574); DAC0(535); DAC0(497); DAC0(460); DAC0(424); DAC0(389); DAC0(356); DAC0(324); DAC0(294); DAC0(265); DAC0(237); DAC0(211); DAC0(186); DAC0(163); DAC0(141); DAC0(121); DAC0(102); DAC0(85); DAC0(69); DAC0(55); DAC0(43); DAC0(32); DAC0(22); DAC0(15); DAC0(9); DAC0(4); DAC0(1); DAC0(0); DAC0(0); DAC0(2); DAC0(6); DAC0(11); DAC0(18); DAC0(27); DAC0(37); DAC0(49); DAC0(62); DAC0(77); DAC0(93); DAC0(111); DAC0(131); DAC0(152); DAC0(174); DAC0(198); DAC0(224); DAC0(251); DAC0(279); DAC0(309); DAC0(340); DAC0(373); DAC0(406); DAC0(442); DAC0(478); DAC0(516); DAC0(555); DAC0(595); DAC0(636); DAC0(678); DAC0(722); DAC0(766); DAC0(812); DAC0(858); DAC0(905); DAC0(954); DAC0(1003); DAC0(1053); DAC0(1104); DAC0(1155); DAC0(1208); DAC0(1261); DAC0(1314); DAC0(1368); DAC0(1423); DAC0(1478); DAC0(1534); DAC0(1590); DAC0(1646); DAC0(1703); DAC0(1760); DAC0(1817); DAC0(1875); DAC0(1932); DAC0(1990); DAC0(2048); //DAC0( 2048);DAC0( 2127);DAC0( 2207);DAC0( 2287);DAC0( 2366);DAC0( 2444);DAC0( 2523);DAC0( 2600);DAC0( 2676);DAC0( 2752);DAC0( 2826);DAC0( 2900);DAC0( 2972);DAC0( 3042);DAC0( 3111);DAC0( 3179);DAC0( 3245);DAC0( 3308);DAC0( 3370);DAC0( 3430);DAC0( 3488);DAC0( 3544);DAC0( 3597);DAC0( 3648);DAC0( 3697);DAC0( 3743);DAC0( 3786);DAC0( 3827);DAC0( 3865);DAC0( 3901);DAC0( 3933);DAC0( 3963);DAC0( 3990);DAC0( 4014);DAC0( 4034);DAC0( 4052);DAC0( 4067);DAC0( 4079);DAC0( 4087);DAC0( 4093);DAC0( 4095);DAC0( 4094);DAC0( 4090);DAC0( 4083);DAC0( 4073);DAC0( 4060);DAC0( 4044);DAC0( 4024);DAC0( 4002);DAC0( 3977);DAC0( 3949);DAC0( 3917);DAC0( 3883);DAC0( 3847);DAC0( 3807);DAC0( 3765);DAC0( 3720);DAC0( 3673);DAC0( 3623);DAC0( 3571);DAC0( 3516);DAC0( 3460);DAC0( 3401);DAC0( 3340);DAC0( 3277);DAC0( 3212);DAC0( 3145);DAC0( 3077);DAC0( 3007);DAC0( 2936);DAC0( 2863);DAC0( 2789);DAC0( 2714);DAC0( 2638);DAC0( 2561);DAC0( 2484);DAC0( 2405);DAC0( 2326);DAC0( 2247);DAC0( 2167);DAC0( 2087);DAC0( 2008);DAC0( 1928);DAC0( 1848);DAC0( 1769);DAC0( 1690);DAC0( 1611);DAC0( 1534);DAC0( 1457);DAC0( 1381);DAC0( 1306);DAC0( 1232);DAC0( 1159);DAC0( 1088);DAC0( 1018);DAC0( 950);DAC0( 883);DAC0( 818);DAC0( 755);DAC0( 694);DAC0( 635);DAC0( 579);DAC0( 524);DAC0( 472);DAC0( 422);DAC0( 375);DAC0( 330);DAC0( 288);DAC0( 248);DAC0( 212);DAC0( 178);DAC0( 146);DAC0( 118);DAC0( 93);DAC0( 71);DAC0( 51);DAC0( 35);DAC0( 22);DAC0( 12);DAC0( 5);DAC0( 1);DAC0( 0);DAC0( 2);DAC0( 8);DAC0( 16);DAC0( 28);DAC0( 43);DAC0( 61);DAC0( 81);DAC0( 105);DAC0( 132);DAC0( 162);DAC0( 194);DAC0( 230);DAC0( 268);DAC0( 309);DAC0( 352);DAC0( 398);DAC0( 447);DAC0( 498);DAC0( 551);DAC0( 607);DAC0( 665);DAC0( 725);DAC0( 787);DAC0( 850);DAC0( 916);DAC0( 984);DAC0( 1053);DAC0( 1123);DAC0( 1195);DAC0( 1269);DAC0( 1343);DAC0( 1419);DAC0( 1495);DAC0( 1572);DAC0( 1651);DAC0( 1729);DAC0( 1808);DAC0( 1888);DAC0( 1968);DAC0( 2048); } | |
} | |
} | |
// don't use loop() as it may do other things like check serial | |
void loop() { } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment