Skip to content
This repository was archived by the owner on Sep 30, 2019. It is now read-only.

Commit 89ad7a2

Browse files
author
K. Townsend
committed
Added I2C block write
1 parent f485adb commit 89ad7a2

File tree

3 files changed

+185
-13
lines changed

3 files changed

+185
-13
lines changed

Adafruit_I2C/Adafruit_I2C.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ def write8(self, reg, value):
3434
except IOError, err:
3535
print "Error accessing 0x%02X: Check your I2C address" % self.address
3636
return -1
37-
38-
def write16(self, reg, value):
39-
"Writes 16 bits of data to the specified register/address"
37+
38+
def writeList(self, reg, list):
39+
"Writes an array of bytes using I2C format"
4040
try:
41-
self.bus.write_word_data(self.address, reg, value)
41+
self.bus.write_i2c_block_data(self.address, reg, list)
4242
except IOError, err:
4343
print "Error accessing 0x%02X: Check your I2C address" % self.address
4444
return -1

Adafruit_MCP4725/Adafruit_MCP4725.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,13 @@ def setVoltage(self, voltage, persist=False):
2323
"Sets the output voltage to the specified value"
2424
if (voltage > 4095):
2525
voltage = 4095
26+
if (voltage < 0):
27+
voltage = 0
2628
if (self.debug):
2729
print "Setting voltage to %04d" % voltage
2830
# Value needs to be left-shifted four bytes for the MCP4725
29-
voltage <<= 4
30-
if (persist==True):
31-
self.i2c.write16(self.__REG_WRITEDACEEPROM, self.i2c.reverseByteOrder(voltage))
31+
bytes = [(voltage >> 4) & 0xFF, (voltage << 4) & 0xFF]
32+
if (persist):
33+
self.i2c.writeList(self.__REG_WRITEDACEEPROM, self.i2c.reverseByteOrder(voltage))
3234
else:
33-
self.i2c.write16(self.__REG_WRITEDAC, self.i2c.reverseByteOrder(voltage))
34-
35-
# Initialise a new instance of MCP4725 using the default address (0x62)
36-
dac = MCP4725(0x62)
37-
# Set output voltage to 50% VCC
38-
dac.setVoltage(2048)
35+
self.i2c.writeList(self.__REG_WRITEDAC, bytes)

Adafruit_MCP4725/sinewave.py

+175
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
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

Comments
 (0)