nRF52832 sparkfun board

It appears that there is a setting for reading analog voltages missing or needs to be added.

Trying to read 0 to 3 volts on an analog input pin. Anything over a few hundred mV over ranges the readings. I’ve seen code that attempts to fix this but I can’t get it to work.

The added line I have seen is:

analogReference(AR_VDD4);

Regards,

Kevin

Much appreciated; we will pass this along to the engineering team!

TS-Russell:
Much appreciated; we will pass this along to the engineering team!

Thanks very much. Looking forward to hearing a solution to this…

Regards,

Kevin

Any news with this issue?

Kevin

I found this, maybe that will help?

https://learn.adafruit.com/bluefruit-nr … /nrf52-adc

Thanks for the response Yellowdog

The code at the link does exactly the same thing as my code. I have setup my function generator with a slow sine wave output that goes between 0 and 610mV (confirmed via scope as well) and I get a nice sine wave output when the data is plotted however the output goes between count of 0 and 1023. So ~610 mV is full scale even with the “correct” settings for a full scale of 3.6 Volts.

Regards,

Kevin

Could really use some help with this issue…

Kevin

Also don’t attempt to use an Analog channel as a digital input next to an analog channel. The cross talk makes the analog reading completely wrong if the input next to it is high. I’m using the sparkfun board on a pcb with a solid ground plane btw. The digital input is logic high steady state and the analog voltage is 0.4V. I’m using the 0.6Volt reference mode as no one can help me change it to 3.3.

When the digital channel goes high the analog input is bumped up another 0.3 volts or so by the cross talk.

Kevin

I moved the digital-analog input away from the Analog input to a purely digital input and the cross talk problem is gone.

Kevin

I do not have an nRF52832 ( I have nRF52840) but looked at the board library. Your issue is clear to me. The ADC range is set by a reference value / gain. In the Sparkfun library, the reference value is by default internal (0.6V). If you set the reference to AR_VDD4 it will be VDD/4 = ~ 3.3 /4 = 0.8. That is ALL you can set on Sparkfun board library. The gain is hardcoded as 1, so the maximum range you get is ~0.6V or ~0.8V.

Looking at Adafruit’s implementation for the nRF52, they do it right and you can use all the options as mentioned on the internet page YellowDog referred to. I have copied the (attached) source file from Adafruit into the Sparkfun library, it compiles without error for an nRF52832. So maybe that is a workaround for you.

make a safety copy in: .arduino15/packages/SparkFun/hardware/nRF5/0.2.3/cores/nRF/wiring_analog_nRF52.c to wiring_analog_nRF52.txt ( my board library is on this place in Ubuntu, maybe on another place for you)

place the attachment in : .arduino15/packages/SparkFun/hardware/nRF5/0.2.3/cores/nRF/

Now make a clean recompile of your sketch (make sure NO cached objects are used)and for analogReference() use the information from the internet page.

Interested to know how it works out.

wiring_analog_nRF52.c (6.94 KB)

Thanks very much Paul. I will give this a go in the morning.

Kevin

Hello Paul

Pretty sure I have done what you asked and this is the error message I receive:

Arduino: 1.8.14 (Windows Store 1.8.45.0) (Windows 10), Board: “SparkFun nRF52832 Breakout, S132, Crystal Oscillator”

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c: In function ‘analogReference’:

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c:79:10: error: ‘AR_INTERNAL_3_0’ undeclared (first use in this function)

case AR_INTERNAL_3_0:

^

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c:79:10: note: each undeclared identifier is reported only once for each function it appears in

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c:83:10: error: ‘AR_INTERNAL_2_4’ undeclared (first use in this function)

case AR_INTERNAL_2_4:

^

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c:87:10: error: ‘AR_INTERNAL_1_8’ undeclared (first use in this function)

case AR_INTERNAL_1_8:

^

C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog_nRF52.c:91:10: error: ‘AR_INTERNAL_1_2’ undeclared (first use in this function)

case AR_INTERNAL_1_2:

^

exit status 1

Error compiling for board SparkFun nRF52832 Breakout.

This report would have more information with

“Show verbose output during compilation”

option enabled in File → Preferences.

Regards,

Kevin

ok…

rename C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\wiring_analog.h to

wiring_analog.txt

copy the attached wiring_analog.h to C:\Users\kbkib\Documents\ArduinoData\packages\SparkFun\hardware\nRF5\0.2.3\cores\nRF5\

and try again…

wiring_analog.h (2.77 KB)

Works a treat. Thank you very much for your time and effort.

Kind regards,

Kevin