pullUP and pullDOWN with read_digital()

Questions and discussion about running MicroPython on a micro:bit board.
Target audience: MicroPython users with a micro:bit.
Post Reply
tonygo
Posts: 10
Joined: Thu Apr 12, 2018 1:23 pm

pullUP and pullDOWN with read_digital()

Post by tonygo » Thu Apr 12, 2018 1:50 pm

I've just installed Mu 1.0.0.beta.15. (Thank you for all the hard work.) I am using it to code the BBC micro:bit.

Have pullup and pulldown been included in pin?.read_digital() ? If so on which pins can they be used?

cefn
Posts: 230
Joined: Tue Aug 09, 2016 10:58 am

Re: pullUP and pullDOWN with read_digital()

Post by cefn » Fri Apr 20, 2018 3:26 pm

See https://microbit-micropython.readthedoc ... -functions
The pull mode for a pin is automatically configured when the pin changes to an input mode. Input modes are when you call read_analog / read_digital / is_touched. The default pull mode for these is, respectively, NO_PULL, PULL_DOWN, PULL_UP. Calling set_pull will configure the pin to be in read_digital mode with the given pull mode.
I don't know if there are any limitations on the availability of set_pull depending on the pin identity.

Siriushardware
Posts: 20
Joined: Wed Nov 01, 2017 8:00 pm

Re: pullUP and pullDOWN with read_digital()

Post by Siriushardware » Mon Apr 23, 2018 6:05 pm

I had an earlier thread partly dealing with this, during which I found that you can query all the available properties for any given pin using repl.

For example, if I query pin 0 by entering dir(pin0) <enter> then I get this result for Pin0:

Code: Select all

dir(pin0)
['write_digital', 'read_digital', 'write_analog', 'read_analog', 'set_analog_period', 'set_analog_period_microseconds', 'is_touched']
You can see that my earlier version of Mu did NOT support the pull up / pull down properties.

It would be interesting to hear if the same query on your newer setup returns a longer list which includes the pull up / pull down properties.

tonygo
Posts: 10
Joined: Thu Apr 12, 2018 1:23 pm

Re: pullUP and pullDOWN with read_digital()

Post by tonygo » Thu Apr 26, 2018 4:22 pm

I've got the answer from Carlos Pereira Atencio at micro:bit support :
(support.microbit.org)

Thanks for contacting micro:bit. I have tested Mu beta 15 and the set_pull function is present in this version of MicroPython. From the REPL:


MicroPython v1.9.2-34-gd64154c73 on 2017-09-01; micro:bit with nRF51822
Type "help()" for more information.
>>> import os
>>> os.uname()
(sysname='microbit', nodename='microbit', release='1.0', version='micro:bit v1.0-c8c4db8 on 2017-9-27; MicroPython v1.9.2-34-gd64154c73 on 2017-09-01', machine='micro:bit with nRF51822')
>>> from microbit import pin0
>>> dir(pin0)
['write_digital', 'read_digital', 'write_analog', 'read_analog', 'set_analog_period', 'set_analog_period_microseconds', 'is_touched', 'PULL_UP', 'PULL_DOWN', 'NO_PULL', 'get_pull', 'set_pull', 'get_mode']
>>> pin0.set_pull(pin0.PULL_UP)
>>>

I've tested both PULL_UP and PULL_DOWN on all pins. Works properly, as expected on all but pins 5 and 11, the button pins A and B.
Error message says they are in BUTTON MODE.

You need to insert display.off() to take control of the pins used for controlling the display

Siriushardware
Posts: 20
Joined: Wed Nov 01, 2017 8:00 pm

Re: pullUP and pullDOWN with read_digital()

Post by Siriushardware » Mon Aug 20, 2018 6:06 pm

Having finally installed Mu 1.0 with its support for PULL_UP and PULL_DOWN modes on the Micro:Bit, I can confirm that this slightly unorthodox bit of code produces a slow squarewave output on Pin 1 when pin 1 is programmed as an INPUT.

Code: Select all

from microbit import *
x = pin1.read_digital() 

while(1):
    
    pin1.set_pull(pin1.PULL_UP)
    
    sleep(250)
    
    pin1.set_pull(pin1.PULL_DOWN)
    
    sleep(250)
Not that you would ever intentionally use an input to generate an output waveform, but this proves that the PULL_UP and PULL_DOWN modes are working by alternately pulling the input high and low.

Post Reply