I'm quite new to this, and it was a struggle for me to do a simple thing like read a channel of the A/D subsystem on my Beaglebone. Many of the guides on the web seem not to work under Debian Image 2014-05-14. So in the hope of helping someone else, here is my hard-won cookbook for Debian users.
Following is a step-by-step guide to reading the A/D channels on my Beaglebone (white or black) running Debian Image 2014-05-14. *STEP ONE* Change uEnv.txt to look like this: *##Example#cape_disable=capemgr.disable_partno=cape_enable=capemgr.enable_partno=BB-ADC* (the first two lines above will already be in the file. You add the last line "cape_enable=capemgr.enable_partno=BB-ADC" ) This will cause BB-ADC device tree to be installed each time you boot your board. *STEP TWO* With this done, reboot the board. I boot to "root@beaglebone:~#" so it will appear below. Verify that you can now read A/D channel 0 by executing the following from the command line on your Beaglebone: *root@beaglebone:~# cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw* You should see a number something like 3927. If so, you have access to the A/D subsystem and you can try things like *root@beaglebone:~# cat /sys/bus/iio/devices/iio:device0/in_voltage7_raw* to read channel 7, and so on. *STEP THREE* If you're interested in C/C++, the following short program should read all eight A/D channels and display their value: #include <iostream> #include <cstring> #include <fcntl.h> //define O_WRONLY and O_RDONLY using namespace std; int main() { int fd ; //for file handle char ch[5]; //for the A/D value when read //The next three strings are used to construct a path to the A/D channels char bufbase[64] = "/sys/bus/iio/devices/iio:device0/in_voltage"; //path prefix char chnlnumber[2]; //channel to be read, 0,1,...,7 char bufend[] = "_raw"; //path suffix char buf[64] = ""; //string to hold full path to A/D channel int i; //loop index chnlnumber[1] = 0; //end of string for (i=0;i<8;i++) { chnlnumber[0] = 48+i; //string containing channel number as a character strcat(strcat(strcat(buf,bufbase),chnlnumber),bufend); //construct the full path cout << "Cnl" <<chnlnumber<< " " ; //display the channel number being read fd = open(buf, O_RDONLY); //access the A/D channel as a file read(fd,ch,4); // " cout << ch << " " << endl ; //display the current raw value from the channel close(fd); strcpy(buf,""); //get ready to do next channel access usleep(10000); //wait for 10ms -- not really needed } } (I'm also new to C++, being more of a assembler guy myself, so this code may have many shortcomings. Advice on improvements welcome!) -- 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 beagleboard+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.