Skip to content

Commit e000605

Browse files
committed
feat: add comparator config functions
1 parent d974498 commit e000605

File tree

2 files changed

+316
-0
lines changed

2 files changed

+316
-0
lines changed

ADS1x1x.c

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,9 +455,210 @@ ADS1x1x_SetMux(ADS1x1x_Handler_t *Handler, ADS1x1x_Mux_t Mux)
455455
if (ADS1x1x_WriteConfigurationRegister(Handler, ConfigReg) < 0)
456456
return ADS1X1X_FAIL;
457457

458+
return ADS1X1X_OK;
459+
}
460+
461+
/**
462+
* @brief Set Comparator mode
463+
* @param Handler: Pointer to handler
464+
* @param CompMode: Specify Comparator mode
465+
* @retval ADS1x1x_Result_t
466+
* - ADS1X1X_OK: Operation was successful.
467+
* - ADS1X1X_FAIL: Failed to send or receive data.
468+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
469+
*/
470+
ADS1x1x_Result_t
471+
ADS1x1x_SetCompMode(ADS1x1x_Handler_t *Handler, ADS1x1x_CompMode_t CompMode)
472+
{
473+
uint16_t ConfigReg = 0;
474+
458475
if (ADS1x1x_ReadConfigurationRegister(Handler, &ConfigReg) < 0)
459476
return ADS1X1X_FAIL;
460477

478+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_OS);
479+
switch (CompMode)
480+
{
481+
case ADS1X1X_COMP_MODE_TRADITIONAL:
482+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_MODE);
483+
break;
484+
485+
case ADS1X1X_COMP_MODE_WINDOW:
486+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_MODE);
487+
break;
488+
489+
default:
490+
return ADS1X1X_INVALID_PARAM;
491+
break;
492+
}
493+
494+
if (ADS1x1x_WriteConfigurationRegister(Handler, ConfigReg) < 0)
495+
return ADS1X1X_FAIL;
496+
497+
return ADS1X1X_OK;
498+
}
499+
500+
/**
501+
* @brief Set Comparator polarity
502+
* @param Handler: Pointer to handler
503+
* @param CompPol: Specify Comparator polarity
504+
* @retval ADS1x1x_Result_t
505+
* - ADS1X1X_OK: Operation was successful.
506+
* - ADS1X1X_FAIL: Failed to send or receive data.
507+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
508+
*/
509+
ADS1x1x_Result_t
510+
ADS1x1x_SetCompPol(ADS1x1x_Handler_t *Handler, ADS1x1x_CompPol_t CompPol)
511+
{
512+
uint16_t ConfigReg = 0;
513+
514+
if (ADS1x1x_ReadConfigurationRegister(Handler, &ConfigReg) < 0)
515+
return ADS1X1X_FAIL;
516+
517+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_OS);
518+
switch (CompPol)
519+
{
520+
case ADS1X1X_COMP_POL_LOW:
521+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_POL);
522+
break;
523+
524+
case ADS1X1X_COMP_POL_HIGH:
525+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_POL);
526+
break;
527+
528+
default:
529+
return ADS1X1X_INVALID_PARAM;
530+
break;
531+
}
532+
533+
if (ADS1x1x_WriteConfigurationRegister(Handler, ConfigReg) < 0)
534+
return ADS1X1X_FAIL;
535+
536+
return ADS1X1X_OK;
537+
}
538+
539+
/**
540+
* @brief Set Comparator latch
541+
* @param Handler: Pointer to handler
542+
* @param CompLat: Specify Comparator latch
543+
* @retval ADS1x1x_Result_t
544+
* - ADS1X1X_OK: Operation was successful.
545+
* - ADS1X1X_FAIL: Failed to send or receive data.
546+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
547+
*/
548+
ADS1x1x_Result_t
549+
ADS1x1x_SetCompLat(ADS1x1x_Handler_t *Handler, ADS1x1x_CompLat_t CompLat)
550+
{
551+
uint16_t ConfigReg = 0;
552+
553+
if (ADS1x1x_ReadConfigurationRegister(Handler, &ConfigReg) < 0)
554+
return ADS1X1X_FAIL;
555+
556+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_OS);
557+
switch (CompLat)
558+
{
559+
case ADS1X1X_COMP_LAT_NON_LATCHING:
560+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_LAT);
561+
break;
562+
563+
case ADS1X1X_COMP_LAT_LATCHING:
564+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_LAT);
565+
break;
566+
567+
default:
568+
return ADS1X1X_INVALID_PARAM;
569+
break;
570+
}
571+
572+
if (ADS1x1x_WriteConfigurationRegister(Handler, ConfigReg) < 0)
573+
return ADS1X1X_FAIL;
574+
575+
return ADS1X1X_OK;
576+
}
577+
578+
/**
579+
* @brief Set Comparator queue
580+
* @param Handler: Pointer to handler
581+
* @param CompQue: Specify Comparator queue
582+
* @retval ADS1x1x_Result_t
583+
* - ADS1X1X_OK: Operation was successful.
584+
* - ADS1X1X_FAIL: Failed to send or receive data.
585+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
586+
*/
587+
ADS1x1x_Result_t
588+
ADS1x1x_SetCompQue(ADS1x1x_Handler_t *Handler, ADS1x1x_CompQue_t CompQue)
589+
{
590+
uint16_t ConfigReg = 0;
591+
592+
if (ADS1x1x_ReadConfigurationRegister(Handler, &ConfigReg) < 0)
593+
return ADS1X1X_FAIL;
594+
595+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_OS);
596+
switch (CompQue)
597+
{
598+
case ADS1X1X_COMP_QUE_ASSERT_1:
599+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_QUE1);
600+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_QUE0);
601+
break;
602+
603+
case ADS1X1X_COMP_QUE_ASSERT_2:
604+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_QUE1);
605+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_QUE0);
606+
break;
607+
608+
case ADS1X1X_COMP_QUE_ASSERT_4:
609+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_QUE1);
610+
ConfigReg &= ~(1 << ADS1X1X_CONFIG_REG_COMP_QUE0);
611+
break;
612+
613+
case ADS1X1X_COMP_QUE_DISABLE:
614+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_QUE1);
615+
ConfigReg |= (1 << ADS1X1X_CONFIG_REG_COMP_QUE0);
616+
break;
617+
618+
default:
619+
return ADS1X1X_INVALID_PARAM;
620+
break;
621+
}
622+
623+
if (ADS1x1x_WriteConfigurationRegister(Handler, ConfigReg) < 0)
624+
return ADS1X1X_FAIL;
625+
626+
return ADS1X1X_OK;
627+
}
628+
629+
/**
630+
* @brief Set Lo-Threshold
631+
* @param Handler: Pointer to handler
632+
* @param Threshold: Specify Lo-Threshold
633+
* @retval ADS1x1x_Result_t
634+
* - ADS1X1X_OK: Operation was successful.
635+
* - ADS1X1X_FAIL: Failed to send or receive data.
636+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
637+
*/
638+
ADS1x1x_Result_t
639+
ADS1x1x_SetLoThresh(ADS1x1x_Handler_t *Handler, int16_t Threshold)
640+
{
641+
if (ADS1x1x_WriteReg(Handler, ADS1X1X_REG_ADDR_LO_THRESH, (uint16_t)Threshold) < 0)
642+
return ADS1X1X_FAIL;
643+
644+
return ADS1X1X_OK;
645+
}
646+
647+
/**
648+
* @brief Set Hi-Threshold
649+
* @param Handler: Pointer to handler
650+
* @param Threshold: Specify Hi-Threshold
651+
* @retval ADS1x1x_Result_t
652+
* - ADS1X1X_OK: Operation was successful.
653+
* - ADS1X1X_FAIL: Failed to send or receive data.
654+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
655+
*/
656+
ADS1x1x_Result_t
657+
ADS1x1x_SetHiThresh(ADS1x1x_Handler_t *Handler, int16_t Threshold)
658+
{
659+
if (ADS1x1x_WriteReg(Handler, ADS1X1X_REG_ADDR_HI_THRESH, (uint16_t)Threshold) < 0)
660+
return ADS1X1X_FAIL;
661+
461662
return ADS1X1X_OK;
462663
}
463664

ADS1x1x.h

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,43 @@ typedef enum ADS1x1x_Rate_e
119119
ADS1X1X_RATE_860SPS = 7
120120
} ADS1x1x_Rate_t;
121121

122+
/**
123+
* @brief Comparator mode
124+
*/
125+
typedef enum ADS1x1x_CompMode_e
126+
{
127+
ADS1X1X_COMP_MODE_TRADITIONAL = 0,
128+
ADS1X1X_COMP_MODE_WINDOW = 1
129+
} ADS1x1x_CompMode_t;
130+
131+
/**
132+
* @brief Comparator polarity
133+
*/
134+
typedef enum ADS1x1x_CompPol_e
135+
{
136+
ADS1X1X_COMP_POL_LOW = 0,
137+
ADS1X1X_COMP_POL_HIGH = 1
138+
} ADS1x1x_CompPol_t;
139+
140+
/**
141+
* @brief Comparator latch
142+
*/
143+
typedef enum ADS1x1x_CompLat_e
144+
{
145+
ADS1X1X_COMP_LAT_NON_LATCHING = 0,
146+
ADS1X1X_COMP_LAT_LATCHING = 1
147+
} ADS1x1x_CompLat_t;
148+
149+
/**
150+
* @brief Comparator queue
151+
*/
152+
typedef enum ADS1x1x_CompQue_e
153+
{
154+
ADS1X1X_COMP_QUE_ASSERT_1 = 0,
155+
ADS1X1X_COMP_QUE_ASSERT_2 = 1,
156+
ADS1X1X_COMP_QUE_ASSERT_4 = 2,
157+
ADS1X1X_COMP_QUE_DISABLE = 3
158+
} ADS1x1x_CompQue_t;
122159

123160

124161
/**
@@ -309,6 +346,84 @@ ADS1x1x_Result_t
309346
ADS1x1x_SetMux(ADS1x1x_Handler_t *Handler, ADS1x1x_Mux_t Mux);
310347

311348

349+
/**
350+
* @brief Set Comparator mode
351+
* @param Handler: Pointer to handler
352+
* @param CompMode: Specify Comparator mode
353+
* @retval ADS1x1x_Result_t
354+
* - ADS1X1X_OK: Operation was successful.
355+
* - ADS1X1X_FAIL: Failed to send or receive data.
356+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
357+
*/
358+
ADS1x1x_Result_t
359+
ADS1x1x_SetCompMode(ADS1x1x_Handler_t *Handler, ADS1x1x_CompMode_t CompMode);
360+
361+
362+
/**
363+
* @brief Set Comparator polarity
364+
* @param Handler: Pointer to handler
365+
* @param CompPol: Specify Comparator polarity
366+
* @retval ADS1x1x_Result_t
367+
* - ADS1X1X_OK: Operation was successful.
368+
* - ADS1X1X_FAIL: Failed to send or receive data.
369+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
370+
*/
371+
ADS1x1x_Result_t
372+
ADS1x1x_SetCompPol(ADS1x1x_Handler_t *Handler, ADS1x1x_CompPol_t CompPol);
373+
374+
375+
/**
376+
* @brief Set Comparator latch
377+
* @param Handler: Pointer to handler
378+
* @param CompLat: Specify Comparator latch
379+
* @retval ADS1x1x_Result_t
380+
* - ADS1X1X_OK: Operation was successful.
381+
* - ADS1X1X_FAIL: Failed to send or receive data.
382+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
383+
*/
384+
ADS1x1x_Result_t
385+
ADS1x1x_SetCompLat(ADS1x1x_Handler_t *Handler, ADS1x1x_CompLat_t CompLat);
386+
387+
388+
/**
389+
* @brief Set Comparator queue
390+
* @param Handler: Pointer to handler
391+
* @param CompQue: Specify Comparator queue
392+
* @retval ADS1x1x_Result_t
393+
* - ADS1X1X_OK: Operation was successful.
394+
* - ADS1X1X_FAIL: Failed to send or receive data.
395+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
396+
*/
397+
ADS1x1x_Result_t
398+
ADS1x1x_SetCompQue(ADS1x1x_Handler_t *Handler, ADS1x1x_CompQue_t CompQue);
399+
400+
401+
/**
402+
* @brief Set Lo-Threshold
403+
* @param Handler: Pointer to handler
404+
* @param Threshold: Specify Lo-Threshold
405+
* @retval ADS1x1x_Result_t
406+
* - ADS1X1X_OK: Operation was successful.
407+
* - ADS1X1X_FAIL: Failed to send or receive data.
408+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
409+
*/
410+
ADS1x1x_Result_t
411+
ADS1x1x_SetLoThresh(ADS1x1x_Handler_t *Handler, int16_t Threshold);
412+
413+
414+
/**
415+
* @brief Set Hi-Threshold
416+
* @param Handler: Pointer to handler
417+
* @param Threshold: Specify Hi-Threshold
418+
* @retval ADS1x1x_Result_t
419+
* - ADS1X1X_OK: Operation was successful.
420+
* - ADS1X1X_FAIL: Failed to send or receive data.
421+
* - ADS1X1X_INVALID_PARAM: One of parameters is invalid.
422+
*/
423+
ADS1x1x_Result_t
424+
ADS1x1x_SetHiThresh(ADS1x1x_Handler_t *Handler, int16_t Threshold);
425+
426+
312427
/**
313428
* @brief Start conversion (single shot)
314429
* @param Handler: Pointer to handler

0 commit comments

Comments
 (0)