@@ -43,7 +43,7 @@ FDC2214::FDC2214(uint8_t i2caddr) {
43
43
}
44
44
45
45
// Checking for chip ID, if OK, calls chip init
46
- boolean FDC2214::begin (uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglitchValue) {
46
+ boolean FDC2214::begin (uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglitchValue, bool intOsc ) {
47
47
Wire.begin ();
48
48
49
49
int devId = read16FDC (FDC2214_DEVICE_ID);
@@ -54,15 +54,15 @@ boolean FDC2214::begin(uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglitchVa
54
54
}
55
55
}
56
56
57
- loadSettings (chanMask, autoscanSeq, deglitchValue);
57
+ loadSettings (chanMask, autoscanSeq, deglitchValue, intOsc );
58
58
// setGain();
59
59
60
60
return true ;
61
61
}
62
62
63
63
64
64
// Internal routine to do actual chip init
65
- void FDC2214::loadSettings (uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglitchValue) {
65
+ void FDC2214::loadSettings (uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglitchValue, bool intOsc ) {
66
66
67
67
// Configuration register
68
68
// Active channel Select: b00 = ch0; b01 = ch1; b10 = ch2; b11 = ch3;
@@ -74,11 +74,15 @@ void FDC2214::loadSettings(uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglit
74
74
// ||||||Reserved, set to 0
75
75
// |||||||Disable interrupt. 0 - interrupt output on INTB pin; 1 - no interrupt output
76
76
// ||||||||High current sensor mode: 0 - 1.5mA max. 1 - > 1.5mA, not available if Autoscan is enabled
77
- // ||||||||| Reserved, set to 000001
78
- // ||||||||| |
79
- // CCS1A1R0IH000000 -> 0001 1110 1000 0001 -> 0x1E81
80
- write16FDC (FDC2214_CONFIG, 0x1E81 ); // set config
81
-
77
+ // ||||||||| Reserved, set to 000001
78
+ // ||||||||| |
79
+ // CCS1A1R0IH000000 -> 0001 1110 1000 0001 -> 0x1E81 ExtOsc
80
+ // CCS1A1R0IH000000 -> 0001 1100 1000 0001 -> 0x1C81 IntOsc
81
+ if (intOsc) {
82
+ write16FDC (FDC2214_CONFIG, 0x1C81 ); // set config
83
+ } else {
84
+ write16FDC (FDC2214_CONFIG, 0x1E81 ); // set config
85
+ }
82
86
// If channel 1 selected, init it..
83
87
if (chanMask & 0x01 ) {
84
88
@@ -111,21 +115,21 @@ void FDC2214::loadSettings(uint8_t chanMask, uint8_t autoscanSeq, uint8_t deglit
111
115
write16FDC (FDC2214_DRIVE_CH1, 0xF800 );
112
116
}
113
117
if (chanMask & 0x04 ) {
114
- write16FDC (FDC2214_SETTLECOUNT_CH1 , 0x64 );
115
- write16FDC (FDC2214_RCOUNT_CH1 , 0xFFFF );
116
- write16FDC (FDC2214_OFFSET_CH1 , 0x0000 );
117
- write16FDC (FDC2214_CLOCK_DIVIDERS_CH1 , 0x2001 );
118
- write16FDC (FDC2214_DRIVE_CH1 , 0xF800 );
118
+ write16FDC (FDC2214_SETTLECOUNT_CH2 , 0x64 );
119
+ write16FDC (FDC2214_RCOUNT_CH2 , 0xFFFF );
120
+ write16FDC (FDC2214_OFFSET_CH2 , 0x0000 );
121
+ write16FDC (FDC2214_CLOCK_DIVIDERS_CH2 , 0x2001 );
122
+ write16FDC (FDC2214_DRIVE_CH2 , 0xF800 );
119
123
}
120
124
if (chanMask & 0x08 ) {
121
- write16FDC (FDC2214_SETTLECOUNT_CH1 , 0x64 );
122
- write16FDC (FDC2214_RCOUNT_CH1 , 0xFFFF );
123
- write16FDC (FDC2214_OFFSET_CH1 , 0x0000 );
124
- write16FDC (FDC2214_CLOCK_DIVIDERS_CH1 , 0x2001 );
125
- write16FDC (FDC2214_DRIVE_CH1 , 0xF800 );
125
+ write16FDC (FDC2214_SETTLECOUNT_CH3 , 0x64 );
126
+ write16FDC (FDC2214_RCOUNT_CH3 , 0xFFFF );
127
+ write16FDC (FDC2214_OFFSET_CH3 , 0x0000 );
128
+ write16FDC (FDC2214_CLOCK_DIVIDERS_CH3 , 0x2001 );
129
+ write16FDC (FDC2214_DRIVE_CH3 , 0xF800 );
126
130
}
127
131
// Autoscan: 0 = single channel, selected by CONFIG.ACTIVE_CHAN
128
- // | Autoscan sequence. b00 for chan 1-2, b01 for chan 1-2-3, b02 for chan 1-2-3-4
132
+ // | Autoscan sequence. b00 for chan 1-2, b01 for chan 1-2-3, b10 for chan 1-2-3-4
129
133
// | | Reserved - must be b0001000001
130
134
// | | | Deglitch frequency. b001 for 1 MHz, b100 for 3.3 MHz, b101 for 10 Mhz, b111 for 33 MHz
131
135
// | | | |
@@ -202,19 +206,19 @@ unsigned long FDC2214::getReading28(uint8_t channel) {
202
206
bitUnreadConv = FDC2214_CH1_UNREADCONV;
203
207
break ;
204
208
case (2 ):
205
- addressMSB = FDC2214_DATA_CH1_MSB ;
206
- addressLSB = FDC2214_DATA_CH1_LSB ;
207
- bitUnreadConv = FDC2214_CH1_UNREADCONV ;
209
+ addressMSB = FDC2214_DATA_CH2_MSB ;
210
+ addressLSB = FDC2214_DATA_CH2_LSB ;
211
+ bitUnreadConv = FDC2214_CH2_UNREADCONV ;
208
212
break ;
209
213
case (3 ):
210
- addressMSB = FDC2214_DATA_CH1_MSB ;
211
- addressLSB = FDC2214_DATA_CH1_LSB ;
212
- bitUnreadConv = FDC2214_CH1_UNREADCONV ;
214
+ addressMSB = FDC2214_DATA_CH3_MSB ;
215
+ addressLSB = FDC2214_DATA_CH3_LSB ;
216
+ bitUnreadConv = FDC2214_CH3_UNREADCONV ;
213
217
break ;
214
218
default : return 0 ;
215
219
}
216
220
217
- while (timeout && !(status & FDC2214_CH0_UNREADCONV )) {
221
+ while (timeout && !(status & bitUnreadConv )) {
218
222
status = read16FDC (FDC2214_STATUS);
219
223
timeout--;
220
224
}
@@ -231,7 +235,7 @@ unsigned long FDC2214::getReading28(uint8_t channel) {
231
235
// read the 28 bit result
232
236
reading = (uint32_t )(read16FDC (addressMSB) & FDC2214_DATA_CHx_MASK_DATA) << 16 ;
233
237
reading |= read16FDC (addressLSB);
234
- while (timeout && !(status & FDC2214_CH0_UNREADCONV )) {
238
+ while (timeout && !(status & bitUnreadConv )) {
235
239
status = read16FDC (FDC2214_STATUS);
236
240
timeout--;
237
241
}
@@ -266,17 +270,17 @@ unsigned long FDC2214::getReading16(uint8_t channel) {
266
270
bitUnreadConv = FDC2214_CH1_UNREADCONV;
267
271
break ;
268
272
case (2 ):
269
- addressMSB = FDC2214_DATA_CH1_MSB ;
270
- bitUnreadConv = FDC2214_CH1_UNREADCONV ;
273
+ addressMSB = FDC2214_DATA_CH2_MSB ;
274
+ bitUnreadConv = FDC2214_CH2_UNREADCONV ;
271
275
break ;
272
276
case (3 ):
273
- addressMSB = FDC2214_DATA_CH1_MSB ;
274
- bitUnreadConv = FDC2214_CH1_UNREADCONV ;
277
+ addressMSB = FDC2214_DATA_CH3_MSB ;
278
+ bitUnreadConv = FDC2214_CH3_UNREADCONV ;
275
279
break ;
276
280
default : return 0 ;
277
281
}
278
282
279
- while (timeout && !(status & FDC2214_CH0_UNREADCONV )) {
283
+ while (timeout && !(status & bitUnreadConv )) {
280
284
status = read16FDC (FDC2214_STATUS);
281
285
timeout--;
282
286
}
@@ -292,7 +296,7 @@ unsigned long FDC2214::getReading16(uint8_t channel) {
292
296
// could be stale grab another //could it really it? ?????
293
297
// read the 28 bit result
294
298
reading = (uint32_t )(read16FDC (addressMSB) & FDC2214_DATA_CHx_MASK_DATA) << 16 ;
295
- while (timeout && !(status & FDC2214_CH0_UNREADCONV )) {
299
+ while (timeout && !(status & bitUnreadConv )) {
296
300
status = read16FDC (FDC2214_STATUS);
297
301
timeout--;
298
302
}
0 commit comments