Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    HX711 Power Down with Lopy 4 doesn't work

    Scheduled Pinned Locked Moved LoPy
    1 Posts 1 Posters 29 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      Simon RAPP
      last edited by

      Hello,

      I have a problem with a Pycom Lopy4 and an HX711. I want to put the HX711 in Power Down mode, before the Lopy4 deepsleep.
      I tried with a lot of HX711 librairies, but the function "pouwer_down" never works. I measure always 6,44mA while the current will must be around 20uA.

      This is the latest library with I tried :

      from utime import sleep_us, time
      from machine import Pin
      from micropython import const
      
      class HX711Exception(Exception):
          pass
      
      class InvalidMode(HX711Exception):
          pass
      
      class DeviceIsNotReady(HX711Exception):
          pass
      
      class HX711(object):
          """
          Micropython driver for Avia Semiconductor's HX711
          24-Bit Analog-to-Digital Converter
          """
          CHANNEL_A_128 = const(1)
          CHANNEL_A_64 = const(3)
          CHANNEL_B_32 = const(2)
      
          DATA_BITS = const(24)
          MAX_VALUE = const(0x7fffff)
          MIN_VALUE = const(0x800000)
          READY_TIMEOUT_SEC = const(5)
          SLEEP_DELAY_USEC = const(80)
      
          def __init__(self, d_out: int, pd_sck: int, channel: int = CHANNEL_A_128):
              self.d_out_pin = Pin(d_out, Pin.IN)
              self.pd_sck_pin = Pin(pd_sck, Pin.OUT, value=0)
              self.channel = channel
      
          def __repr__(self):
              return "HX711 on channel %s, gain=%s" % self.channel
      
          def _convert_from_twos_complement(self, value: int) -> int:
              """
              Converts a given integer from the two's complement format.
              """
              if value & (1 << (self.DATA_BITS - 1)):
                  value -= 1 << self.DATA_BITS
              return value
      
          def _set_channel(self):
              """
              Input and gain selection is controlled by the
              number of the input PD_SCK pulses
              3 pulses for Channel A with gain 64
              2 pulses for Channel B with gain 32
              1 pulse for Channel A with gain 128
              """
              for i in range(self._channel):
                  self.pd_sck_pin.value(1)
                  self.pd_sck_pin.value(0)
      
          def _wait(self):
              """
              If the HX711 is not ready within READY_TIMEOUT_SEC
              the DeviceIsNotReady exception will be thrown.
              """
              t0 = time()
              while not self.is_ready():
                  if time() - t0 > self.READY_TIMEOUT_SEC:
                      raise DeviceIsNotReady()
      
          @property
          def channel(self) -> tuple:
              """
              Get current input channel in a form
              of a tuple (Channel, Gain)
              """
              if self._channel == self.CHANNEL_A_128:
                  return 'A', 128
              if self._channel == self.CHANNEL_A_64:
                  return 'A', 64
              if self._channel == self.CHANNEL_B_32:
                  return 'B', 32
      
          @channel.setter
          def channel(self, value):
              """
              Set input channel
              HX711.CHANNEL_A_128 - Channel A with gain 128
              HX711.CHANNEL_A_64 - Channel A with gain 64
              HX711.CHANNEL_B_32 - Channel B with gain 32
              """
              if value not in (self.CHANNEL_A_128, self.CHANNEL_A_64, self.CHANNEL_B_32):
                  raise InvalidMode('Gain should be one of HX711.CHANNEL_A_128, HX711.CHANNEL_A_64, HX711.CHANNEL_B_32')
              else:
                  self._channel = value
      
              if not self.is_ready():
                  self._wait()
      
              for i in range(self.DATA_BITS):
                  self.pd_sck_pin.value(1)
                  self.pd_sck_pin.value(0)
      
              self._set_channel()
      
          def is_ready(self) -> bool:
              """
              When output data is not ready for retrieval,
              digital output pin DOUT is high.
              """
              return self.d_out_pin.value() == 0
      
          def power_off(self):
              """
              When PD_SCK pin changes from low to high
              and stays at high for longer than 60 us ,
              HX711 enters power down mode.
              """
              self.pd_sck_pin.value(0)
              self.pd_sck_pin.value(1)
              sleep_us(self.SLEEP_DELAY_USEC)
      
          def power_on(self):
              """
              When PD_SCK returns to low, HX711 will reset
              and enter normal operation mode.
              """
              self.pd_sck_pin.value(0)
              self.channel = self._channel
      
          def read(self, raw=False):
              """
              Read current value for current channel with current gain.
              if raw is True, the HX711 output will not be converted
              from two's complement format.
              """
              if not self.is_ready():
                  self._wait()
      
              raw_data = 0
              for i in range(self.DATA_BITS):
                  self.pd_sck_pin.value(1)
                  self.pd_sck_pin.value(0)
                  raw_data = raw_data << 1 | self.d_out_pin.value()
              self._set_channel()
      
              if raw:
                  return raw_data
              else:
                  return self._convert_from_twos_complement(raw_data)
      
      

      Is someone know how to fix this problem ?

      Best regards,

      Simon

      1 Reply Last reply Reply Quote 0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      • 1 / 1
      • First post
        Last post

      Pycom on Twitter

      Pycom