LibDriver MCP4725
Loading...
Searching...
No Matches
driver_mcp4725_write_test.c
Go to the documentation of this file.
1
37
39#include <stdlib.h>
40
41static mcp4725_handle_t gs_handle;
42
52uint8_t mcp4725_write_test(mcp4725_address_t addr, uint32_t times)
53{
54 uint8_t res;
55 uint32_t i;
56 float input;
57 uint16_t reg, value;
58 mcp4725_info_t info;
59
60 /* link interface function */
68
69 /* get mcp4725 information */
70 res = mcp4725_info(&info);
71 if (res != 0)
72 {
73 mcp4725_interface_debug_print("mcp4725: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print chip information */
80 mcp4725_interface_debug_print("mcp4725: chip is %s.\n", info.chip_name);
81 mcp4725_interface_debug_print("mcp4725: manufacturer is %s.\n", info.manufacturer_name);
82 mcp4725_interface_debug_print("mcp4725: interface is %s.\n", info.interface);
83 mcp4725_interface_debug_print("mcp4725: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 mcp4725_interface_debug_print("mcp4725: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 mcp4725_interface_debug_print("mcp4725: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 mcp4725_interface_debug_print("mcp4725: max current is %0.2fmA.\n", info.max_current_ma);
87 mcp4725_interface_debug_print("mcp4725: max temperature is %0.1fC.\n", info.temperature_max);
88 mcp4725_interface_debug_print("mcp4725: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* start write test */
92 mcp4725_interface_debug_print("mcp4725: start write test.\n");
93
94 /* set iic addr */
95 res = mcp4725_set_addr_pin(&gs_handle, addr);
96 if (res != 0)
97 {
98 mcp4725_interface_debug_print("mcp4725: set addr pin failed.\n");
99
100 return 1;
101 }
102
103 /* mcp4725 init */
104 res = mcp4725_init(&gs_handle);
105 if (res != 0)
106 {
107 mcp4725_interface_debug_print("mcp4725: init failed.\n");
108
109 return 1;
110 }
111
112 /* set power down normal mode */
114 if (res != 0)
115 {
116 mcp4725_interface_debug_print("mcp4725: set power mode failed.\n");
117 (void)mcp4725_deinit(&gs_handle);
118
119 return 1;
120 }
121
122 /* set reference voltage 3.3V */
123 res = mcp4725_set_reference_voltage(&gs_handle, 3.3f);
124 if (res != 0)
125 {
126 mcp4725_interface_debug_print("mcp4725: set reference voltage failed.\n");
127 (void)mcp4725_deinit(&gs_handle);
128
129 return 1;
130 }
131
132 /* set dac mode */
133 res = mcp4725_set_mode(&gs_handle, MCP4725_MODE_DAC);
134 if (res != 0)
135 {
136 mcp4725_interface_debug_print("mcp4725: set mode failed.\n");
137 (void)mcp4725_deinit(&gs_handle);
138
139 return 1;
140 }
141 mcp4725_interface_debug_print("mcp4725: set dac mode.\n");
142 for (i=0; i<times; i++)
143 {
144 input = (float)(rand()%65536)/65536.0f*3.3f;
145
146 /* convert to register */
147 res = mcp4725_convert_to_register(&gs_handle, input, (uint16_t *)&reg);
148 if (res != 0)
149 {
150 mcp4725_interface_debug_print("mcp4725: convert to register failed.\n");
151 (void)mcp4725_deinit(&gs_handle);
152
153 return 1;
154 }
155
156 /* write dac */
157 res = mcp4725_write(&gs_handle, (uint16_t)reg);
158 if (res != 0)
159 {
160 mcp4725_interface_debug_print("mcp4725: write data failed.\n");
161 (void)mcp4725_deinit(&gs_handle);
162
163 return 1;
164 }
166 res = mcp4725_read(&gs_handle, (uint16_t *)&value);
167 if (res != 0)
168 {
169 mcp4725_interface_debug_print("mcp4725: read data failed.\n");
170 (void)mcp4725_deinit(&gs_handle);
171
172 return 1;
173 }
174 mcp4725_interface_debug_print("mcp4725: dac read check %s write %0.4fv\n", reg==value?"ok":"error", input);
176 }
177
178 /* set mode eeprom mode */
179 mcp4725_interface_debug_print("mcp4725: set eeprom mode.\n");
180 res = mcp4725_set_mode(&gs_handle, MCP4725_MODE_EEPROM);
181 if (res != 0)
182 {
183 mcp4725_interface_debug_print("mcp4725: set mode failed.\n");
184 (void)mcp4725_deinit(&gs_handle);
185
186 return 1;
187 }
188 for (i=0; i<times; i++)
189 {
190 input = (float)(rand()%65536)/65536.0f*3.3f;
191
192 /* convert to register */
193 res = mcp4725_convert_to_register(&gs_handle, input, (uint16_t *)&reg);
194 if (res != 0)
195 {
196 mcp4725_interface_debug_print("mcp4725: convert to register failed.\n");
197 (void)mcp4725_deinit(&gs_handle);
198
199 return 1;
200 }
201
202 /* write dac */
203 res = mcp4725_write(&gs_handle, (uint16_t)reg);
204 if (res != 0)
205 {
206 mcp4725_interface_debug_print("mcp4725: write data failed.\n");
207 (void)mcp4725_deinit(&gs_handle);
208
209 return 1;
210 }
212 res = mcp4725_read(&gs_handle, (uint16_t *)&value);
213 if (res != 0)
214 {
215 mcp4725_interface_debug_print("mcp4725: read data failed.\n");
216 (void)mcp4725_deinit(&gs_handle);
217
218 return 1;
219 }
220 mcp4725_interface_debug_print("mcp4725: eeprom read check %s write %0.4fv\n", reg==value?"ok":"error", input);
222 }
223
224 /* finish write test */
225 mcp4725_interface_debug_print("mcp4725: finish write test.\n");
226 (void)mcp4725_deinit(&gs_handle);
227
228 return 0;
229}
driver mcp4725 write test header file
struct mcp4725_handle_s mcp4725_handle_t
mcp4725 handle structure definition
uint8_t mcp4725_deinit(mcp4725_handle_t *handle)
close the chip
uint8_t mcp4725_info(mcp4725_info_t *info)
get chip's information
uint8_t mcp4725_read(mcp4725_handle_t *handle, uint16_t *value)
read the dac value
uint8_t mcp4725_set_power_mode(mcp4725_handle_t *handle, mcp4725_power_down_mode_t mode)
set the chip power mode
mcp4725_address_t
mcp4725 address enumeration definition
struct mcp4725_info_s mcp4725_info_t
mcp4725 information structure definition
uint8_t mcp4725_write(mcp4725_handle_t *handle, uint16_t value)
write the dac value
uint8_t mcp4725_convert_to_register(mcp4725_handle_t *handle, float s, uint16_t *reg)
convert the dac value to the register data
uint8_t mcp4725_init(mcp4725_handle_t *handle)
initialize the chip
uint8_t mcp4725_set_reference_voltage(mcp4725_handle_t *handle, float ref_voltage)
set the chip reference voltage
uint8_t mcp4725_set_mode(mcp4725_handle_t *handle, mcp4725_mode_t mode)
set the chip mode
uint8_t mcp4725_set_addr_pin(mcp4725_handle_t *handle, mcp4725_address_t addr_pin)
set the chip address pin
@ MCP4725_POWER_DOWN_MODE_NORMAL
@ MCP4725_MODE_DAC
@ MCP4725_MODE_EEPROM
uint8_t mcp4725_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read command
void mcp4725_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mcp4725_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write command
void mcp4725_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mcp4725_interface_iic_init(void)
interface iic bus init
uint8_t mcp4725_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mcp4725_write_test(mcp4725_address_t addr, uint32_t times)
write test
uint32_t driver_version
char manufacturer_name[32]