1
+ /*
2
+ Using the differential ADC
3
+ By: Nathan Seidle
4
+ SparkFun Electronics
5
+ Date: July 17th, 2020
6
+ License: This code is public domain. Based on deepsleep.c from Ambiq SDK v2.2.0.
7
+
8
+ There are two differential ADC ports on the Artemis. These are located
9
+ on pads 12/13 (DIFF0N/DIFF0P) and 14/15 (DIFF1P/DIFF10).
10
+
11
+ A differential ADC port measures -1.0V to 1.0V with
12
+ 0 = -1.0V, 8192 = 0V, and 16383 = 1.0V when the ADC is in 14-bit mode.
13
+
14
+ SparkFun labored with love to create this code. Feel like supporting open source hardware?
15
+ Buy a board from SparkFun! https://www.sparkfun.com/products/15376
16
+ */
17
+
18
+ #define ANALOG_RESOLUTION 14 // Artemis has 14 bit ADC but can range from 8 to 14 bit
19
+
20
+ int maxADCValue = pow(2 , ANALOG_RESOLUTION);
21
+
22
+ void setup ()
23
+ {
24
+ Serial.begin (115200 );
25
+ Serial.println (" Differential analog conversion example" );
26
+
27
+ pinMode (LED_BUILTIN, OUTPUT);
28
+
29
+ analogReadResolution (ANALOG_RESOLUTION); // Default is 10 bit. Increase to 14 bit.
30
+ }
31
+
32
+ void loop ()
33
+ {
34
+ int myAnalog0 = analogRead (ADIFF0); // Pads 12/13. Pins 9/10 on RedBoard Artemis.
35
+ // int myAnalog0 = analogRead(ADIFF1); //Pads 14/15
36
+ float myVoltage0 = mapfloat (myAnalog0, 0 , maxADCValue, -1.0 , 1.0 );
37
+ Serial.print (" Diff0 voltage: " );
38
+ Serial.print (myVoltage0, 3 );
39
+ Serial.println ();
40
+
41
+ digitalWrite (LED_BUILTIN, HIGH);
42
+ delay (25 );
43
+ digitalWrite (LED_BUILTIN, LOW);
44
+ delay (25 );
45
+ }
46
+
47
+ float mapfloat (float x, float in_min, float in_max, float out_min, float out_max)
48
+ {
49
+ if (x > in_max)
50
+ x = in_max;
51
+
52
+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
53
+ }
0 commit comments