Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Hx711.cpp
00001 #include "mbed.h" 00002 #include "Hx711.h" 00003 00004 void Hx711::set_gain(uint8_t gain) { 00005 switch (gain) { 00006 case 128: // channel A, gain factor 128 00007 gain_ = 1; 00008 break; 00009 case 64: // channel A, gain factor 64 00010 gain_ = 3; 00011 break; 00012 case 32: // channel B, gain factor 32 00013 gain_ = 2; 00014 break; 00015 } 00016 00017 sck_.write(LOW); 00018 read(); 00019 } 00020 00021 uint32_t Hx711::readRaw() { 00022 // wait for the chip to become ready 00023 // TODO: this is not ideal; the programm will hang if the chip never 00024 // becomes ready... 00025 while (!is_ready()); 00026 00027 uint32_t value = 0; 00028 uint8_t data[3] = { 0 }; 00029 uint8_t filler = 0x00; 00030 00031 // pulse the clock pin 24 times to read the data 00032 data[2] = shiftInMsbFirst(); 00033 data[1] = shiftInMsbFirst(); 00034 data[0] = shiftInMsbFirst(); 00035 00036 // set the channel and the gain factor for the next reading using the clock pin 00037 for (unsigned int i = 0; i < gain_; i++) { 00038 sck_.write(HIGH); 00039 sck_.write(LOW); 00040 } 00041 00042 // Datasheet indicates the value is returned as a two's complement value 00043 // Flip all the bits 00044 data[2] = ~data[2]; 00045 data[1] = ~data[1]; 00046 data[0] = ~data[0]; 00047 00048 // Replicate the most significant bit to pad out a 32-bit signed integer 00049 if ( data[2] & 0x80 ) { 00050 filler = 0xFF; 00051 } else if ((0x7F == data[2]) && (0xFF == data[1]) && (0xFF == data[0])) { 00052 filler = 0xFF; 00053 } else { 00054 filler = 0x00; 00055 } 00056 00057 // Construct a 32-bit signed integer 00058 value = ( static_cast<uint32_t>(filler) << 24 00059 | static_cast<uint32_t>(data[2]) << 16 00060 | static_cast<uint32_t>(data[1]) << 8 00061 | static_cast<uint32_t>(data[0]) ); 00062 00063 // ... and add 1 00064 return static_cast<int>(++value); 00065 } 00066 00067 00068 uint8_t Hx711::shiftInMsbFirst() { 00069 uint8_t value = 0; 00070 00071 for (uint8_t i = 0; i < 8; ++i) { 00072 sck_.write(HIGH); 00073 value |= dt_.read() << (7 - i); 00074 sck_.write(LOW); 00075 } 00076 return value; 00077 }
Generated on Tue Jul 12 2022 23:49:57 by
