Forum: Projekte & Code Low Cost Waage über RS232 und I2C TWI


von Mathias F. (savag)


Angehängte Dateien:

Lesenswert?

Hallo,
da ich hier immer eher nur Infos beziehe will ich heute auch mal etwas 
beitragen. Da ich wie anscheinend andere auch vor dem Problem stand ein 
Gewicht auf den PC möglichst günstig zu bekommen habe ich mir gedacht 
bauen wir uns eine Waage. Schön mit Wägezelle Instrumentationsverstärker 
Komperator und einem Integrator. Kurz ich habe mir Discret ein ADC 
aufgebaut um mehr als nur die 10bit des Atmega8 verwenden zu können.
Da kam ich auf eine Genauigkeit von +-2g leider nicht das was ich mir 
vorstellte.
Dann habe ich den zweiten weg versucht Display rückwandeln. Leider habe 
ich hier nicht all so viel Info gefunden.
Naja da kam der Punkt selber machen und verstehen.
Bin leider ein C anfänger daher ein etwas seltsamer Code vermutlich aber 
funktioniert einwandfrei.
Für die TWI kommunikation habe ich die lib von Junghans verwendet.
Schaltplan kommt noch habe aber vorab schon die Pinbelegung mit auf dem 
Foto.

VLT kann es ja jemand gebrauchen.

Gruß Mathias

von savag (Gast)


Lesenswert?

Noch ein kleiner aber wichtiger zusatz für die die nicht auf den 
Schaltplan warten wollen. Pin 1 und 3 des LCD im Bild von Links aus nach 
rechts gezählt befindet sich noch vor dem Atmega ein
Schmidttrigger-Inverter ohne diesen funktioniert es nicht und mir ist es 
auch nicht gelungen (wollte da jetzt nicht so viel Zeit investieren) das 
nur über die Software zu realisieren. Problem waren die verschiedenen 
Spannungswerte die am LCD sind.

Gruß

von oink (Gast)


Lesenswert?

Dein Text ist leider schwer zu lesen.
Es gibt hier auch ein anderes Projekt, wo das LCD ausgelesen wird (habe 
keinen Link parat).

von Savag (Gast)


Lesenswert?

Hallo,
Ich weiss nicht ob du das hier meinst:
http://www.mylifesucks.de/oss/c-scale/
Das war jedenfals das an dem ich mich KURZ versucht habe. Hatte sogar 
die relativ gleiche Waage. Das Display war aber aber auf jedenfall genau 
das gleiche! Doch das Teil ist bei mir einfach nicht gelaufen. In meinen 
Augen war die Pegelerkennung das Problem! Hatte sogar mit verschiedenen 
Ub des Atmegas experimentiert um den Schwellwert zu veschieben, brachte 
alles nichts.

Ich will zum Schaltplan auch noch ein kleiner Bericht machen wo die 
Messungen mit dem Oscar zu sehen sind. Um zu verstehen wie der Code 
Arbeitet MUSS man auch wissen wie ein LCD mit 4 Backplanes arbeitet, da 
musste ich mich auch erst Schlau machen. Aber im Grunde habe ich es erst 
verstanden als ich mir meine Fragen selber ERMESSEN habe.

Aber ich kann das hier auch kur mit Worten fassen was der Code so macht.

Auf dem Bild habe ich 4 Pins in ein Kasten gezeichnet. Diese Pins kann 
man als eine art Takt sehen. Diese Pins haben das gleiche Signal jeweils 
mit einer Phasenverschiebung. Der Code braucht zum arbeiten aber nur 2 
dieser Takte und zwar Pin 1 und Pin 3. 2 Deshalb da ich die Interrupts 
des Atmega verwende und der nur 2 Eingänge hat. Also wird Takt an Pin 2 
z.b aus der Abfallenden Flanke von Pin 1 erzeugt und Takt 4 von der 
abfallenden Flanke von Pin 3. Da ich ein Problem mit der ekennung der 
Pegel hatte da so ein Display zwischen Pegel besitzt habe ich ein 
Invertierender Schmidttriger verwendet. ganz Simpel.
INT0 ist so eingestellt das er erst auf eine steigende Flanke von Pin1 
reagiert. Sobald dieser INT aus geführt wird schaut man sich alle Pins 
an die in dem Moment auf HIGH liegen. Dieses ergebnis wir dann per bool 
oder 1 bzw 0 in einer Variblen abgelegt. Zuletzt wir dann das Register 
noch umgeschaltet das ein Interrupt ausgeführt wird sobald an PIN1 eine 
fallende Flanke entsteht. Dadurch gelangen wir an Takt 2!
Die Interruptroutinen sind mit einem IF vor der Auswertung ausgestattet 
das überprüft wie das Interruptregister gesetzt ist sonst würde ja immer 
Takt 1 und Takt 2 ausgewertet werden in einem durchgang was nicht 
funktionieren würde.
Diese ganze Interruptroutine wird auch bei INT11 abgearbeitet.
Nachdem alle 4 Takte ausgewertet wurden kann man daraus (hierin der Main 
while schleife) eine Zahl generieren (SEG1, SEG2....) Diese Zahl wird 
dann nur noch mit ITOA an RS232 gesendet (mit steuerbefehl u -> UNIT , t 
-> TAR als eingabebefehl (Taster der Waage bedienen) mit g -> GET kann 
man dann den Wert auslesen) Das ganze befindet sich in der Switch-Case. 
Genauso für I2C betrieb. hier werden die ergebnisse der Segmente eben in 
einzeln in 4x Txbuffer gelegt die dann eben am PC zu einer Zahl 
zusammengesetzt werden da ich ja nur 8bit in ein Sendebuffer packen 
kann.

Hoffe das es hierduch etwas verständlicher wurde.

Wie gesagt genauer Schaltplan mit etwas mehr erklärung kommt noch.

Gruß

von Mathias F. (savag)


Angehängte Dateien:

Lesenswert?

Hallo, hier noch der versprochene Schaltplan, noch schön per Hand.
Hoffe das beseitigt irgendwelche Fragen.

Gruß

von Mathias F. (savag)


Lesenswert?

Hallo,
hier habe ich noch ein Video das die funktion zeigt. Bitte mal auf die 
Steuerzeichen achten.

http://www.youtube.com/watch?v=heYc82iN6wo&feature=youtu.be

von DeDouby (Gast)


Lesenswert?

Danke...

Ich werde zum Auslesen deine Methode benutzen. Möchte folgendes 
nachbauen und verbessern:
http://learn.adafruit.com/smart-cocktail-shaker/overview

Mir gefällt bei der Anleitung die Waage nicht. Denke das ich mit deiner 
Version besser bedient bin.

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.