这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版 | |||
ocrobot:modules:mcp4725 [2017/10/04 08:15] – 弘毅 | ocrobot:modules:mcp4725 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== MCP4725 DAC模块 ====== | ||
+ | |||
+ | ===== 介绍 ===== | ||
+ | OCROBOT MCP4725 DAC模块是一款 I2C总线的数字转模拟数据模块,可以让arduino等控制板,提供可调电压输出,使用简单方便。 | ||
+ | |||
+ | ===== 参数 ===== | ||
+ | 模块属性:DAC(数字电压调节器) | ||
+ | |||
+ | 通讯总线类型:I2C | ||
+ | |||
+ | 电压范围:0-5V | ||
+ | |||
+ | 精度:12bit(4096级可调) | ||
+ | |||
+ | =====图片===== | ||
+ | {{: | ||
+ | {{: | ||
+ | =====相关介绍===== | ||
+ | |||
+ | 可以设置其在0-5V电压范围内的各级电压数据功能,亦可模拟较低频率的正弦波,三角波等应用,速率取决于分辨率与最高总线频率 | ||
+ | |||
+ | ===== IIC地址 ===== | ||
+ | 因MCP4725有A0T与A1T等型号,受供货影响,产品不同批次芯片可能会有不同。 | ||
+ | |||
+ | 芯片丝印为AJXX时,型号为A0T,默认地址为0x60 | ||
+ | |||
+ | 芯片丝印为APXX时,型号为A1T,默认地址为0x62 | ||
+ | |||
+ | 如遇到代码无法驱动时,请第一之间检查地址。 | ||
+ | |||
+ | =====库文件下载===== | ||
+ | |||
+ | {{: | ||
+ | ===== 示例代码 ===== | ||
+ | 输出一个电压,是电源电压的50% | ||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | Adafruit_MCP4725 dac; | ||
+ | #define DAC_RESOLUTION | ||
+ | |||
+ | /* Note: If flash space is tight a quarter sine wave is enough | ||
+ | to generate full sine and cos waves, but some additional | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | void setup(void) { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | |||
+ | // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC) | ||
+ | // For MCP4725A0 the address is 0x60 or 0x61 | ||
+ | // For MCP4725A2 the address is 0x64 or 0x65 | ||
+ | dac.begin(0x60); | ||
+ | |||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop(void) { | ||
+ | |||
+ | dac.setVoltage(2048, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 产生一个正弦波 | ||
+ | <code cpp> | ||
+ | / | ||
+ | /*! | ||
+ | @file | ||
+ | @author | ||
+ | @license | ||
+ | |||
+ | This example will generate a sine wave with the MCP4725 DAC. | ||
+ | |||
+ | This is an example sketch for the Adafruit MCP4725 breakout board | ||
+ | ----> http:// | ||
+ | |||
+ | Adafruit invests time and resources providing this open source code, | ||
+ | please support Adafruit and open-source hardware by purchasing | ||
+ | products from Adafruit! | ||
+ | */ | ||
+ | / | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | Adafruit_MCP4725 dac; | ||
+ | |||
+ | // Set this value to 9, 8, 7, 6 or 5 to adjust the resolution | ||
+ | #define DAC_RESOLUTION | ||
+ | |||
+ | /* Note: If flash space is tight a quarter sine wave is enough | ||
+ | to generate full sine and cos waves, but some additional | ||
+ | | ||
+ | | ||
+ | |||
+ | const PROGMEM uint16_t DACLookup_FullSine_9Bit[512] = | ||
+ | { | ||
+ | 2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224, | ||
+ | 2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423, | ||
+ | 2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618, | ||
+ | 2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808, | ||
+ | 2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991, | ||
+ | 3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165, | ||
+ | 3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328, | ||
+ | 3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478, | ||
+ | 3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615, | ||
+ | 3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737, | ||
+ | 3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842, | ||
+ | 3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930, | ||
+ | 3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000, | ||
+ | 4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052, | ||
+ | 4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084, | ||
+ | 4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095, | ||
+ | 4095, 4095, 4095, 4095, 4094, 4092, 4090, 4088, | ||
+ | 4086, 4084, 4081, 4077, 4074, 4070, 4066, 4061, | ||
+ | 4057, 4052, 4046, 4041, 4035, 4028, 4022, 4015, | ||
+ | 4008, 4000, 3993, 3985, 3976, 3968, 3959, 3950, | ||
+ | 3940, 3930, 3920, 3910, 3899, 3888, 3877, 3866, | ||
+ | 3854, 3842, 3830, 3817, 3805, 3792, 3778, 3765, | ||
+ | 3751, 3737, 3722, 3708, 3693, 3678, 3663, 3647, | ||
+ | 3631, 3615, 3599, 3582, 3565, 3548, 3531, 3514, | ||
+ | 3496, 3478, 3460, 3442, 3423, 3405, 3386, 3367, | ||
+ | 3347, 3328, 3308, 3288, 3268, 3248, 3227, 3207, | ||
+ | 3186, 3165, 3144, 3122, 3101, 3079, 3057, 3036, | ||
+ | 3013, 2991, 2969, 2946, 2924, 2901, 2878, 2855, | ||
+ | 2832, 2808, 2785, 2762, 2738, 2714, 2690, 2667, | ||
+ | 2643, 2618, 2594, 2570, 2546, 2521, 2497, 2472, | ||
+ | 2448, 2423, 2398, 2373, 2349, 2324, 2299, 2274, | ||
+ | 2249, 2224, 2199, 2174, 2148, 2123, 2098, 2073, | ||
+ | 2048, 2023, 1998, 1973, 1948, 1922, 1897, 1872, | ||
+ | 1847, 1822, 1797, 1772, 1747, 1723, 1698, 1673, | ||
+ | 1648, 1624, 1599, 1575, 1550, 1526, 1502, 1478, | ||
+ | 1453, 1429, 1406, 1382, 1358, 1334, 1311, 1288, | ||
+ | 1264, 1241, 1218, 1195, 1172, 1150, 1127, 1105, | ||
+ | 1083, 1060, 1039, 1017, 995, 974, 952, 931, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 88, | ||
+ | 39, | ||
+ | 10, 8, 6, 4, 2, 1, 1, 0, | ||
+ | | ||
+ | 10, | ||
+ | 39, | ||
+ | 88, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241, | ||
+ | 1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429, | ||
+ | 1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624, | ||
+ | 1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822, | ||
+ | 1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023 | ||
+ | }; | ||
+ | |||
+ | const PROGMEM uint16_t DACLookup_FullSine_8Bit[256] = | ||
+ | { | ||
+ | 2048, 2098, 2148, 2198, 2248, 2298, 2348, 2398, | ||
+ | 2447, 2496, 2545, 2594, 2642, 2690, 2737, 2784, | ||
+ | 2831, 2877, 2923, 2968, 3013, 3057, 3100, 3143, | ||
+ | 3185, 3226, 3267, 3307, 3346, 3385, 3423, 3459, | ||
+ | 3495, 3530, 3565, 3598, 3630, 3662, 3692, 3722, | ||
+ | 3750, 3777, 3804, 3829, 3853, 3876, 3898, 3919, | ||
+ | 3939, 3958, 3975, 3992, 4007, 4021, 4034, 4045, | ||
+ | 4056, 4065, 4073, 4080, 4085, 4089, 4093, 4094, | ||
+ | 4095, 4094, 4093, 4089, 4085, 4080, 4073, 4065, | ||
+ | 4056, 4045, 4034, 4021, 4007, 3992, 3975, 3958, | ||
+ | 3939, 3919, 3898, 3876, 3853, 3829, 3804, 3777, | ||
+ | 3750, 3722, 3692, 3662, 3630, 3598, 3565, 3530, | ||
+ | 3495, 3459, 3423, 3385, 3346, 3307, 3267, 3226, | ||
+ | 3185, 3143, 3100, 3057, 3013, 2968, 2923, 2877, | ||
+ | 2831, 2784, 2737, 2690, 2642, 2594, 2545, 2496, | ||
+ | 2447, 2398, 2348, 2298, 2248, 2198, 2148, 2098, | ||
+ | 2048, 1997, 1947, 1897, 1847, 1797, 1747, 1697, | ||
+ | 1648, 1599, 1550, 1501, 1453, 1405, 1358, 1311, | ||
+ | 1264, 1218, 1172, 1127, 1082, 1038, 995, 952, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 39, | ||
+ | | ||
+ | 39, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 1264, 1311, 1358, 1405, 1453, 1501, 1550, 1599, | ||
+ | 1648, 1697, 1747, 1797, 1847, 1897, 1947, 1997 | ||
+ | }; | ||
+ | |||
+ | const PROGMEM uint16_t DACLookup_FullSine_7Bit[128] = | ||
+ | { | ||
+ | 2048, 2148, 2248, 2348, 2447, 2545, 2642, 2737, | ||
+ | 2831, 2923, 3013, 3100, 3185, 3267, 3346, 3423, | ||
+ | 3495, 3565, 3630, 3692, 3750, 3804, 3853, 3898, | ||
+ | 3939, 3975, 4007, 4034, 4056, 4073, 4085, 4093, | ||
+ | 4095, 4093, 4085, 4073, 4056, 4034, 4007, 3975, | ||
+ | 3939, 3898, 3853, 3804, 3750, 3692, 3630, 3565, | ||
+ | 3495, 3423, 3346, 3267, 3185, 3100, 3013, 2923, | ||
+ | 2831, 2737, 2642, 2545, 2447, 2348, 2248, 2148, | ||
+ | 2048, 1947, 1847, 1747, 1648, 1550, 1453, 1358, | ||
+ | 1264, 1172, 1082, 995, 910, 828, 749, 672, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 1264, 1358, 1453, 1550, 1648, 1747, 1847, 1947 | ||
+ | }; | ||
+ | |||
+ | const PROGMEM uint16_t DACLookup_FullSine_6Bit[64] = | ||
+ | { | ||
+ | 2048, 2248, 2447, 2642, 2831, 3013, 3185, 3346, | ||
+ | 3495, 3630, 3750, 3853, 3939, 4007, 4056, 4085, | ||
+ | 4095, 4085, 4056, 4007, 3939, 3853, 3750, 3630, | ||
+ | 3495, 3346, 3185, 3013, 2831, 2642, 2447, 2248, | ||
+ | 2048, 1847, 1648, 1453, 1264, 1082, 910, 749, | ||
+ | | ||
+ | | ||
+ | | ||
+ | }; | ||
+ | |||
+ | const PROGMEM uint16_t DACLookup_FullSine_5Bit[32] = | ||
+ | { | ||
+ | 2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056, | ||
+ | 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, | ||
+ | 2048, 1648, 1264, 910, 600, 345, 156, 39, | ||
+ | | ||
+ | }; | ||
+ | |||
+ | void setup(void) { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | |||
+ | // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC) | ||
+ | // For MCP4725A0 the address is 0x60 or 0x61 | ||
+ | // For MCP4725A2 the address is 0x64 or 0x65 | ||
+ | dac.begin(0x62); | ||
+ | |||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop(void) { | ||
+ | uint16_t i; | ||
+ | |||
+ | // Push out the right lookup table, depending on the selected resolution | ||
+ | #if DAC_RESOLUTION == 5 | ||
+ | for (i = 0; i < 32; i++) | ||
+ | { | ||
+ | dac.setVoltage(pgm_read_word(& | ||
+ | } | ||
+ | #elif DAC_RESOLUTION == 6 | ||
+ | for (i = 0; i < 64; i++) | ||
+ | { | ||
+ | dac.setVoltage(pgm_read_word(& | ||
+ | } | ||
+ | #elif DAC_RESOLUTION == 7 | ||
+ | for (i = 0; i < 128; i++) | ||
+ | { | ||
+ | dac.setVoltage(pgm_read_word(& | ||
+ | } | ||
+ | #elif DAC_RESOLUTION == 9 | ||
+ | for (i = 0; i < 512; i++) | ||
+ | { | ||
+ | dac.setVoltage(pgm_read_word(& | ||
+ | } | ||
+ | #else // Use 8-bit data if nothing else is specified | ||
+ | for (i = 0; i < 256; i++) | ||
+ | { | ||
+ | dac.setVoltage(pgm_read_word(& | ||
+ | } | ||
+ | #endif | ||
+ | } | ||
+ | </ |