On Thu, Mar 27, 2014 at 4:17 PM, Mark A. Yoder <mark.a.yo...@gmail.com> wrote: > Hmm... I'm not getting anywhere with this. I have a TMP101 i2c device wired > to P9_19 and P9_20. From the command line this works: > > # i2cdetect -y -r 1 > 0 1 2 3 4 5 6 7 8 9 a b c d e f > 00: -- -- -- -- -- -- -- -- -- -- -- -- -- > 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- -- > 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- > 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 70: 70 -- -- -- -- -- -- -- > # i2cget -y 1 0x49 > 0x17 > # i2cget -y 1 0x49 > 0x1b > I stuck my figure on the device and warmed it up for the second i2cget. > > Now with bonescript: > var b = require('bonescript'); > var port = '/dev/i2c-0' > var TMP102 = 0x48; > > b.i2cOpen(port, TMP102, {}, onI2C); > > function onI2C(x) { > // console.log(x); > if (x.event == 'return') { > b.i2cScan(port, onScan); > b.i2cReadBytes(port, 0, 1, onReadByte); > } > } > > function onScan(x) { > console.log('scan data: ' + x.data); > } > > function onReadByte(x) { > console.log('onReadByte: ' + JSON.stringify(x)); > console.log('res: ' + JSON.stringify(x.res)); > } > When I run with /dev/i2c-1 I get: > > scan data: > scan data: undefined > onReadByte: {"err":{},"res":[240],"event":"callback"} > res: [240] > onReadByte: {"event":"return","return":[240]} > res: undefined > > That is, scan doesn't find anything. If I run with /dev/i2c-0 > > scan data: 52,80 > scan data: undefined > onReadByte: {"err":{},"res":[240],"event":"callback"} > res: [240] > onReadByte: {"event":"return","return":[240]} > res: undefined > > Scan finds two devices, but I don't see how they relate to whats on the bus. > > Any ideas?
You'll want to use '/dev/i2c-2'. Check out https://github.com/jadonk/bonescript/blob/master/src/bone.js#L1550 for the mapping. The reason I chose to use i2c-2 because the adapters are enumerated out of order. Otherwise, it won't match the hardware documentation. (http://beagleboard.org/support/bone101/#headers-i2c) There has been some discussion to fix this in mainline, but I'm not sure of the current state. http://lists.infradead.org/pipermail/linux-arm-kernel/2012-August/116775.html > > --Mark > > On Thursday, March 27, 2014 9:40:09 AM UTC-4, Jason Kridner wrote: >> >> On Wed, Mar 26, 2014 at 5:42 PM, Mark A. Yoder <mark.a...@gmail.com> >> wrote: >> > I see the bonescript has some i2c methods. Are there any examples out >> > there >> > that work under Debian on the Black Bone? >> >> Here's one that works on BoneScript 0.2.4 on Debian, but happens to be >> calling the I2C methods from a web page: >> >> http://jsfiddle.net/jkridner/PGL92/ [1] >> >> I had something similar for drawing a Flot graph using the >> accelerometer, but not sure where I posted it. >> >> Some more running-from-webpage examples: >> http://jsfiddle.net/user/jkridner/fiddles/ >> >> [1] source >> var canvas = document.getElementById("mysketch"); >> var p = new Processing(canvas, sketchProc); >> >> function sketchProc(pjs) { >> // Sketch global variables >> var radius = 50.0; >> var X, Y; >> var nX, nY; >> var delay = 16; >> var brightness = 0; >> var buttonStatus = 0; >> var sliderStatus = 0; >> var lastSliderValue = 0; >> var BUTTON = 'P8_19'; >> var SLIDER = 'P9_36'; >> var port = '/dev/i2c-2' >> var address = 0x1c; >> >> // Get the BoneScript library and begin updating the canvas >> setTargetAddress('192.168.7.2', { >> initialized: run >> }); >> >> function run() { >> var b = require('bonescript'); >> b.pinMode(BUTTON, b.INPUT); >> b.i2cOpen(port, address, {}, onI2C); >> >> // Setup the Processing Canvas >> pjs.setup = function () { >> pjs.size(256, 256); >> pjs.strokeWeight(10); >> pjs.frameRate(15); >> X = pjs.width / 2; >> Y = pjs.height / 2; >> nX = X; >> nY = Y; >> } >> >> // Main draw loop >> pjs.draw = function () { >> // Calculate some fading values based on the frame count >> radius = 50.0 + (15 - sliderStatus) * pjs.sin(pjs.frameCount / >> 4); >> brightness = (radius - 40.0) / 20.0; >> >> // Track circle to new destination >> X += (nX - X) / delay; >> Y += (nY - Y) / delay; >> >> // Fill canvas grey >> pjs.background(100); >> >> // Set fill-color to blue or red, based on button status >> if (buttonStatus) pjs.fill(200, 30, 20) >> else pjs.fill(0, 121, 184); >> >> // Set stroke-color white >> pjs.stroke(255); >> >> // Draw circle >> pjs.ellipse(X, Y, radius, radius); >> >> // Update physical values >> readSlider(); >> } >> >> function readSlider() { >> b.analogRead(SLIDER, onAnalogRead); >> } >> >> // Handle data back from potentiometer >> function onAnalogRead(x) { >> if (!x.err && (x.value >= 0) && (x.value <= 1)) { >> if (Math.abs(x.value - lastSliderValue) > 0.05) { >> lastSliderValue = x.value; >> sliderStatus = parseInt(x.value * 10, 10); >> } >> } >> >> // Fetch button status >> b.digitalRead(BUTTON, onDigitalRead); >> >> } >> >> // Handle data back from button >> function onDigitalRead(x) { >> buttonStatus = (x.value == b.LOW) ? 1 : 0; >> >> // Fetch accelerometer status >> readAccel(); >> } >> >> function onI2C(x) { >> if (x.event == 'return') { >> b.i2cWriteBytes(port, 0x2a, [0x00], onI2C_A); >> } >> } >> >> function onI2C_A() { >> b.i2cWriteBytes(port, 0x0e, [0x00], onI2C_B); >> } >> >> function onI2C_B() { >> b.i2cWriteBytes(port, 0x2a, [0x01], pjs.setup); >> } >> >> // Fetch accelerometer status >> function readAccel() { >> b.i2cReadBytes(port, 1, 6, onReadBytes); >> } >> >> function onReadBytes(x) { >> console.log(JSON.stringify(x)); >> if (x.event == 'callback') { >> var gX = convertToG(x.res[0]); >> var gY = convertToG(x.res[2]); >> var gZ = convertToG(x.res[4]); >> $('#X').html(gX); >> $('#Y').html(gY); >> $('#Z').html(gZ); >> >> // Update heading of ball >> nX = 128 - (gX / 2) * 256; >> nY = (gY / 2) * 256 + 128; >> >> //pjs.draw(); >> } >> } >> >> function convertToG(x) { >> if (x >= 128) x = -((x ^ 0xFF) + 1); // Get two's complement >> x = x / 64; // Scale to G >> x = x.toFixed(2); // Limit decimal places >> return (x); >> } >> } >> } >> >> > >> > --Mark >> > >> > -- >> > 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...@googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. > > -- > 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. -- 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.