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.

Reply via email to