A basic Library for the 16 bit Differential A/D in the K64F Freedom platform
This Library cn use either A2D0 or 1. Note that when using A2D0 you must use pins ADC0_DP1 and ADC0_DM1. For A2D1 you must use pins ADC1_DP1 and ADC1_DM1.
Diff: AnalohIn_Diff.cpp
- Revision:
- 0:0f6f4be28e21
- Child:
- 1:7b36e4381d83
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AnalohIn_Diff.cpp Tue May 20 00:58:33 2014 +0000 @@ -0,0 +1,34 @@ +#include "mbed.h" +#include "AnalogIn_Diff.h" + + +AnalogIn_Diff::AnalogIn_Diff(int channel) : ch(channel) { + if(ch) BW_SIM_SCGC3_ADC1(1); + else BW_SIM_SCGC6_ADC0(1); + BW_ADC_SC1n_ADCH(ch, 0, 0x01); + BW_ADC_SC1n_DIFF(ch, 0, 1); + BW_ADC_CFG1_ADICLK(ch, 0); + BW_ADC_CFG1_MODE(ch, 3); + BW_ADC_CFG1_ADLSMP(ch, 0); // + BW_ADC_CFG1_ADIV(ch, 3); + BW_ADC_CFG1_ADLPC(ch, 0); +} + +AnalogIn_Diff::~AnalogIn_Diff() { } + +int16_t AnalogIn_Diff::read_16(void) { + BW_ADC_SC1n_ADCH(ch, 0, 0x01); + while(!BR_ADC_SC1n_COCO(ch, 0)); + return(BR_ADC_Rn_D(ch, 0)); +} + +float AnalogIn_Diff::read(void) { + int16_t i; + float t; + BW_ADC_SC1n_ADCH(ch, 0, 0x01); + while(!BR_ADC_SC1n_COCO(ch, 0)); + i = BR_ADC_Rn_D(ch, 0); + t = ((float) i); + t = t / 32768.0f; + return(t); +}