Hey Everyone,

I'm using the Beaglebone ADC on AIN0 (P9-39) to monitor a high voltage. 
I've used a divider (1/100) to put it within the 1.8V range of the ADC.I am 
using the cape overlay BB-ADC suggested by Derrick Molloy in Exploring BB. 
I've measured the voltage at the pin while using "cat 
/sys/devices/ocp.3/helper.12" and it agrees with my multimeter measurement 
at the pin. It seems the helper gives a direct mV value. They agree. 
Awesome!

I'm trying to use this same technique with my C code, but for some reason 
I'm getting weird values from my read function. I think it has something to 
do with reading two bytes from the 12 bit ADC converter. I'm thinking I'm 
getting some junk on the end or the beginning, but masking and getting rid 
of the first or last 4 bits does not get the number I received from the 
cat'ing the helper device.

Am I reading this wrong with my code?  Does anyone have any ideas to get 
the correct 12 bits?

Thanks! I think I gave enough information below.

*Test Code:*

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <poll.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include "DDC2.h"


int main ( int argc, const char *argv[] )
{
float voltage;
voltage = atof ( argv[1] );
set_high_voltage ( voltage );
read_raw_high_voltage ( );
return 0;
}

*Read Function:*

/***********************************************************************
* Function- read_high_voltage
* Description- Reads the ADC on AIN0 and returns the measured value of the
* high voltage.
************************************************************************/
int read_raw_high_voltage(void)
{
uint16_t fd;
uint16_t value;
uint16_t value1;
uint16_t value2;
//Open "analog0=/sys/devices/ocp.3/helper.12/AIN0"
if ( ( fd = open ( analog0, O_RDONLY) ) < 0 )  
  {
      perror ("SPI: Can't open device.");
    return -1;
    }
    read ( fd, &value, 2);
    value1=value & 0x0FFF;
                        value2=value>>4;
                        printf ("All Bits=%d\n", value);
                        printf ("Bits 0-12=%d\n", value1);
                        printf ("Bits 4-16=%d\n", value1);
return(0);
}

*From Command line:*

./test 60

*Output:*

Voltage Given=60.0
All Bits= 14389
Bit 0-12=2101
Bit 4-16=899

Measured Voltage from Multimeter= 600mV (measured after 1/100 voltage 
divider)

Cat from the helper device = 587

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to