SI114X.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #ifndef _SI114X_H_
  2. #define _SI114X_H_
  3. #include "Arduino.h"
  4. /* ------------------------------------------------------//
  5. Registers,Parameters and commands
  6. */
  7. //
  8. //commands
  9. //
  10. #define SI114X_QUERY 0X80
  11. #define SI114X_SET 0XA0
  12. #define SI114X_NOP 0X0
  13. #define SI114X_RESET 0X01
  14. #define SI114X_BUSADDR 0X02
  15. #define SI114X_PS_FORCE 0X05
  16. #define SI114X_GET_CAL 0X12
  17. #define SI114X_ALS_FORCE 0X06
  18. #define SI114X_PSALS_FORCE 0X07
  19. #define SI114X_PS_PAUSE 0X09
  20. #define SI114X_ALS_PAUSE 0X0A
  21. #define SI114X_PSALS_PAUSE 0XB
  22. #define SI114X_PS_AUTO 0X0D
  23. #define SI114X_ALS_AUTO 0X0E
  24. #define SI114X_PSALS_AUTO 0X0F
  25. //
  26. //IIC REGISTERS
  27. //
  28. #define SI114X_PART_ID 0X00
  29. #define SI114X_REV_ID 0X01
  30. #define SI114X_SEQ_ID 0X02
  31. #define SI114X_INT_CFG 0X03
  32. #define SI114X_IRQ_ENABLE 0X04
  33. #define SI114X_IRQ_MODE1 0x05
  34. #define SI114X_IRQ_MODE2 0x06
  35. #define SI114X_HW_KEY 0X07
  36. #define SI114X_MEAS_RATE0 0X08
  37. #define SI114X_MEAS_RATE1 0X09
  38. #define SI114X_PS_RATE 0X0A
  39. #define SI114X_PS_LED21 0X0F
  40. #define SI114X_PS_LED3 0X10
  41. #define SI114X_UCOEFF0 0X13
  42. #define SI114X_UCOEFF1 0X14
  43. #define SI114X_UCOEFF2 0X15
  44. #define SI114X_UCOEFF3 0X16
  45. #define SI114X_WR 0X17
  46. #define SI114X_COMMAND 0X18
  47. #define SI114X_RESPONSE 0X20
  48. #define SI114X_IRQ_STATUS 0X21
  49. #define SI114X_ALS_VIS_DATA0 0X22
  50. #define SI114X_ALS_VIS_DATA1 0X23
  51. #define SI114X_ALS_IR_DATA0 0X24
  52. #define SI114X_ALS_IR_DATA1 0X25
  53. #define SI114X_PS1_DATA0 0X26
  54. #define SI114X_PS1_DATA1 0X27
  55. #define SI114X_PS2_DATA0 0X28
  56. #define SI114X_PS2_DATA1 0X29
  57. #define SI114X_PS3_DATA0 0X2A
  58. #define SI114X_PS3_DATA1 0X2B
  59. #define SI114X_AUX_DATA0_UVINDEX0 0X2C
  60. #define SI114X_AUX_DATA1_UVINDEX1 0X2D
  61. #define SI114X_RD 0X2E
  62. #define SI114X_CHIP_STAT 0X30
  63. //
  64. //Parameters
  65. //
  66. #define SI114X_I2C_ADDR 0X00
  67. #define SI114X_CHLIST 0X01
  68. #define SI114X_CHLIST_ENUV 0x80
  69. #define SI114X_CHLIST_ENAUX 0x40
  70. #define SI114X_CHLIST_ENALSIR 0x20
  71. #define SI114X_CHLIST_ENALSVIS 0x10
  72. #define SI114X_CHLIST_ENPS1 0x01
  73. #define SI114X_CHLIST_ENPS2 0x02
  74. #define SI114X_CHLIST_ENPS3 0x04
  75. #define SI114X_PSLED12_SELECT 0X02
  76. #define SI114X_PSLED3_SELECT 0X03
  77. #define SI114X_PS_ENCODE 0X05
  78. #define SI114X_ALS_ENCODE 0X06
  79. #define SI114X_PS1_ADCMUX 0X07
  80. #define SI114X_PS2_ADCMUX 0X08
  81. #define SI114X_PS3_ADCMUX 0X09
  82. #define SI114X_PS_ADC_COUNTER 0X0A
  83. #define SI114X_PS_ADC_GAIN 0X0B
  84. #define SI114X_PS_ADC_MISC 0X0C
  85. #define SI114X_ALS_IR_ADC_MUX 0X0E
  86. #define SI114X_AUX_ADC_MUX 0X0F
  87. #define SI114X_ALS_VIS_ADC_COUNTER 0X10
  88. #define SI114X_ALS_VIS_ADC_GAIN 0X11
  89. #define SI114X_ALS_VIS_ADC_MISC 0X12
  90. #define SI114X_LED_REC 0X1C
  91. #define SI114X_ALS_IR_ADC_COUNTER 0X1D
  92. #define SI114X_ALS_IR_ADC_GAIN 0X1E
  93. #define SI114X_ALS_IR_ADC_MISC 0X1F
  94. //
  95. //USER SETTINGS DEFINE
  96. //
  97. //ADCMUX
  98. #define SI114X_ADCMUX_SMALL_IR 0x00
  99. #define SI114X_ADCMUX_VISIABLE 0x02
  100. #define SI114X_ADCMUX_LARGE_IR 0x03
  101. #define SI114X_ADCMUX_NO 0x06
  102. #define SI114X_ADCMUX_GND 0x25
  103. #define SI114X_ADCMUX_TEMPERATURE 0x65
  104. #define SI114X_ADCMUX_VDD 0x75
  105. //LED SEL
  106. #define SI114X_PSLED12_SELECT_PS1_NONE 0x00
  107. #define SI114X_PSLED12_SELECT_PS1_LED1 0x01
  108. #define SI114X_PSLED12_SELECT_PS1_LED2 0x02
  109. #define SI114X_PSLED12_SELECT_PS1_LED3 0x04
  110. #define SI114X_PSLED12_SELECT_PS2_NONE 0x00
  111. #define SI114X_PSLED12_SELECT_PS2_LED1 0x10
  112. #define SI114X_PSLED12_SELECT_PS2_LED2 0x20
  113. #define SI114X_PSLED12_SELECT_PS2_LED3 0x40
  114. #define SI114X_PSLED3_SELECT_PS2_NONE 0x00
  115. #define SI114X_PSLED3_SELECT_PS2_LED1 0x10
  116. #define SI114X_PSLED3_SELECT_PS2_LED2 0x20
  117. #define SI114X_PSLED3_SELECT_PS2_LED3 0x40
  118. //ADC GAIN DIV
  119. #define SI114X_ADC_GAIN_DIV1 0X00
  120. #define SI114X_ADC_GAIN_DIV2 0X01
  121. #define SI114X_ADC_GAIN_DIV4 0X02
  122. #define SI114X_ADC_GAIN_DIV8 0X03
  123. #define SI114X_ADC_GAIN_DIV16 0X04
  124. #define SI114X_ADC_GAIN_DIV32 0X05
  125. //LED CURRENT
  126. #define SI114X_LED_CURRENT_5MA 0X01
  127. #define SI114X_LED_CURRENT_11MA 0X02
  128. #define SI114X_LED_CURRENT_22MA 0X03
  129. #define SI114X_LED_CURRENT_45MA 0X04
  130. //Recovery period the ADC takes before making a PS measurement
  131. #define SI114X_ADC_COUNTER_1ADCCLK 0X00
  132. #define SI114X_ADC_COUNTER_7ADCCLK 0X01
  133. #define SI114X_ADC_COUNTER_15ADCCLK 0X02
  134. #define SI114X_ADC_COUNTER_31ADCCLK 0X03
  135. #define SI114X_ADC_COUNTER_63ADCCLK 0X04
  136. #define SI114X_ADC_COUNTER_127ADCCLK 0X05
  137. #define SI114X_ADC_COUNTER_255ADCCLK 0X06
  138. #define SI114X_ADC_COUNTER_511ADCCLK 0X07
  139. //ADC MISC
  140. #define SI114X_ADC_MISC_LOWRANGE 0X00
  141. #define SI114X_ADC_MISC_HIGHRANGE 0X20
  142. #define SI114X_ADC_MISC_ADC_NORMALPROXIMITY 0X00
  143. #define SI114X_ADC_MISC_ADC_RAWADC 0X04
  144. //INT OE
  145. #define SI114X_INT_CFG_INTOE 0X01
  146. //IRQ ENABLE
  147. #define SI114X_IRQEN_ALS 0x01
  148. #define SI114X_IRQEN_PS1 0x04
  149. #define SI114X_IRQEN_PS2 0x08
  150. #define SI114X_IRQEN_PS3 0x10
  151. #define SI114X_ADDR 0X60
  152. class SI114X {
  153. public:
  154. bool Begin(void);
  155. void Reset(void);
  156. void DeInit(void);
  157. uint8_t ReadParamData(uint8_t Reg);
  158. uint8_t WriteParamData(uint8_t Reg, uint8_t Value);
  159. uint16_t ReadVisible(void);
  160. uint16_t ReadIR(void);
  161. uint16_t ReadProximity(uint8_t PSn);
  162. uint16_t ReadUV(void);
  163. private:
  164. void WriteByte(uint8_t Reg, uint8_t Value);
  165. uint8_t ReadByte(uint8_t Reg);
  166. uint16_t ReadHalfWord(uint8_t Reg);
  167. };
  168. #endif