60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#include <Wire.h>
|
|
#include <MCP3424.h>
|
|
#include <math.h>
|
|
|
|
MCP3424 adc(0x68);
|
|
|
|
void setup() {
|
|
|
|
SerialUSB.begin(57600);
|
|
|
|
Wire.begin();
|
|
|
|
adc.generalCall(GC_RESET);
|
|
}
|
|
|
|
void show_v(double& value, _ConfReg r) {
|
|
|
|
char v[24], buff[48];
|
|
|
|
dtostrf(value,8,8,v);
|
|
sprintf(buff, "channel: %d, gain: %d, value: %s", r.ch, 1 << r.pga, v);
|
|
SerialUSB.println(buff);
|
|
}
|
|
|
|
double value;
|
|
|
|
void loop() {
|
|
|
|
for (int i = (int)CH1; i <= (int)CH4; i++) {
|
|
_ConfReg& c = adc.creg[(Channel)i];
|
|
c.bits = { GAINx1, SR12B, ONE_SHOT, (Channel)i, 1 };
|
|
ConvStatus err = adc.read(c.ch, value);
|
|
//while (err != R_OK) ConvStatus err = adc.read(c.ch, value);
|
|
if (err == R_OK) {
|
|
show_v(value, c);
|
|
c.srate = SR18B;
|
|
c.pga = adc.findGain(value);
|
|
err = adc.read(c.ch, value);
|
|
if (err == R_OK) {
|
|
show_v(value, c);
|
|
SerialUSB.println();
|
|
} else
|
|
SerialUSB.println(" error.");
|
|
} else {
|
|
SerialUSB.print("conversion error: ");
|
|
SerialUSB.println(err);
|
|
}
|
|
}
|
|
asm volatile ("nop");
|
|
}
|
|
|
|
char *dtostrf (double val, signed char width, unsigned char prec, char *sout) {
|
|
asm(".global _printf_float");
|
|
|
|
char fmt[20];
|
|
sprintf(fmt, "%%%d.%df", width, prec);
|
|
sprintf(sout, fmt, val);
|
|
return sout;
|
|
}
|