|
| 1 | +#!/usr/bin/python |
| 2 | + |
| 3 | +from Adafruit_MCP4725 import MCP4725 |
| 4 | +import time |
| 5 | + |
| 6 | +# Set this value to 9, 8, 7, 6 or 5 to adjust the resolution |
| 7 | +DAC_RESOLUTION = 9 |
| 8 | + |
| 9 | +# 9-Bit Lookup Table (512 values) |
| 10 | +DACLookup_FullSine_9Bit = \ |
| 11 | +[ 2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224, |
| 12 | + 2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423, |
| 13 | + 2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618, |
| 14 | + 2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808, |
| 15 | + 2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991, |
| 16 | + 3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165, |
| 17 | + 3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328, |
| 18 | + 3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478, |
| 19 | + 3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615, |
| 20 | + 3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737, |
| 21 | + 3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842, |
| 22 | + 3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930, |
| 23 | + 3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000, |
| 24 | + 4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052, |
| 25 | + 4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084, |
| 26 | + 4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095, |
| 27 | + 4095, 4095, 4095, 4095, 4094, 4092, 4090, 4088, |
| 28 | + 4086, 4084, 4081, 4077, 4074, 4070, 4066, 4061, |
| 29 | + 4057, 4052, 4046, 4041, 4035, 4028, 4022, 4015, |
| 30 | + 4008, 4000, 3993, 3985, 3976, 3968, 3959, 3950, |
| 31 | + 3940, 3930, 3920, 3910, 3899, 3888, 3877, 3866, |
| 32 | + 3854, 3842, 3830, 3817, 3805, 3792, 3778, 3765, |
| 33 | + 3751, 3737, 3722, 3708, 3693, 3678, 3663, 3647, |
| 34 | + 3631, 3615, 3599, 3582, 3565, 3548, 3531, 3514, |
| 35 | + 3496, 3478, 3460, 3442, 3423, 3405, 3386, 3367, |
| 36 | + 3347, 3328, 3308, 3288, 3268, 3248, 3227, 3207, |
| 37 | + 3186, 3165, 3144, 3122, 3101, 3079, 3057, 3036, |
| 38 | + 3013, 2991, 2969, 2946, 2924, 2901, 2878, 2855, |
| 39 | + 2832, 2808, 2785, 2762, 2738, 2714, 2690, 2667, |
| 40 | + 2643, 2618, 2594, 2570, 2546, 2521, 2497, 2472, |
| 41 | + 2448, 2423, 2398, 2373, 2349, 2324, 2299, 2274, |
| 42 | + 2249, 2224, 2199, 2174, 2148, 2123, 2098, 2073, |
| 43 | + 2048, 2023, 1998, 1973, 1948, 1922, 1897, 1872, |
| 44 | + 1847, 1822, 1797, 1772, 1747, 1723, 1698, 1673, |
| 45 | + 1648, 1624, 1599, 1575, 1550, 1526, 1502, 1478, |
| 46 | + 1453, 1429, 1406, 1382, 1358, 1334, 1311, 1288, |
| 47 | + 1264, 1241, 1218, 1195, 1172, 1150, 1127, 1105, |
| 48 | + 1083, 1060, 1039, 1017, 995, 974, 952, 931, |
| 49 | + 910, 889, 869, 848, 828, 808, 788, 768, |
| 50 | + 749, 729, 710, 691, 673, 654, 636, 618, |
| 51 | + 600, 582, 565, 548, 531, 514, 497, 481, |
| 52 | + 465, 449, 433, 418, 403, 388, 374, 359, |
| 53 | + 345, 331, 318, 304, 291, 279, 266, 254, |
| 54 | + 242, 230, 219, 208, 197, 186, 176, 166, |
| 55 | + 156, 146, 137, 128, 120, 111, 103, 96, |
| 56 | + 88, 81, 74, 68, 61, 55, 50, 44, |
| 57 | + 39, 35, 30, 26, 22, 19, 15, 12, |
| 58 | + 10, 8, 6, 4, 2, 1, 1, 0, |
| 59 | + 0, 0, 1, 1, 2, 4, 6, 8, |
| 60 | + 10, 12, 15, 19, 22, 26, 30, 35, |
| 61 | +# 16, 16, 16, 16, 16, 16, 16, 16, |
| 62 | +# 16, 16, 16, 16, 16, 16, 16, 16, |
| 63 | +# 16, 16, 16, 16, 16, 16, 16, 16, |
| 64 | + 39, 44, 50, 55, 61, 68, 74, 81, |
| 65 | + 88, 96, 103, 111, 120, 128, 137, 146, |
| 66 | + 156, 166, 176, 186, 197, 208, 219, 230, |
| 67 | + 242, 254, 266, 279, 291, 304, 318, 331, |
| 68 | + 345, 359, 374, 388, 403, 418, 433, 449, |
| 69 | + 465, 481, 497, 514, 531, 548, 565, 582, |
| 70 | + 600, 618, 636, 654, 673, 691, 710, 729, |
| 71 | + 749, 768, 788, 808, 828, 848, 869, 889, |
| 72 | + 910, 931, 952, 974, 995, 1017, 1039, 1060, |
| 73 | + 1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241, |
| 74 | + 1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429, |
| 75 | + 1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624, |
| 76 | + 1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822, |
| 77 | + 1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023 ] |
| 78 | + |
| 79 | +# 8-bit Lookup Table (256 values) |
| 80 | +DACLookup_FullSine_8Bit = \ |
| 81 | +[ 2048, 2098, 2148, 2198, 2248, 2298, 2348, 2398, |
| 82 | + 2447, 2496, 2545, 2594, 2642, 2690, 2737, 2784, |
| 83 | + 2831, 2877, 2923, 2968, 3013, 3057, 3100, 3143, |
| 84 | + 3185, 3226, 3267, 3307, 3346, 3385, 3423, 3459, |
| 85 | + 3495, 3530, 3565, 3598, 3630, 3662, 3692, 3722, |
| 86 | + 3750, 3777, 3804, 3829, 3853, 3876, 3898, 3919, |
| 87 | + 3939, 3958, 3975, 3992, 4007, 4021, 4034, 4045, |
| 88 | + 4056, 4065, 4073, 4080, 4085, 4089, 4093, 4094, |
| 89 | + 4095, 4094, 4093, 4089, 4085, 4080, 4073, 4065, |
| 90 | + 4056, 4045, 4034, 4021, 4007, 3992, 3975, 3958, |
| 91 | + 3939, 3919, 3898, 3876, 3853, 3829, 3804, 3777, |
| 92 | + 3750, 3722, 3692, 3662, 3630, 3598, 3565, 3530, |
| 93 | + 3495, 3459, 3423, 3385, 3346, 3307, 3267, 3226, |
| 94 | + 3185, 3143, 3100, 3057, 3013, 2968, 2923, 2877, |
| 95 | + 2831, 2784, 2737, 2690, 2642, 2594, 2545, 2496, |
| 96 | + 2447, 2398, 2348, 2298, 2248, 2198, 2148, 2098, |
| 97 | + 2048, 1997, 1947, 1897, 1847, 1797, 1747, 1697, |
| 98 | + 1648, 1599, 1550, 1501, 1453, 1405, 1358, 1311, |
| 99 | + 1264, 1218, 1172, 1127, 1082, 1038, 995, 952, |
| 100 | + 910, 869, 828, 788, 749, 710, 672, 636, |
| 101 | + 600, 565, 530, 497, 465, 433, 403, 373, |
| 102 | + 345, 318, 291, 266, 242, 219, 197, 176, |
| 103 | + 156, 137, 120, 103, 88, 74, 61, 50, |
| 104 | + 39, 30, 22, 15, 10, 6, 2, 1, |
| 105 | + 0, 1, 2, 6, 10, 15, 22, 30, |
| 106 | + 39, 50, 61, 74, 88, 103, 120, 137, |
| 107 | + 156, 176, 197, 219, 242, 266, 291, 318, |
| 108 | + 345, 373, 403, 433, 465, 497, 530, 565, |
| 109 | + 600, 636, 672, 710, 749, 788, 828, 869, |
| 110 | + 910, 952, 995, 1038, 1082, 1127, 1172, 1218, |
| 111 | + 1264, 1311, 1358, 1405, 1453, 1501, 1550, 1599, |
| 112 | + 1648, 1697, 1747, 1797, 1847, 1897, 1947, 1997 ] |
| 113 | + |
| 114 | +# 7-bit Lookup Table (128 values) |
| 115 | +DACLookup_FullSine_7Bit = \ |
| 116 | +[ 2048, 2148, 2248, 2348, 2447, 2545, 2642, 2737, |
| 117 | + 2831, 2923, 3013, 3100, 3185, 3267, 3346, 3423, |
| 118 | + 3495, 3565, 3630, 3692, 3750, 3804, 3853, 3898, |
| 119 | + 3939, 3975, 4007, 4034, 4056, 4073, 4085, 4093, |
| 120 | + 4095, 4093, 4085, 4073, 4056, 4034, 4007, 3975, |
| 121 | + 3939, 3898, 3853, 3804, 3750, 3692, 3630, 3565, |
| 122 | + 3495, 3423, 3346, 3267, 3185, 3100, 3013, 2923, |
| 123 | + 2831, 2737, 2642, 2545, 2447, 2348, 2248, 2148, |
| 124 | + 2048, 1947, 1847, 1747, 1648, 1550, 1453, 1358, |
| 125 | + 1264, 1172, 1082, 995, 910, 828, 749, 672, |
| 126 | + 600, 530, 465, 403, 345, 291, 242, 197, |
| 127 | + 156, 120, 88, 61, 39, 22, 10, 2, |
| 128 | + 0, 2, 10, 22, 39, 61, 88, 120, |
| 129 | + 156, 197, 242, 291, 345, 403, 465, 530, |
| 130 | + 600, 672, 749, 828, 910, 995, 1082, 1172, |
| 131 | + 1264, 1358, 1453, 1550, 1648, 1747, 1847, 1947 ] |
| 132 | + |
| 133 | +# 6-bit Lookup Table (64 values) |
| 134 | +DACLookup_FullSine_6Bit = \ |
| 135 | +[ 2048, 2248, 2447, 2642, 2831, 3013, 3185, 3346, |
| 136 | + 3495, 3630, 3750, 3853, 3939, 4007, 4056, 4085, |
| 137 | + 4095, 4085, 4056, 4007, 3939, 3853, 3750, 3630, |
| 138 | + 3495, 3346, 3185, 3013, 2831, 2642, 2447, 2248, |
| 139 | + 2048, 1847, 1648, 1453, 1264, 1082, 910, 749, |
| 140 | + 600, 465, 345, 242, 156, 88, 39, 10, |
| 141 | + 0, 10, 39, 88, 156, 242, 345, 465, |
| 142 | + 600, 749, 910, 1082, 1264, 1453, 1648, 1847 ] |
| 143 | + |
| 144 | +# 5-bit Lookup Table (32 values) |
| 145 | +DACLookup_FullSine_5Bit = \ |
| 146 | +[ 2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056, |
| 147 | + 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, |
| 148 | + 2048, 1648, 1264, 910, 600, 345, 156, 39, |
| 149 | + 0, 39, 156, 345, 600, 910, 1264, 1648 ] |
| 150 | + |
| 151 | +# Initialise the DAC using the default address |
| 152 | +dac = MCP4725(0x62) |
| 153 | + |
| 154 | +if (DAC_RESOLUTION < 5) | (DAC_RESOLUTION > 9): |
| 155 | + print "Invalid DAC resolution: Set DAC_RESOLUTION from 5..9" |
| 156 | +else: |
| 157 | + print "Generating a sine wave with %d-bit resolution" % DAC_RESOLUTION |
| 158 | + print "Press CTRL+C to stop" |
| 159 | + while(True): |
| 160 | + if (DAC_RESOLUTION == 9): |
| 161 | + for val in DACLookup_FullSine_9Bit: |
| 162 | + dac.setVoltage(val) |
| 163 | + if (DAC_RESOLUTION == 8): |
| 164 | + for val in DACLookup_FullSine_8Bit: |
| 165 | + dac.setVoltage(val) |
| 166 | + if (DAC_RESOLUTION == 7): |
| 167 | + for val in DACLookup_FullSine_7Bit: |
| 168 | + dac.setVoltage(val) |
| 169 | + if (DAC_RESOLUTION == 6): |
| 170 | + for val in DACLookup_FullSine_6Bit: |
| 171 | + dac.setVoltage(val) |
| 172 | + if (DAC_RESOLUTION == 5): |
| 173 | + for val in DACLookup_FullSine_5Bit: |
| 174 | + dac.setVoltage(val) |
| 175 | + |
0 commit comments