PS_Fgen_FW  4da88f4073c1cc65ea45c3a652a2751e495e50db
Firmware for an Power Supply and Function Generator build from an ATX power supply
Loading...
Searching...
No Matches
DDS.h
Go to the documentation of this file.
1
9
10#include "../Configuration.h"
11
12#ifdef DDS_SUBSYSTEM_ENABLED
13
14#ifndef DDS_H_
15#define DDS_H_
16
17#include "../Pins/Pins.h"
18#include <avr/interrupt.h>
19#include <avr/pgmspace.h>
20
21extern volatile uint32_t dds_channel1_increment;
22extern volatile uint32_t dds_channel2_increment;
23extern volatile uint16_t dds_channel1_waveTable[(1 << DDS_QUANTIZER_BITS)];
24extern volatile uint16_t dds_channel2_waveTable[(1 << DDS_QUANTIZER_BITS)];
25extern volatile bool dds_channel1_enabled;
26extern volatile bool dds_channel2_enabled;
27
32void InitDDSTimer();
33
37void StartDDSTimer();
38
42void DisableDDSTimer();
43
47void DisableDDS1();
48
52void DisableDDS2();
53
54/*
55 * 12-bit sine wave table with 256 entries (8-bit index)
56 * @see https://www.avrfreaks.net/forum/dds-function-generator-using-atmega328p
57 */
58const uint16_t SINE_WAVE_TABLE_12BIT[] PROGMEM =
59{
60 0x7FF,0x831,0x863,0x896,0x8C8,0x8FA,0x92B,0x95D,0x98E,0x9C0,0x9F1,0xA21,0xA51,0xA81,0xAB1,0xAE0,
61 0xB0F,0xB3D,0xB6A,0xB98,0xBC4,0xBF0,0xC1C,0xC46,0xC71,0xC9A,0xCC3,0xCEB,0xD12,0xD38,0xD5E,0xD83,
62 0xDA7,0xDCA,0xDEC,0xE0D,0xE2E,0xE4D,0xE6C,0xE89,0xEA5,0xEC1,0xEDB,0xEF5,0xF0D,0xF24,0xF3A,0xF4F,
63 0xF63,0xF75,0xF87,0xF97,0xFA6,0xFB4,0xFC1,0xFCD,0xFD7,0xFE0,0xFE8,0xFEF,0xFF5,0xFF9,0xFFC,0xFFE,
64 0xFFF,0xFFE,0xFFC,0xFF9,0xFF5,0xFEF,0xFE8,0xFE0,0xFD7,0xFCD,0xFC1,0xFB4,0xFA6,0xF97,0xF87,0xF75,
65 0xF63,0xF4F,0xF3A,0xF24,0xF0D,0xEF5,0xEDB,0xEC1,0xEA5,0xE89,0xE6C,0xE4D,0xE2E,0xE0D,0xDEC,0xDCA,
66 0xDA7,0xD83,0xD5E,0xD38,0xD12,0xCEB,0xCC3,0xC9A,0xC71,0xC46,0xC1C,0xBF0,0xBC4,0xB98,0xB6A,0xB3D,
67 0xB0F,0xAE0,0xAB1,0xA81,0xA51,0xA21,0x9F1,0x9C0,0x98E,0x95D,0x92B,0x8FA,0x8C8,0x896,0x863,0x831,
68 0x7FF,0x7CD,0x79B,0x768,0x736,0x704,0x6D3,0x6A1,0x670,0x63E,0x60D,0x5DD,0x5AD,0x57D,0x54D,0x51E,
69 0x4EF,0x4C1,0x494,0x466,0x43A,0x40E,0x3E2,0x3B8,0x38D,0x364,0x33B,0x313,0x2EC,0x2C6,0x2A0,0x27B,
70 0x257,0x234,0x212,0x1F1,0x1D0,0x1B1,0x192,0x175,0x159,0x13D,0x123,0x109,0x0F1,0x0DA,0x0C4,0x0AF,
71 0x09B,0x089,0x077,0x067,0x058,0x04A,0x03D,0x031,0x027,0x01E,0x016,0x00F,0x009,0x005,0x002,0x000,
72 0x000,0x000,0x002,0x005,0x009,0x00F,0x016,0x01E,0x027,0x031,0x03D,0x04A,0x058,0x067,0x077,0x089,
73 0x09B,0x0AF,0x0C4,0x0DA,0x0F1,0x109,0x123,0x13D,0x159,0x175,0x192,0x1B1,0x1D0,0x1F1,0x212,0x234,
74 0x257,0x27B,0x2A0,0x2C6,0x2EC,0x313,0x33B,0x364,0x38D,0x3B8,0x3E2,0x40E,0x43A,0x466,0x494,0x4C1,
75 0x4EF,0x51E,0x54D,0x57D,0x5AD,0x5DD,0x60D,0x63E,0x670,0x6A1,0x6D3,0x704,0x736,0x768,0x79B,0x7CD,
76};
77
78/*
79 * 12-bit triangle wave table with 256 entries (8-bit index)
80 */
81const uint16_t TRIANGLE_WAVE_TABLE_12BIT[] PROGMEM =
82{
83 0x000,0x01F,0x03F,0x05F,0x07F,0x09F,0x0BF,0x0DF,0x0FF,0x11F,0x13F,0x15F,0x17F,0x19F,0x1BF,0x1DF,
84 0x1FF,0x21F,0x23F,0x25F,0x27F,0x29F,0x2BF,0x2DF,0x2FF,0x31F,0x33F,0x35F,0x37F,0x39F,0x3BF,0x3DF,
85 0x3FF,0x41F,0x43F,0x45F,0x47F,0x49F,0x4BF,0x4DF,0x4FF,0x51F,0x53F,0x55F,0x57F,0x59F,0x5BF,0x5DF,
86 0x5FF,0x61F,0x63F,0x65F,0x67F,0x69F,0x6BF,0x6DF,0x6FF,0x71F,0x73F,0x75F,0x77F,0x79F,0x7BF,0x7DF,
87 0x7FF,0x81F,0x83F,0x85F,0x87F,0x89F,0x8BF,0x8DF,0x8FF,0x91F,0x93F,0x95F,0x97F,0x99F,0x9BF,0x9DF,
88 0x9FF,0xA1F,0xA3F,0xA5F,0xA7F,0xA9F,0xABF,0xADF,0xAFF,0xB1F,0xB3F,0xB5F,0xB7F,0xB9F,0xBBF,0xBDF,
89 0xBFF,0xC1F,0xC3F,0xC5F,0xC7F,0xC9F,0xCBF,0xCDF,0xCFF,0xD1F,0xD3F,0xD5F,0xD7F,0xD9F,0xDBF,0xDDF,
90 0xDFF,0xE1F,0xE3F,0xE5F,0xE7F,0xE9F,0xEBF,0xEDF,0xEFF,0xF1F,0xF3F,0xF5F,0xF7F,0xF9F,0xFBF,0xFDF,
91 0xFFF,0xFE0,0xFC0,0xFA0,0xF80,0xF60,0xF40,0xF20,0xF00,0xEE0,0xEC0,0xEA0,0xE80,0xE60,0xE40,0xE20,
92 0xE00,0xDE0,0xDC0,0xDA0,0xD80,0xD60,0xD40,0xD20,0xD00,0xCE0,0xCC0,0xCA0,0xC80,0xC60,0xC40,0xC20,
93 0xC00,0xBE0,0xBC0,0xBA0,0xB80,0xB60,0xB40,0xB20,0xB00,0xAE0,0xAC0,0xAA0,0xA80,0xA60,0xA40,0xA20,
94 0xA00,0x9E0,0x9C0,0x9A0,0x980,0x960,0x940,0x920,0x900,0x8E0,0x8C0,0x8A0,0x880,0x860,0x840,0x820,
95 0x800,0x7E0,0x7C0,0x7A0,0x780,0x760,0x740,0x720,0x700,0x6E0,0x6C0,0x6A0,0x680,0x660,0x640,0x620,
96 0x600,0x5E0,0x5C0,0x5A0,0x580,0x560,0x540,0x520,0x500,0x4E0,0x4C0,0x4A0,0x480,0x460,0x440,0x420,
97 0x400,0x3E0,0x3C0,0x3A0,0x380,0x360,0x340,0x320,0x300,0x2E0,0x2C0,0x2A0,0x280,0x260,0x240,0x220,
98 0x200,0x1E0,0x1C0,0x1A0,0x180,0x160,0x140,0x120,0x100,0x0E0,0x0C0,0x0A0,0x080,0x060,0x040,0x020,
99};
100
101/*
102 * 12-bit sawtooth wave table with 256 entries (8-bit index)
103 */
104const uint16_t SAWTOOTH_WAVE_TABLE_12BIT[] PROGMEM =
105{
106 0x000,0x010,0x020,0x030,0x040,0x050,0x060,0x070,0x080,0x090,0x0A0,0x0B0,0x0C0,0x0D0,0x0E0,0x0F0,
107 0x100,0x111,0x121,0x131,0x141,0x151,0x161,0x171,0x181,0x191,0x1A1,0x1B1,0x1C1,0x1D1,0x1E1,0x1F1,
108 0x201,0x211,0x222,0x232,0x242,0x252,0x262,0x272,0x282,0x292,0x2A2,0x2B2,0x2C2,0x2D2,0x2E2,0x2F2,
109 0x302,0x312,0x322,0x333,0x343,0x353,0x363,0x373,0x383,0x393,0x3A3,0x3B3,0x3C3,0x3D3,0x3E3,0x3F3,
110 0x403,0x413,0x423,0x433,0x444,0x454,0x464,0x474,0x484,0x494,0x4A4,0x4B4,0x4C4,0x4D4,0x4E4,0x4F4,
111 0x504,0x514,0x524,0x534,0x544,0x555,0x565,0x575,0x585,0x595,0x5A5,0x5B5,0x5C5,0x5D5,0x5E5,0x5F5,
112 0x605,0x615,0x625,0x635,0x645,0x655,0x666,0x676,0x686,0x696,0x6A6,0x6B6,0x6C6,0x6D6,0x6E6,0x6F6,
113 0x706,0x716,0x726,0x736,0x746,0x756,0x766,0x777,0x787,0x797,0x7A7,0x7B7,0x7C7,0x7D7,0x7E7,0x7F7,
114 0x807,0x817,0x827,0x837,0x847,0x857,0x867,0x877,0x888,0x898,0x8A8,0x8B8,0x8C8,0x8D8,0x8E8,0x8F8,
115 0x908,0x918,0x928,0x938,0x948,0x958,0x968,0x978,0x988,0x999,0x9A9,0x9B9,0x9C9,0x9D9,0x9E9,0x9F9,
116 0xA09,0xA19,0xA29,0xA39,0xA49,0xA59,0xA69,0xA79,0xA89,0xA99,0xAAA,0xABA,0xACA,0xADA,0xAEA,0xAFA,
117 0xB0A,0xB1A,0xB2A,0xB3A,0xB4A,0xB5A,0xB6A,0xB7A,0xB8A,0xB9A,0xBAA,0xBBB,0xBCB,0xBDB,0xBEB,0xBFB,
118 0xC0B,0xC1B,0xC2B,0xC3B,0xC4B,0xC5B,0xC6B,0xC7B,0xC8B,0xC9B,0xCAB,0xCBB,0xCCC,0xCDC,0xCEC,0xCFC,
119 0xD0C,0xD1C,0xD2C,0xD3C,0xD4C,0xD5C,0xD6C,0xD7C,0xD8C,0xD9C,0xDAC,0xDBC,0xDCC,0xDDD,0xDED,0xDFD,
120 0xE0D,0xE1D,0xE2D,0xE3D,0xE4D,0xE5D,0xE6D,0xE7D,0xE8D,0xE9D,0xEAD,0xEBD,0xECD,0xEDD,0xEEE,0xEFE,
121 0xF0E,0xF1E,0xF2E,0xF3E,0xF4E,0xF5E,0xF6E,0xF7E,0xF8E,0xF9E,0xFAE,0xFBE,0xFCE,0xFDE,0xFEE,0xFFF,
122};
123
124#endif /* DDS_H_ */
125
126#endif /* DDS_SUBSYSTEM_ENABLED */
Containing different defines for device configuration.
#define DDS_QUANTIZER_BITS
Number of bits that are used to index into the look up tables.
Definition Configuration.h:54
void StartDDSTimer()
Start the DDS timer.
Definition DDS.cpp:32
void InitDDSTimer()
Initialize the DDS timer.
Definition DDS.cpp:24
void DisableDDSTimer()
Disable the DDS timer.
Definition DDS.cpp:42
void DisableDDS2()
Set the voltage of DDS channel 2 to zero.
Definition DDS.cpp:52
void DisableDDS1()
Set the voltage of DDS channel 1 to zero.
Definition DDS.cpp:47
Containing defines and functions for basic pin initialization and handling.