Hi all,
So I'm using a SparkFun 7-Segment Serial Display but with custom firmware, not using it as a peripheral display. I want to display mass from the hx711 on the built-in display using the SevSeg library. This part works fine, I have not added the code here yet.
My problem with the sparkfun chip (Atmega328) is, I only receive a Zero value from the hx711 for all values. I know of ground issues with the hx711 chip, I've soldered ground to E- anyway, and get the right voltages from the load cell.
I don't have any issues with load cells and hx711 chips, I've got two of each which works fine if I run my code on an Atmega2560. No change in any wiring either, just a change of i2c pins and external battery for hx711 (5volt) grounded with board which is connected via ftdi (3.3volt).
I've used the code below for the Atmega2560, which works fine.
/**
*
* HX711 library for Arduino - example file
* https://github.com/bogde/HX711
*
* MIT License
* (c) 2018 Bogdan Necula
*
**/
#include "HX711.h"
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 20;
const int LOADCELL_SCK_PIN = 21;
HX711 scale;
void setup() {
Serial.begin(9600);
Serial.println("HX711 Demo");
Serial.println("Initializing the scale");
// Initialize library with data output pin, clock input pin and gain factor.
// Channel selection is made by passing the appropriate gain:
// - With a gain factor of 64 or 128, channel A is selected
// - With a gain factor of 32, channel B is selected
// By omitting the gain factor parameter, the library
// default "128" (Channel A) is used here.
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
Serial.println("Before setting up the scale:");
Serial.print("read: \t\t");
Serial.println(scale.read()); // print a raw reading from the ADC
Serial.print("read average: \t\t");
Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC
Serial.print("get value: \t\t");
Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet)
Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided
// by the SCALE parameter (not set yet)
scale.set_scale(2280.f); // this value is obtained by calibrating the scale with known weights; see the README for details
scale.tare(); // reset the scale to 0
Serial.println("After setting up the scale:");
Serial.print("read: \t\t");
Serial.println(scale.read()); // print a raw reading from the ADC
Serial.print("read average: \t\t");
Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC
Serial.print("get value: \t\t");
Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare()
Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight, divided
// by the SCALE parameter set with set_scale
Serial.println("Readings:");
}
void loop() {
Serial.print("one reading:\t");
Serial.print(scale.get_units(), 1);
Serial.print("\t| average:\t");
Serial.println(scale.get_units(10), 1);
delay(500);
}
COMS:
AND NOW... If I use the exact code with the Sparkfun serial segment display, change the pins to work and select the board and com port:
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 27;
const int LOADCELL_SCK_PIN = 28;
This happens:
All Zeros!
I've seen this problem with the hx711 and Arduino Uno (Atmega328) before:
Could there be an issue with the code and atmega328?