LibDriver MCP9600
Loading...
Searching...
No Matches
driver_mcp9600_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static mcp9600_handle_t gs_handle;
40
51{
52 uint8_t res;
53 int16_t reg;
54 uint8_t reg2;
55 uint16_t timeout;
56 mcp9600_info_t info;
57
58 /* link interface function */
66
67 /* get information */
68 res = mcp9600_info(&info);
69 if (res != 0)
70 {
71 mcp9600_interface_debug_print("mcp9600: get info failed.\n");
72
73 return 1;
74 }
75 else
76 {
77 /* print chip information */
78 mcp9600_interface_debug_print("mcp9600: chip is %s.\n", info.chip_name);
79 mcp9600_interface_debug_print("mcp9600: manufacturer is %s.\n", info.manufacturer_name);
80 mcp9600_interface_debug_print("mcp9600: interface is %s.\n", info.interface);
81 mcp9600_interface_debug_print("mcp9600: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
82 mcp9600_interface_debug_print("mcp9600: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
83 mcp9600_interface_debug_print("mcp9600: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
84 mcp9600_interface_debug_print("mcp9600: max current is %0.2fmA.\n", info.max_current_ma);
85 mcp9600_interface_debug_print("mcp9600: max temperature is %0.1fC.\n", info.temperature_max);
86 mcp9600_interface_debug_print("mcp9600: min temperature is %0.1fC.\n", info.temperature_min);
87 }
88
89 /* start interrupt test */
90 mcp9600_interface_debug_print("mcp9600: start interrupt test.\n");
91
92 /* set mcp9600 iic address */
93 res = mcp9600_set_addr_pin(&gs_handle, addr_pin);
94 if (res != 0)
95 {
96 mcp9600_interface_debug_print("mcp9600: set addr pin failed.\n");
97
98 return 1;
99 }
100
101 /* chip init */
102 res = mcp9600_init(&gs_handle);
103 if (res != 0)
104 {
105 mcp9600_interface_debug_print("mcp9600: init failed.\n");
106
107 return 1;
108 }
109
110 /* set normal */
111 res = mcp9600_set_mode(&gs_handle, MCP9600_MODE_NORMAL);
112 if (res != 0)
113 {
114 mcp9600_interface_debug_print("mcp9600: set mode failed.\n");
115 (void)mcp9600_deinit(&gs_handle);
116
117 return 1;
118 }
119
120 /* set filter coefficient */
122 if (res != 0)
123 {
124 mcp9600_interface_debug_print("mcp9600: set filter coefficient failed.\n");
125 (void)mcp9600_deinit(&gs_handle);
126
127 return 1;
128 }
129
130 /* set thermocouple type */
131 res = mcp9600_set_thermocouple_type(&gs_handle, type);
132 if (res != 0)
133 {
134 mcp9600_interface_debug_print("mcp9600: set thermocouple type failed.\n");
135 (void)mcp9600_deinit(&gs_handle);
136
137 return 1;
138 }
139
140 /* set cold junction resolution */
142 if (res != 0)
143 {
144 mcp9600_interface_debug_print("mcp9600: set cold junction resolution failed.\n");
145 (void)mcp9600_deinit(&gs_handle);
146
147 return 1;
148 }
149
150 /* set adc resolution */
152 if (res != 0)
153 {
154 mcp9600_interface_debug_print("mcp9600: set adc resolution failed.\n");
155 (void)mcp9600_deinit(&gs_handle);
156
157 return 1;
158 }
159
160 /* set burst mode sample */
162 if (res != 0)
163 {
164 mcp9600_interface_debug_print("mcp9600: set burst mode sample failed.\n");
165 (void)mcp9600_deinit(&gs_handle);
166
167 return 1;
168 }
169
170 /* alert1 limit convert to register */
171 res = mcp9600_alert_limit_convert_to_register(&gs_handle, 30, (int16_t *)&reg);
172 if (res != 0)
173 {
174 mcp9600_interface_debug_print("mcp9600: alert limit convert to register failed.\n");
175 (void)mcp9600_deinit(&gs_handle);
176
177 return 1;
178 }
179
180 /* set alert1 limit */
181 res = mcp9600_set_alert_limit(&gs_handle, MCP9600_ALERT_1, reg);
182 if (res != 0)
183 {
184 mcp9600_interface_debug_print("mcp9600: set alert limit failed.\n");
185 (void)mcp9600_deinit(&gs_handle);
186
187 return 1;
188 }
189
190 /* alert2 limit convert to register */
191 res = mcp9600_alert_limit_convert_to_register(&gs_handle, 31, (int16_t *)&reg);
192 if (res != 0)
193 {
194 mcp9600_interface_debug_print("mcp9600: alert limit convert to register failed.\n");
195 (void)mcp9600_deinit(&gs_handle);
196
197 return 1;
198 }
199
200 /* set alert2 limit */
201 res = mcp9600_set_alert_limit(&gs_handle, MCP9600_ALERT_2, reg);
202 if (res != 0)
203 {
204 mcp9600_interface_debug_print("mcp9600: set alert limit failed.\n");
205 (void)mcp9600_deinit(&gs_handle);
206
207 return 1;
208 }
209
210 /* alert3 limit convert to register */
211 res = mcp9600_alert_limit_convert_to_register(&gs_handle, 32, (int16_t *)&reg);
212 if (res != 0)
213 {
214 mcp9600_interface_debug_print("mcp9600: alert limit convert to register failed.\n");
215 (void)mcp9600_deinit(&gs_handle);
216
217 return 1;
218 }
219
220 /* set alert3 limit */
221 res = mcp9600_set_alert_limit(&gs_handle, MCP9600_ALERT_3, reg);
222 if (res != 0)
223 {
224 mcp9600_interface_debug_print("mcp9600: set alert limit failed.\n");
225 (void)mcp9600_deinit(&gs_handle);
226
227 return 1;
228 }
229
230 /* alert4 limit convert to register */
231 res = mcp9600_alert_limit_convert_to_register(&gs_handle, 33, (int16_t *)&reg);
232 if (res != 0)
233 {
234 mcp9600_interface_debug_print("mcp9600: alert limit convert to register failed.\n");
235 (void)mcp9600_deinit(&gs_handle);
236
237 return 1;
238 }
239
240 /* set alert4 limit */
241 res = mcp9600_set_alert_limit(&gs_handle, MCP9600_ALERT_4, reg);
242 if (res != 0)
243 {
244 mcp9600_interface_debug_print("mcp9600: set alert limit failed.\n");
245 (void)mcp9600_deinit(&gs_handle);
246
247 return 1;
248 }
249
250 /* alert1 hysteresis convert to register */
251 res = mcp9600_alert_hysteresis_convert_to_register(&gs_handle, 31, (uint8_t *)&reg2);
252 if (res != 0)
253 {
254 mcp9600_interface_debug_print("mcp9600: alert hysteresis convert to register failed.\n");
255 (void)mcp9600_deinit(&gs_handle);
256
257 return 1;
258 }
259
260 /* set alert1 hysteresis */
261 res = mcp9600_set_alert_hysteresis(&gs_handle, MCP9600_ALERT_1, reg2);
262 if (res != 0)
263 {
264 mcp9600_interface_debug_print("mcp9600: set alert hysteresis failed.\n");
265 (void)mcp9600_deinit(&gs_handle);
266
267 return 1;
268 }
269
270 /* alert2 hysteresis convert to register */
271 res = mcp9600_alert_hysteresis_convert_to_register(&gs_handle, 32, (uint8_t *)&reg2);
272 if (res != 0)
273 {
274 mcp9600_interface_debug_print("mcp9600: alert hysteresis convert to register failed.\n");
275 (void)mcp9600_deinit(&gs_handle);
276
277 return 1;
278 }
279
280 /* set alert2 hysteresis */
281 res = mcp9600_set_alert_hysteresis(&gs_handle, MCP9600_ALERT_2, reg2);
282 if (res != 0)
283 {
284 mcp9600_interface_debug_print("mcp9600: set alert hysteresis failed.\n");
285 (void)mcp9600_deinit(&gs_handle);
286
287 return 1;
288 }
289
290 /* alert3 hysteresis convert to register */
291 res = mcp9600_alert_hysteresis_convert_to_register(&gs_handle, 33, (uint8_t *)&reg2);
292 if (res != 0)
293 {
294 mcp9600_interface_debug_print("mcp9600: alert hysteresis convert to register failed.\n");
295 (void)mcp9600_deinit(&gs_handle);
296
297 return 1;
298 }
299
300 /* set alert3 hysteresis */
301 res = mcp9600_set_alert_hysteresis(&gs_handle, MCP9600_ALERT_3, reg2);
302 if (res != 0)
303 {
304 mcp9600_interface_debug_print("mcp9600: set alert hysteresis failed.\n");
305 (void)mcp9600_deinit(&gs_handle);
306
307 return 1;
308 }
309
310 /* alert4 hysteresis convert to register */
311 res = mcp9600_alert_hysteresis_convert_to_register(&gs_handle, 34, (uint8_t *)&reg2);
312 if (res != 0)
313 {
314 mcp9600_interface_debug_print("mcp9600: alert hysteresis convert to register failed.\n");
315 (void)mcp9600_deinit(&gs_handle);
316
317 return 1;
318 }
319
320 /* set alert4 hysteresis */
321 res = mcp9600_set_alert_hysteresis(&gs_handle, MCP9600_ALERT_4, reg2);
322 if (res != 0)
323 {
324 mcp9600_interface_debug_print("mcp9600: set alert hysteresis failed.\n");
325 (void)mcp9600_deinit(&gs_handle);
326
327 return 1;
328 }
329
330 /* set alert1 temperature maintain detect */
333 if (res != 0)
334 {
335 mcp9600_interface_debug_print("mcp9600: set temperature maintain detect failed.\n");
336 (void)mcp9600_deinit(&gs_handle);
337
338 return 1;
339 }
340
341 /* set alert2 temperature maintain detect */
344 if (res != 0)
345 {
346 mcp9600_interface_debug_print("mcp9600: set temperature maintain detect failed.\n");
347 (void)mcp9600_deinit(&gs_handle);
348
349 return 1;
350 }
351
352 /* set alert3 temperature maintain detect */
355 if (res != 0)
356 {
357 mcp9600_interface_debug_print("mcp9600: set temperature maintain detect failed.\n");
358 (void)mcp9600_deinit(&gs_handle);
359
360 return 1;
361 }
362
363 /* set alert4 temperature maintain detect */
366 if (res != 0)
367 {
368 mcp9600_interface_debug_print("mcp9600: set temperature maintain detect failed.\n");
369 (void)mcp9600_deinit(&gs_handle);
370
371 return 1;
372 }
373
374 /* set alert1 detect edge */
376 if (res != 0)
377 {
378 mcp9600_interface_debug_print("mcp9600: set detect edge failed.\n");
379 (void)mcp9600_deinit(&gs_handle);
380
381 return 1;
382 }
383
384 /* set alert2 detect edge */
386 if (res != 0)
387 {
388 mcp9600_interface_debug_print("mcp9600: set detect edge failed.\n");
389 (void)mcp9600_deinit(&gs_handle);
390
391 return 1;
392 }
393
394 /* set alert3 detect edge */
396 if (res != 0)
397 {
398 mcp9600_interface_debug_print("mcp9600: set detect edge failed.\n");
399 (void)mcp9600_deinit(&gs_handle);
400
401 return 1;
402 }
403
404 /* set alert4 detect edge */
406 if (res != 0)
407 {
408 mcp9600_interface_debug_print("mcp9600: set detect edge failed.\n");
409 (void)mcp9600_deinit(&gs_handle);
410
411 return 1;
412 }
413
414 /* set alert1 active level */
416 if (res != 0)
417 {
418 mcp9600_interface_debug_print("mcp9600: set active level failed.\n");
419 (void)mcp9600_deinit(&gs_handle);
420
421 return 1;
422 }
423
424 /* set alert2 active level */
426 if (res != 0)
427 {
428 mcp9600_interface_debug_print("mcp9600: set active level failed.\n");
429 (void)mcp9600_deinit(&gs_handle);
430
431 return 1;
432 }
433
434 /* set alert3 active level */
436 if (res != 0)
437 {
438 mcp9600_interface_debug_print("mcp9600: set active level failed.\n");
439 (void)mcp9600_deinit(&gs_handle);
440
441 return 1;
442 }
443
444 /* set alert4 active level */
446 if (res != 0)
447 {
448 mcp9600_interface_debug_print("mcp9600: set active level failed.\n");
449 (void)mcp9600_deinit(&gs_handle);
450
451 return 1;
452 }
453
454 /* set alert1 interrupt mode */
456 if (res != 0)
457 {
458 mcp9600_interface_debug_print("mcp9600: set interrupt mode failed.\n");
459 (void)mcp9600_deinit(&gs_handle);
460
461 return 1;
462 }
463
464 /* set alert2 interrupt mode */
466 if (res != 0)
467 {
468 mcp9600_interface_debug_print("mcp9600: set interrupt mode failed.\n");
469 (void)mcp9600_deinit(&gs_handle);
470
471 return 1;
472 }
473
474 /* set alert3 interrupt mode */
476 if (res != 0)
477 {
478 mcp9600_interface_debug_print("mcp9600: set interrupt mode failed.\n");
479 (void)mcp9600_deinit(&gs_handle);
480
481 return 1;
482 }
483
484 /* set alert4 interrupt mode */
486 if (res != 0)
487 {
488 mcp9600_interface_debug_print("mcp9600: set interrupt mode failed.\n");
489 (void)mcp9600_deinit(&gs_handle);
490
491 return 1;
492 }
493
494 /* set alert1 output */
496 if (res != 0)
497 {
498 mcp9600_interface_debug_print("mcp9600: set alert output failed.\n");
499 (void)mcp9600_deinit(&gs_handle);
500
501 return 1;
502 }
503
504 /* set alert2 output */
506 if (res != 0)
507 {
508 mcp9600_interface_debug_print("mcp9600: set alert output failed.\n");
509 (void)mcp9600_deinit(&gs_handle);
510
511 return 1;
512 }
513
514 /* set alert3 output */
516 if (res != 0)
517 {
518 mcp9600_interface_debug_print("mcp9600: set alert output failed.\n");
519 (void)mcp9600_deinit(&gs_handle);
520
521 return 1;
522 }
523
524 /* set alert4 output */
526 if (res != 0)
527 {
528 mcp9600_interface_debug_print("mcp9600: set alert output failed.\n");
529 (void)mcp9600_deinit(&gs_handle);
530
531 return 1;
532 }
533
534 /* clear alert1 */
535 res = mcp9600_clear_interrupt(&gs_handle, MCP9600_ALERT_1);
536 if (res != 0)
537 {
538 mcp9600_interface_debug_print("mcp9600: clear interrupt failed.\n");
539 (void)mcp9600_deinit(&gs_handle);
540
541 return 1;
542 }
543
544 /* clear alert2 */
545 res = mcp9600_clear_interrupt(&gs_handle, MCP9600_ALERT_2);
546 if (res != 0)
547 {
548 mcp9600_interface_debug_print("mcp9600: clear interrupt failed.\n");
549 (void)mcp9600_deinit(&gs_handle);
550
551 return 1;
552 }
553
554 /* clear alert3 */
555 res = mcp9600_clear_interrupt(&gs_handle, MCP9600_ALERT_3);
556 if (res != 0)
557 {
558 mcp9600_interface_debug_print("mcp9600: clear interrupt failed.\n");
559 (void)mcp9600_deinit(&gs_handle);
560
561 return 1;
562 }
563
564 /* clear alert4 */
565 res = mcp9600_clear_interrupt(&gs_handle, MCP9600_ALERT_4);
566 if (res != 0)
567 {
568 mcp9600_interface_debug_print("mcp9600: clear interrupt failed.\n");
569 (void)mcp9600_deinit(&gs_handle);
570
571 return 1;
572 }
573
574 /* start continuous read */
575 res = mcp9600_start_continuous_read(&gs_handle);
576 if (res != 0)
577 {
578 mcp9600_interface_debug_print("mcp9600: start continuous read failed.\n");
579 (void)mcp9600_deinit(&gs_handle);
580
581 return 1;
582 }
583
584 timeout = 50;
585 while (timeout != 0)
586 {
587 int16_t hot_raw;
588 float hot_s;
589 int16_t delta_raw;
590 float delta_s;
591 int16_t cold_raw;
592 float cold_s;
593
594 /* continuous read */
595 res = mcp9600_continuous_read(&gs_handle, (int16_t *)&hot_raw, (float *)&hot_s,
596 (int16_t *)&delta_raw, (float *)&delta_s,
597 (int16_t *)&cold_raw, (float *)&cold_s);
598 if (res != 0)
599 {
600 mcp9600_interface_debug_print("mcp9600: continuous read failed.\n");
601 (void)mcp9600_deinit(&gs_handle);
602
603 return 1;
604 }
605 mcp9600_interface_debug_print("mcp9600: hot %0.2f delta %0.2f cold %0.2f.\n", hot_s, delta_s, cold_s);
606
607 if (hot_s > 30.0f)
608 {
609 mcp9600_interface_debug_print("mcp9600: find interrupt and please check alert1 - alert4.\n");
610
611 break;
612 }
613
614 /* delay 1000 ms */
616 mcp9600_interface_debug_print("mcp9600: %d/%d.\n", timeout - 1, 50);
617 timeout--;
618 }
619
620 /* stop continuous read */
621 res = mcp9600_stop_continuous_read(&gs_handle);
622 if (res != 0)
623 {
624 mcp9600_interface_debug_print("mcp9600: stop continuous read failed.\n");
625 (void)mcp9600_deinit(&gs_handle);
626
627 return 1;
628 }
629
630 /* check timeout */
631 if (timeout == 0)
632 {
633 mcp9600_interface_debug_print("mcp9600: check timeout.\n");
634 (void)mcp9600_deinit(&gs_handle);
635
636 return 1;
637 }
638
639 /* finish interrupt test */
640 mcp9600_interface_debug_print("mcp9600: finish interrupt test.\n");
641 (void)mcp9600_deinit(&gs_handle);
642
643 return 0;
644}
driver mcp9600 interrupt test header file
uint8_t mcp9600_set_alert_hysteresis(mcp9600_handle_t *handle, mcp9600_alert_t alert, uint8_t reg)
set the alert hysteresis
mcp9600_address_t
mcp9600 address enumeration definition
struct mcp9600_info_s mcp9600_info_t
mcp9600 information structure definition
mcp9600_thermocouple_type_t
mcp9600 thermocouple type enumeration definition
uint8_t mcp9600_set_active_level(mcp9600_handle_t *handle, mcp9600_alert_t alert, mcp9600_active_level_t level)
set the active level
uint8_t mcp9600_set_detect_edge(mcp9600_handle_t *handle, mcp9600_alert_t alert, mcp9600_detect_edge_t edge)
set the detect edge
uint8_t mcp9600_set_cold_junction_resolution(mcp9600_handle_t *handle, mcp9600_cold_junction_resolution_t resolution)
set the cold junction resolution
uint8_t mcp9600_clear_interrupt(mcp9600_handle_t *handle, mcp9600_alert_t alert)
clear the interrupt flag
uint8_t mcp9600_set_alert_limit(mcp9600_handle_t *handle, mcp9600_alert_t alert, int16_t reg)
set the alert limit
uint8_t mcp9600_set_thermocouple_type(mcp9600_handle_t *handle, mcp9600_thermocouple_type_t type)
set the thermocouple type
uint8_t mcp9600_stop_continuous_read(mcp9600_handle_t *handle)
stop reading data
uint8_t mcp9600_set_mode(mcp9600_handle_t *handle, mcp9600_mode_t mode)
set the mode
uint8_t mcp9600_start_continuous_read(mcp9600_handle_t *handle)
start reading data
struct mcp9600_handle_s mcp9600_handle_t
mcp9600 handle structure definition
uint8_t mcp9600_alert_limit_convert_to_register(mcp9600_handle_t *handle, float c, int16_t *reg)
convert the alert limit to the register raw data
uint8_t mcp9600_alert_hysteresis_convert_to_register(mcp9600_handle_t *handle, float c, uint8_t *reg)
convert the alert hysteresis to the register raw data
uint8_t mcp9600_set_alert_output(mcp9600_handle_t *handle, mcp9600_alert_t alert, mcp9600_bool_t enable)
set the alert output
uint8_t mcp9600_set_addr_pin(mcp9600_handle_t *handle, mcp9600_address_t addr_pin)
set the iic address pin
uint8_t mcp9600_set_filter_coefficient(mcp9600_handle_t *handle, mcp9600_filter_coefficient_t coefficient)
set the filter coefficient
uint8_t mcp9600_set_temperature_maintain_detect(mcp9600_handle_t *handle, mcp9600_alert_t alert, mcp9600_temperature_maintain_detect_t maintain_detect)
set the temperature maintain detect
uint8_t mcp9600_set_burst_mode_sample(mcp9600_handle_t *handle, mcp9600_burst_mode_sample_t sample)
set the burst mode sample
uint8_t mcp9600_info(mcp9600_info_t *info)
get chip information
uint8_t mcp9600_set_interrupt_mode(mcp9600_handle_t *handle, mcp9600_alert_t alert, mcp9600_interrupt_mode_t mode)
set the interrupt mode
uint8_t mcp9600_deinit(mcp9600_handle_t *handle)
close the chip
uint8_t mcp9600_set_adc_resolution(mcp9600_handle_t *handle, mcp9600_adc_resolution_t resolution)
set the adc resolution
uint8_t mcp9600_continuous_read(mcp9600_handle_t *handle, int16_t *hot_raw, float *hot_s, int16_t *delta_raw, float *delta_s, int16_t *cold_raw, float *cold_s)
read data continuously
uint8_t mcp9600_init(mcp9600_handle_t *handle)
initialize the chip
@ MCP9600_ACTIVE_LEVEL_LOW
@ MCP9600_MODE_NORMAL
@ MCP9600_COLD_JUNCTION_RESOLUTION_0P0625
@ MCP9600_FILTER_COEFFICIENT_0
@ MCP9600_ADC_RESOLUTION_18_BIT
@ MCP9600_BURST_MODE_SAMPLE_1
@ MCP9600_INTERRUPT_MODE_COMPARATOR
@ MCP9600_ALERT_2
@ MCP9600_ALERT_3
@ MCP9600_ALERT_1
@ MCP9600_ALERT_4
@ MCP9600_BOOL_TRUE
@ MCP9600_TEMPERATURE_MAINTAIN_DETECT_HOT_JUNCTION
@ MCP9600_DETECT_EDGE_FALLING
uint8_t mcp9600_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mcp9600_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write command
void mcp9600_interface_debug_print(const char *const fmt,...)
interface print format data
void mcp9600_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mcp9600_interface_iic_init(void)
interface iic bus init
uint8_t mcp9600_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read command
uint8_t mcp9600_interrupt_test(mcp9600_address_t addr_pin, mcp9600_thermocouple_type_t type)
interrupt test
uint32_t driver_version
char manufacturer_name[32]