Jason: Running your i2c-scan.js on my bone returns on devices. So, something odd is going on here.
I'm going to put this on the back burner and see what else I can cook up. --Mark On Friday, March 28, 2014 1:46:44 AM UTC-4, Jason Kridner wrote: > > On Thu, Mar 27, 2014 at 7:30 PM, Jason Kridner > <[email protected]<javascript:>> > wrote: > > On Thu, Mar 27, 2014 at 4:17 PM, Mark A. Yoder > > <[email protected]<javascript:>> > 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); > > Issuing both of these at the same time probably isn't what you really > want. I'm not sure if they will interfere. Better to wait until the > scan is complete before trying to issue the read. > > >> } > >> } > >> > >> function onScan(x) { > >> console.log('scan data: ' + x.data); > > You aren't checking x.err here. Make sure there isn't an error. > > >> } > >> > >> 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 > > Why is this getting printed twice? I can't quite see what is going on > here. > > >> 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'. > > I know you say you aren't seeing a difference, but I am seeing > responses based on what is on my I2C-2 bus: > > i2c-scan.js: > var b = require('bonescript'); > var port = '/dev/i2c-2' > > b.i2cOpen(port, null, {}, onI2C); > > function onI2C(x) { > console.log('onI2C: ' + JSON.stringify(x)); > if (x.event == 'return') { > b.i2cScan(port, onScan); > } > } > > function onScan(x) { > if (x.event == 'callback') { > console.log('scan data: ' + JSON.stringify(x)); > } > } > > root@beaglebone:/var/lib/cloud9# node i2c-scan.js > onI2C: {"event":"return","value":true} > scan data: {"err":null,"data":[87],"event":"callback"} > > root@beaglebone:/var/lib/cloud9# i2cdetect -y -r 1 > 0 1 2 3 4 5 6 7 8 9 a b c d e f > 00: -- -- -- -- -- -- -- -- -- -- -- -- -- > 10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d -- -- > 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- > 60: -- -- -- -- -- -- -- -- -- -- -- 6b -- -- -- -- > 70: -- -- -- -- -- -- -- -- > > So, it seems these don't line up. To see if the delta is due to the > wrapper I have in BoneScript or the node-i2c library I pull in, I > tried out this: > > debian@beaglebone:/var/lib/cloud9$ cat i2c-scan-native.js > var i2c = require('bonescript/node_modules/i2c'); > var wire = new i2c(null, {device: '/dev/i2c-1'}); > wire.scan(function(err, data) { > if(err) console.log('ERROR: ' + JSON.stringify(err)); > console.log(JSON.stringify(data)); > }); > debian@beaglebone:/var/lib/cloud9$ node i2c-scan-native.js > [87] > > That shows that it is the node-i2c library that causes only one of my > devices to show up and at a different reported address. > > Updating to the latest version on git didn't seem to make a difference. > > > > > 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 <[email protected]> > >>> 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 [email protected]. > >>> > 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 [email protected] <javascript:>. > >> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
