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.

Reply via email to