LibDriver PCF8591
Loading...
Searching...
No Matches
driver_pcf8591_register_test.c
Go to the documentation of this file.
1
37
39#include <stdlib.h>
40
41static pcf8591_handle_t gs_handle;
42
52{
53 uint8_t res;
54 uint8_t reg;
55 float ref_voltage;
56 float ref_voltage_check;
57 pcf8591_info_t info;
58 pcf8591_address_t address_pin;
59 pcf8591_channel_t channel;
60 pcf8591_mode_t mode;
61 pcf8591_bool_t enable;
62
63 /* link functions */
71
72 /* pcf8591 info */
73 res = pcf8591_info(&info);
74 if (res != 0)
75 {
76 pcf8591_interface_debug_print("pcf8591: get info failed.\n");
77
78 return 1;
79 }
80 else
81 {
82 /* print chip information */
83 pcf8591_interface_debug_print("pcf8591: chip is %s.\n", info.chip_name);
84 pcf8591_interface_debug_print("pcf8591: manufacturer is %s.\n", info.manufacturer_name);
85 pcf8591_interface_debug_print("pcf8591: interface is %s.\n", info.interface);
86 pcf8591_interface_debug_print("pcf8591: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
87 pcf8591_interface_debug_print("pcf8591: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
88 pcf8591_interface_debug_print("pcf8591: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
89 pcf8591_interface_debug_print("pcf8591: max current is %0.2fmA.\n", info.max_current_ma);
90 pcf8591_interface_debug_print("pcf8591: max temperature is %0.1fC.\n", info.temperature_max);
91 pcf8591_interface_debug_print("pcf8591: min temperature is %0.1fC.\n", info.temperature_min);
92 }
93
94 /* start register test */
95 pcf8591_interface_debug_print("pcf8591: start register test.\n");
96 pcf8591_interface_debug_print("pcf8591: pcf8591_set_addr_pin/pcf8591_get_addr_pin test.\n");
97
98 /* set addr pin a000 */
100 if (res != 0)
101 {
102 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
103
104 return 1;
105 }
106 pcf8591_interface_debug_print("pcf8591: set addr pin a000.\n");
107 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
108 if (res != 0)
109 {
110 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
111
112 return 1;
113 }
114 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A000==address_pin)?"ok":"error");
115
116 /* set addr pin a001 */
118 if (res != 0)
119 {
120 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
121
122 return 1;
123 }
124 pcf8591_interface_debug_print("pcf8591: set addr pin a001.\n");
125 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
126 if (res != 0)
127 {
128 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
129
130 return 1;
131 }
132 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A001==address_pin)?"ok":"error");
133
134 /* set addr pin a010 */
136 if (res != 0)
137 {
138 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
139
140 return 1;
141 }
142 pcf8591_interface_debug_print("pcf8591: set addr pin a010.\n");
143 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
144 if (res != 0)
145 {
146 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
147
148 return 1;
149 }
150 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A010==address_pin)?"ok":"error");
151
152 /* set addr pin a011 */
154 if (res != 0)
155 {
156 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
157
158 return 1;
159 }
160 pcf8591_interface_debug_print("pcf8591: set addr pin a011.\n");
161 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
162 if (res != 0)
163 {
164 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
165
166 return 1;
167 }
168 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A011==address_pin)?"ok":"error");
169
170 /* set addr pin a100 */
172 if (res != 0)
173 {
174 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
175
176 return 1;
177 }
178 pcf8591_interface_debug_print("pcf8591: set addr pin a100.\n");
179 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
180 if (res != 0)
181 {
182 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
183
184 return 1;
185 }
186 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A100==address_pin)?"ok":"error");
187
188 /* set addr pin a101 */
190 if (res != 0)
191 {
192 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
193
194 return 1;
195 }
196 pcf8591_interface_debug_print("pcf8591: set addr pin a101.\n");
197 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
198 if (res != 0)
199 {
200 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
201
202 return 1;
203 }
204 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A101==address_pin)?"ok":"error");
205
206 /* set addr pin a110 */
208 if (res != 0)
209 {
210 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
211
212 return 1;
213 }
214 pcf8591_interface_debug_print("pcf8591: set addr pin a110.\n");
215 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
216 if (res != 0)
217 {
218 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
219
220 return 1;
221 }
222 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A110==address_pin)?"ok":"error");
223
224 /* set addr pin a111 */
226 if (res != 0)
227 {
228 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
229
230 return 1;
231 }
232 pcf8591_interface_debug_print("pcf8591: set addr pin a111.\n");
233 res = pcf8591_get_addr_pin(&gs_handle, &address_pin);
234 if (res != 0)
235 {
236 pcf8591_interface_debug_print("pcf8591: get addr pin failed.\n");
237
238 return 1;
239 }
240 pcf8591_interface_debug_print("pcf8591: check addr pin %s.\n", (PCF8591_ADDRESS_A111==address_pin)?"ok":"error");
241
242 /* set addr pin */
243 res = pcf8591_set_addr_pin(&gs_handle, addr);
244 if (res != 0)
245 {
246 pcf8591_interface_debug_print("pcf8591: set addr pin failed.\n");
247
248 return 1;
249 }
250
251 /* pcf8591 init */
252 res = pcf8591_init(&gs_handle);
253 if (res != 0)
254 {
255 pcf8591_interface_debug_print("pcf8591: init failed.\n");
256
257 return 1;
258 }
259
260 /* pcf8591_set_channel/pcf8591_get_channel test */
261 pcf8591_interface_debug_print("pcf8591: pcf8591_set_channel/pcf8591_get_channel test.\n");
262
263 /* channel 0 */
264 res = pcf8591_set_channel(&gs_handle, PCF8591_CHANNEL_0);
265 if (res != 0)
266 {
267 pcf8591_interface_debug_print("pcf8591: set channel failed.\n");
268 (void)pcf8591_deinit(&gs_handle);
269
270 return 1;
271 }
272 pcf8591_interface_debug_print("pcf8591: set channel 0.\n");
273 res = pcf8591_get_channel(&gs_handle, &channel);
274 if (res != 0)
275 {
276 pcf8591_interface_debug_print("pcf8591: get channel failed.\n");
277 (void)pcf8591_deinit(&gs_handle);
278
279 return 1;
280 }
281 pcf8591_interface_debug_print("pcf8591: check channel %s.\n", (PCF8591_CHANNEL_0==channel)?"ok":"error");
282
283 /* channel 1 */
284 res = pcf8591_set_channel(&gs_handle, PCF8591_CHANNEL_1);
285 if (res != 0)
286 {
287 pcf8591_interface_debug_print("pcf8591: set channel failed.\n");
288 (void)pcf8591_deinit(&gs_handle);
289
290 return 1;
291 }
292 pcf8591_interface_debug_print("pcf8591: set channel 1.\n");
293 res = pcf8591_get_channel(&gs_handle, &channel);
294 if (res != 0)
295 {
296 pcf8591_interface_debug_print("pcf8591: get channel failed.\n");
297 (void)pcf8591_deinit(&gs_handle);
298
299 return 1;
300 }
301 pcf8591_interface_debug_print("pcf8591: check channel %s.\n", (PCF8591_CHANNEL_1==channel)?"ok":"error");
302
303 /* channel 2 */
304 res = pcf8591_set_channel(&gs_handle, PCF8591_CHANNEL_2);
305 if (res != 0)
306 {
307 pcf8591_interface_debug_print("pcf8591: set channel failed.\n");
308 (void)pcf8591_deinit(&gs_handle);
309
310 return 1;
311 }
312 pcf8591_interface_debug_print("pcf8591: set channel 2.\n");
313 res = pcf8591_get_channel(&gs_handle, &channel);
314 if (res != 0)
315 {
316 pcf8591_interface_debug_print("pcf8591: get channel failed.\n");
317 (void)pcf8591_deinit(&gs_handle);
318
319 return 1;
320 }
321 pcf8591_interface_debug_print("pcf8591: check channel %s.\n", (PCF8591_CHANNEL_2==channel)?"ok":"error");
322
323 /* channel 3 */
324 res = pcf8591_set_channel(&gs_handle, PCF8591_CHANNEL_3);
325 if (res != 0)
326 {
327 pcf8591_interface_debug_print("pcf8591: set channel failed.\n");
328 (void)pcf8591_deinit(&gs_handle);
329
330 return 1;
331 }
332 pcf8591_interface_debug_print("pcf8591: set channel 3.\n");
333 res = pcf8591_get_channel(&gs_handle, &channel);
334 if (res != 0)
335 {
336 pcf8591_interface_debug_print("pcf8591: get channel failed.\n");
337 (void)pcf8591_deinit(&gs_handle);
338
339 return 1;
340 }
341 pcf8591_interface_debug_print("pcf8591: check channel %s.\n", (PCF8591_CHANNEL_3==channel)?"ok":"error");
342
343 /* channel 1 */
344 res = pcf8591_set_channel(&gs_handle, PCF8591_CHANNEL_1);
345 if (res != 0)
346 {
347 pcf8591_interface_debug_print("pcf8591: set channel failed.\n");
348 (void)pcf8591_deinit(&gs_handle);
349
350 return 1;
351 }
352
353 /* pcf8591_set_mode/pcf8591_get_mode test */
354 pcf8591_interface_debug_print("pcf8591: pcf8591_set_mode/pcf8591_get_mode test.\n");
355
356 /* set mode AIN0123_GND */
358 if (res != 0)
359 {
360 pcf8591_interface_debug_print("pcf8591: set mode failed.\n");
361 (void)pcf8591_deinit(&gs_handle);
362
363 return 1;
364 }
365 pcf8591_interface_debug_print("pcf8591: set mode AIN0123_GND.\n");
366 res = pcf8591_get_mode(&gs_handle, &mode);
367 if (res != 0)
368 {
369 pcf8591_interface_debug_print("pcf8591: get mode failed.\n");
370 (void)pcf8591_deinit(&gs_handle);
371
372 return 1;
373 }
374 pcf8591_interface_debug_print("pcf8591: check mode %s.\n", (PCF8591_MODE_AIN0123_GND==mode)?"ok":"error");
375
376 /* set mode AIN012_AIN3 */
378 if (res != 0)
379 {
380 pcf8591_interface_debug_print("pcf8591: set mode failed.\n");
381 (void)pcf8591_deinit(&gs_handle);
382
383 return 1;
384 }
385 pcf8591_interface_debug_print("pcf8591: set mode AIN012_AIN3.\n");
386 res = pcf8591_get_mode(&gs_handle, &mode);
387 if (res != 0)
388 {
389 pcf8591_interface_debug_print("pcf8591: get mode failed.\n");
390 (void)pcf8591_deinit(&gs_handle);
391
392 return 1;
393 }
394 pcf8591_interface_debug_print("pcf8591: check mode %s.\n", (PCF8591_MODE_AIN012_AIN3==mode)?"ok":"error");
395
396 /* set mode AIN0_GND_AND_AIN1_GND_AND_AIN2_AIN3 */
398 if (res != 0)
399 {
400 pcf8591_interface_debug_print("pcf8591: set mode failed.\n");
401 (void)pcf8591_deinit(&gs_handle);
402
403 return 1;
404 }
405 pcf8591_interface_debug_print("pcf8591: set mode AIN0_GND_AND_AIN1_GND_AND_AIN2_AIN3.\n");
406 res = pcf8591_get_mode(&gs_handle, &mode);
407 if (res != 0)
408 {
409 pcf8591_interface_debug_print("pcf8591: get mode failed.\n");
410 (void)pcf8591_deinit(&gs_handle);
411
412 return 1;
413 }
414 pcf8591_interface_debug_print("pcf8591: check mode %s.\n", (PCF8591_MODE_AIN0_GND_AND_AIN1_GND_AND_AIN2_AIN3==mode)?"ok":"error");
415
416 /* set mode AIN0_AIN1_AND_ANI2_AIN3 */
418 if (res != 0)
419 {
420 pcf8591_interface_debug_print("pcf8591: set mode failed.\n");
421 (void)pcf8591_deinit(&gs_handle);
422
423 return 1;
424 }
425 pcf8591_interface_debug_print("pcf8591: set mode AIN0_AIN1_AND_ANI2_AIN3.\n");
426 res = pcf8591_get_mode(&gs_handle, &mode);
427 if (res != 0)
428 {
429 pcf8591_interface_debug_print("pcf8591: get mode failed.\n");
430 (void)pcf8591_deinit(&gs_handle);
431
432 return 1;
433 }
434 pcf8591_interface_debug_print("pcf8591: check mode %s.\n", (PCF8591_MODE_AIN0_AIN1_AND_ANI2_AIN3==mode)?"ok":"error");
435
436 /* pcf8591_set_auto_increment/pcf8591_get_auto_increment test */
437 pcf8591_interface_debug_print("pcf8591: pcf8591_set_auto_increment/pcf8591_get_auto_increment test.\n");
438
439 /* enable */
441 if (res != 0)
442 {
443 pcf8591_interface_debug_print("pcf8591: set auto increment failed.\n");
444 (void)pcf8591_deinit(&gs_handle);
445
446 return 1;
447 }
448 pcf8591_interface_debug_print("pcf8591: enable auto increment.\n");
449 res = pcf8591_get_auto_increment(&gs_handle, &enable);
450 if (res != 0)
451 {
452 pcf8591_interface_debug_print("pcf8591: get auto increment failed.\n");
453 (void)pcf8591_deinit(&gs_handle);
454
455 return 1;
456 }
457 pcf8591_interface_debug_print("pcf8591: check auto increment %s.\n", (PCF8591_BOOL_TRUE==enable)?"ok":"error");
458
459 /* disable */
461 if (res != 0)
462 {
463 pcf8591_interface_debug_print("pcf8591: set auto increment failed.\n");
464 (void)pcf8591_deinit(&gs_handle);
465
466 return 1;
467 }
468 pcf8591_interface_debug_print("pcf8591: disable auto increment.\n");
469 res = pcf8591_get_auto_increment(&gs_handle, &enable);
470 if (res != 0)
471 {
472 pcf8591_interface_debug_print("pcf8591: get auto increment failed.\n");
473 (void)pcf8591_deinit(&gs_handle);
474
475 return 1;
476 }
477 pcf8591_interface_debug_print("pcf8591: check auto increment %s.\n", (PCF8591_BOOL_FALSE==enable)?"ok":"error");
478
479 /* pcf8591_set_reference_voltage/pcf8591_get_reference_voltage test */
480 pcf8591_interface_debug_print("pcf8591: pcf8591_set_reference_voltage/pcf8591_get_reference_voltage test.\n");
481 ref_voltage = (float)(rand() % 200) / 100.0f;
482 pcf8591_interface_debug_print("pcf8591: set ref voltage %0.3f.\n", ref_voltage);
483 res = pcf8591_set_reference_voltage(&gs_handle, ref_voltage);
484 if (res != 0)
485 {
486 pcf8591_interface_debug_print("pcf8591: set reference voltage failed.\n");
487 (void)pcf8591_deinit(&gs_handle);
488
489 return 1;
490 }
491 res = pcf8591_get_reference_voltage(&gs_handle, (float *)&ref_voltage_check);
492 if (res != 0)
493 {
494 pcf8591_interface_debug_print("pcf8591: get reference voltage failed.\n");
495 (void)pcf8591_deinit(&gs_handle);
496
497 return 1;
498 }
499 pcf8591_interface_debug_print("pcf8591: check reference voltage %0.3f.\n", ref_voltage_check);
500
501 /* pcf8591_dac_convert_to_register test */
502 pcf8591_interface_debug_print("pcf8591: pcf8591_dac_convert_to_register test.\n");
503 ref_voltage = (float)(rand() % 200) / 100.0f;
504 pcf8591_interface_debug_print("pcf8591: set convert voltage %0.3f.\n", ref_voltage);
505 res = pcf8591_dac_convert_to_register(&gs_handle, ref_voltage, (uint8_t *)&reg);
506 if (res != 0)
507 {
508 pcf8591_interface_debug_print("pcf8591: dac convert to register failed.\n");
509 (void)pcf8591_deinit(&gs_handle);
510
511 return 1;
512 }
513 pcf8591_interface_debug_print("pcf8591: check register 0x%02X.\n", reg);
514
515 /* finish register test */
516 pcf8591_interface_debug_print("pcf8591: finish register test.\n");
517 (void)pcf8591_deinit(&gs_handle);
518
519 return 0;
520}
driver pcf8591 register test header file
uint8_t pcf8591_dac_convert_to_register(pcf8591_handle_t *handle, float dac, uint8_t *reg)
convert a dac value to a register raw data
struct pcf8591_info_s pcf8591_info_t
pcf8591 information structure definition
uint8_t pcf8591_info(pcf8591_info_t *info)
get chip's information
uint8_t pcf8591_set_addr_pin(pcf8591_handle_t *handle, pcf8591_address_t addr_pin)
set the address pin
uint8_t pcf8591_get_channel(pcf8591_handle_t *handle, pcf8591_channel_t *channel)
get the adc channel
uint8_t pcf8591_init(pcf8591_handle_t *handle)
initialize the chip
pcf8591_mode_t
pcf8591 mode definition
uint8_t pcf8591_get_auto_increment(pcf8591_handle_t *handle, pcf8591_bool_t *enable)
get the adc auto increment read mode
pcf8591_bool_t
pcf8591 bool enumeration definition
uint8_t pcf8591_set_mode(pcf8591_handle_t *handle, pcf8591_mode_t mode)
set the adc mode
uint8_t pcf8591_set_reference_voltage(pcf8591_handle_t *handle, float ref_voltage)
set the adc reference voltage
uint8_t pcf8591_set_channel(pcf8591_handle_t *handle, pcf8591_channel_t channel)
set the adc channel
uint8_t pcf8591_get_addr_pin(pcf8591_handle_t *handle, pcf8591_address_t *addr_pin)
get the address pin
pcf8591_address_t
pcf8591 address enumeration definition
uint8_t pcf8591_get_mode(pcf8591_handle_t *handle, pcf8591_mode_t *mode)
get the adc mode
uint8_t pcf8591_get_reference_voltage(pcf8591_handle_t *handle, float *ref_voltage)
get the adc reference voltage
uint8_t pcf8591_deinit(pcf8591_handle_t *handle)
close the chip
struct pcf8591_handle_s pcf8591_handle_t
pcf8591 handle structure definition
pcf8591_channel_t
pcf8591 channel definition
uint8_t pcf8591_set_auto_increment(pcf8591_handle_t *handle, pcf8591_bool_t enable)
set the adc auto increment read mode
@ PCF8591_MODE_AIN0_AIN1_AND_ANI2_AIN3
@ PCF8591_MODE_AIN012_AIN3
@ PCF8591_MODE_AIN0123_GND
@ PCF8591_MODE_AIN0_GND_AND_AIN1_GND_AND_AIN2_AIN3
@ PCF8591_BOOL_FALSE
@ PCF8591_BOOL_TRUE
@ PCF8591_ADDRESS_A110
@ PCF8591_ADDRESS_A101
@ PCF8591_ADDRESS_A100
@ PCF8591_ADDRESS_A010
@ PCF8591_ADDRESS_A111
@ PCF8591_ADDRESS_A000
@ PCF8591_ADDRESS_A011
@ PCF8591_ADDRESS_A001
@ PCF8591_CHANNEL_3
@ PCF8591_CHANNEL_1
@ PCF8591_CHANNEL_0
@ PCF8591_CHANNEL_2
uint8_t pcf8591_interface_iic_init(void)
interface iic bus init
void pcf8591_interface_delay_ms(uint32_t ms)
interface delay ms
void pcf8591_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t pcf8591_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write command
uint8_t pcf8591_interface_iic_deinit(void)
interface iic bus deinit
uint8_t pcf8591_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read command
uint8_t pcf8591_register_test(pcf8591_address_t addr)
register test
uint32_t driver_version
char manufacturer_name[32]