Forum: Mikrocontroller und Digitale Elektronik Load Cell für digitale Waage


von Jonas A. (consta)


Lesenswert?

Hallo,
für ein Schulprojekt machen wir eine Waage.
Dazu wurde uns ein eine vorgefertigte Waage mit einer Load Cell gegeben. 
Diese hält bis 1kg.
Nun sollen wir, entweder mit HX711, oder ohne, eine Waage mit digitaler 
Ausgabe realisieren.
Als Mikrokontroller haben wir einen AT89C51 (31)

Geht es ohne den HX711 bzw. ist es ohne "leichter"?


MfG

von Einhart P. (einhart)


Lesenswert?

An eurer Stelle würde ich mir den analogen Part nicht an's Bein binden. 
Das Verarbeiten der Signale vom HX711 ist nicht schwer. Da gibt es genug 
Beispiele im Netz.

Auch weil der etwas in die Jahre gekommene Prozessor keinen A/D Wandler 
besitzt.

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

HX711: Wägezelle an den HX711 hängen, Mikrocontroller an den HX711 
hängen, auslesen.

Anders: Genaue Speise- und Referenzspannung erzeugen, Differenz-Signal 
aus Wägezelle ggf. filtern, ggf. verstärken, damit auf einen Verstärker 
zu Single-Ended und auf einen einfachen ADC oder das Differenzsignal auf 
einen ADC mit differentiellem Eingang. Mit einem Zooming ADC kann ggf. 
auch die Verstärkung entfallen. Und dann mit dem ADC an den Controller.


Der HX711 ist definitiv die günstigste, schnellste und einfachste 
Variante, um zu einem Ergebnis zu kommen. Dafür kann man sich dann in 
der Software ein bisschen austoben und dort ein gleitendes Filter, 
Offsetkorrektur, Nullpunktberuhigung,... Einbauen.

von Jonas A. (consta)


Lesenswert?

Tut mir Leid für die dumme Frage.
Im Internet habe ich unzählige Beispiele mit dem Adruino gefunden, aber 
keins mit einem derartigen Microkontroller.

Aber wie lese ich "einfach" die Daten vom HX711 in C aus?

Grüße

von Einhart P. (einhart)


Lesenswert?

Arduino Code ist C/C++. Schau dir die Bibliothek an.

von Wolfgang L. (smarty9797)


Lesenswert?

Einhart P. schrieb:
> Arduino Code ist C/C++. Schau dir die Bibliothek an.

Arduino ist die falsche Baustelle, denn

"Als Mikrokontroller haben wir einen AT89C51 (31)"

von Sebastian R. (sebastian_r569)


Lesenswert?

Jonas A. schrieb:
> Aber wie lese ich "einfach" die Daten vom HX711 in C aus?

Genau so wie mit einem Arduino. Man kann die vorhandenen Libraries sogar 
recht einfach übernehmen.

Ansonsten:
https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf

Dort ist das Protokoll dokumentiert und sogar ein C-Snippet angegeben.

Clock vorgeben und dazu Daten einlesen. Ist eigentlich recht einfach zu 
Fuß in C machbar. Muss ja auch nicht sonderlich schnell oder effizient 
sein, ansonsten könnte man das sicher dem HW-I2C beibringen.

von Sebastian R. (sebastian_r569)


Lesenswert?

Wolfgang L. schrieb:
> Einhart P. schrieb:
>> Arduino Code ist C/C++. Schau dir die Bibliothek an.
>
> Arduino ist die falsche Baustelle, denn
>
> "Als Mikrokontroller haben wir einen AT89C51 (31)"

Man kann sich aber die Abläufe abgucken und sogar die Funktionen nahezu 
eins zu eins übernehmen und zu eigenen Funktionen in reinem C machen.

von Wolfgang L. (smarty9797)


Lesenswert?

Sebastian R. schrieb:

> Man kann sich aber die Abläufe abgucken und sogar die Funktionen nahezu
> eins zu eins übernehmen und zu eigenen Funktionen in reinem C machen.

Das hilft ihm nur, wenn die Library keine Hardware oder SFR verwendet, 
die im 89C51 nicht existieren. Ich bezweifle, dass der TE in der Lage 
ist, sich das entsprechend anzupassen.

von Jonas A. (consta)


Lesenswert?

Sebastian R. schrieb:
> Jonas A. schrieb:
>> Aber wie lese ich "einfach" die Daten vom HX711 in C aus?
>
> Genau so wie mit einem Arduino. Man kann die vorhandenen Libraries sogar
> recht einfach übernehmen.
>
> Ansonsten:
> https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf
>
> Dort ist das Protokoll dokumentiert und sogar ein C-Snippet angegeben.
>
> Clock vorgeben und dazu Daten einlesen. Ist eigentlich recht einfach zu
> Fuß in C machbar. Muss ja auch nicht sonderlich schnell oder effizient
> sein, ansonsten könnte man das sicher dem HW-I2C beibringen.


Einfach den Code verwenden?
ADSK ist clock und ADDO ist Daten Ausgang, verstehe ich das richtig?
Ich verstehe leider nicht ganz, was das Snippet genau macht.
Erhalte ich dann schon den richtigen Wert oder muss ich anhand von 
Kalibrierungen (mit Variablen?) diesen Wert annähern?


Liebe Grüße

von Sebastian R. (sebastian_r569)


Lesenswert?

Jonas A. schrieb:
> Einfach den Code verwenden?

Nein. Die Abläufe verstehen und den Code auf deinen Controller anpassen.
Oder die Abläufe verstehen und selber umsetzen.

Jonas A. schrieb:
> ADSK ist clock und ADDO ist Daten Ausgang, verstehe ich das richtig?

Kann man so sagen.

Jonas A. schrieb:
> Ich verstehe leider nicht ganz, was das Snippet genau macht.

Spannend ist eigentlich nur die For-Schleife. Vereinfacht gesagt werden 
24bit eingelesen.

Pro Durchlauf:

- Clock High
- Daten um einen nach links shiften
- Daten-Pin high? Wenn ja, Daten um einen erhöhen
- Clock low

Jonas A. schrieb:
> Erhalte ich dann schon den richtigen Wert oder muss ich anhand von
> Kalibrierungen (mit Variablen?) diesen Wert annähern?

Du erhälst eine Zahl irgendwo zwischen 0 und 16777215. Dabei ist nichts 
kalibriert, denn sowohl HX711 als auch die Wägezelle schwanken von 
Exemplar zu Exemplar. Wenn man den Offset und die Emfpindlichkeit der 
Zelle und die Höhe der Speisespannung kennt, kann man sich grob den 
Bereich, in dem die Zahlen liegen werden, ausrechnen.

Du musst dann, sobald du Zahlen erhälst, die zum Wägebereich passen 
(Also einen ausreichend großen Bereich, ohne an die obere Grenze der 
24bit zu kommen), kalibrieren.

Dazu nimmst du den Zahlenwert, der bei 0g auf der Waage gemessen wird 
und den, der bei genau 1kg auf der Waage gemessen wird. Dazwischen 
kannst du linear skalieren. Geradengleichung, f(x)=m*x+b, zum Beispiel. 
Oder du guckst dir die map()-Funktion vom Arduino an, die kann man auch 
in normales C übernehmen.

von Jonas A. (consta)


Lesenswert?

Danke für die Hilfe.
Wir haben nun alles verbunden und bekommen Zahlenwerte (5 stellig) 
angezeigt.
Bei 0g schwankt es sehr extrem.

: Bearbeitet durch User
von Einhart P. (einhart)


Lesenswert?

Bei 24bit werden die unteren 8 immer gewaltig schwanken. Das ist kein 
Problem. Einen Mittelwert aus vielen Messungen machen und danach die 
unteren Bits vergessen.

von R5 (Gast)


Lesenswert?

Jonas A. schrieb:

> Als Mikrokontroller haben wir einen AT89C51 (31)

Mein Beileid!
Frag doch mal deinen Lehrer, der wahrscheinlich bald in Pension geht, ob 
du auch etwas moderneres verwenden darfst.

Oder ist das die Computer-Geschichtsklasse?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jonas A. schrieb:
> Bei 0g schwankt es sehr extrem.
Nur "bei 0g" oder eher "überhaupt"?

von Jonas A. (consta)


Lesenswert?

Lothar M. schrieb:
> Jonas A. schrieb:
>> Bei 0g schwankt es sehr extrem.
> Nur "bei 0g" oder eher "überhaupt"?

Der schwankt überhaupt.
Es sind allerdings bei 0g eben nur 5 Stellen, und geht kurzzeitig auch 
mal auf 6 stellig hoch.
Wie kann ich die letzten unteren 8 ausblenden?

Grüße

von Sebastian R. (sebastian_r569)


Lesenswert?

Jonas A. schrieb:
> Wie kann ich die letzten unteren 8 ausblenden?

Alles um 8 Bit nach rechts shiften.

Aber auf welchen Wert geht denn der Messwert unter Volllast? Bei einer 
theoretischen Auflösung von 16 Millionen Digits wären ein paar Tausend 
Rauschen völlig okay.

Die kann man mit Mittelung/gleitendem Filter gut in den Griff bekommen.

Wenn man dem Filter dann noch eine Abbruchbedingung verpasst, die bei 
großer Wertänderung die Filterung abbricht und neu beginnt, passt auch 
die Sprungantwort und als Anwender wartet man nicht ewig, bis der 
Messwert zum Ziel "gelaufen" ist.

von JensM (Gast)


Lesenswert?

Ihr verwendet sicher ein Breakout Board mit dem HX711.

Hat dieses Board eine Verbindung zwischen E- und GND?

Diese fehlt bei manchen Boards und muss extern gemacht werden.

Viele Grüße
JensM

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.