Avatar for user135646

user135646

Member since Oct 2021 • Last active Sep 2022
  • 6 conversations
  • 17 comments

Most recent activity

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Finally got around to this, and results are excellent. Getting <0.3us jitter.
    The examples definitely came in handy, although there's a bit of guesswork involved in sending the right values to the right places.

    A working example is included below though that uses a button on D17 to start / stop a train of pulses.

    var ll = require("NRF52LL");
    // 100Hz pulses of 20us width, but triggered by button press.
    // Set up D20 as output
    digitalWrite(D20, 0);
    // Create a task for the pin
    var t0 = ll.gpiote(7, {type:"task",pin:D20});
    // Create a timer using timer 2 that counts to 10000
    // and has capture-compares at 20 and 10000 counts.
    var tmr = ll.timer(2, {cc:[20, 10000],cc1clear:1});
    // User a PPI to trigger the events.
    ll.ppiEnable(0, tmr.eCompare[0], t0.tClr);
    ll.ppiEnable(1, tmr.eCompare[1], t0.tSet);
    //Button stuff to start/stop pulses.
    let btn = false;
    function checkBtn(){
        if (digitalRead(D17) == 1) {
            if (btn==false){
                // Manually start timer
                poke32(tmr.tStart,1);
                while(digitalRead(D17)){}
                btn=true;
            }
            else{
                // stop the timer.
                poke32(tmr.tStop,1);
                while(digitalRead(D17)){}
                digitalWrite(D20, 0);
                btn=false;
            }
        }
    }
    setInterval(checkBtn, 10);
    

    edit - added 'var ll = require("NRF52LL");' at top of example

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Flashing via DFU didn't work (the file sent over ok on the app, but nothing happened).
    Programming via the J-link on the nRF DK board didn't work either (which was odd).

    But I found a J-Link Ultra+, and that programmed it just fine. The radio demo seems to be working - thank you for the help.

    The current board doesn't have a programming header per-se, so one unit will be kept as the 'radio test unit'. No need for the Espruino .hex, but thanks for offering.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Thanks Gordon, all useful advice.

    I was on v2.12, but have updated to v2.14 and seen an improvement in timings, although there'll still be one or two long pulses in a second's worth and it still doesn't quite go down to 20us. But I agree it's much improved and if I get fed up with fiddling with timers it's probably good enough to work with.

    Thank you for the links re. hardware and examples, I'll have a read up on them.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Hi All,
    Working on something that needs to produce accurate-ish (+/-20%) pulses down to 20us every 10ms for 1s. I'm currently using a combination of setInterval() and digitalPulse() (see snippet below if interested).

    With a bit of dialling-in, the 1s duration is reliable enough, setInterval() is working great at 100Hz, and digitalPulse() gives good results at 200us and passable ones at around 140us.

    digitalPulse can do 32us, but there's about +40/-0 us of variation in it so it's not ideal. For stuff around 100us things could be fudged so that the +40us sits as +/-20% around 100us, but it doesn't work once you get faster than that.

    So the question is, what timers are free to use that don't interfere with Espruino? What timers (if any) does digitalPulse() use? Was thinking of using a one-shot timer triggered over and over by setInterval().

    // Timeouts of OFFSET_MS used to account for speed of js execution. Obtain OFFSET_MS empirically.
    // Timeout to start pulses.
    setTimeout( () =>   { tmp1 = setInterval( () => { 
                    digitalPulse( PULSE_PIN, true, pulseDuration_ms );
                }, CNST_PERIOD_MS )
            },  OFFSET_MS
        );
    // Timeout to stop pulses after some time.
    setTimeout( function(){ PULSE_PIN.reset(); clearInterval(tmp1); }, Duration1_ms+OFFSET_MS);
    
  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Had a look at that example, and it seems to be exactly what I need! Thank you. Now to dig out the NRF52-DK...

    Is it simple enough to get Espruino back on the chip?

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Hi All,

    We're have a product using an Espruino MDBT42Q, and are looking at running tests in service of the RED (Radio Equipment Directive; an EU thing).

    A test house has come back asking if the device can be made to constantly transmit on the lowest, middle, and highest frequency channels one by one (which for BLE would be channels 37, 17, and 39 respectively).

    I've looked through the software reference and found the useful 'setTxPower' function, but is there a way to do either or both of constant transmission (doesn't have to be intelligible data) and transmitting over a fixed channel?

  • in Puck.js, Pixl.js and MDBT42
    Avatar for user135646

    Thank you both. Turns out it was definitely a size issue. Working fine from Flash now.

Actions