www.mikrocontroller.net

Forum: Codesammlung Thermometer mit ds18s20 und LED Annzeige

Autor: Paul Baumann (Gast)
Datum: 18.11.2003 20:02
Dateianhang: thermometer0_1.bas (4,4 KB, 896 Downloads)

Hallo!
Hier ist ein Prg für ein Thermometer mit 7 Segment LED
Anzeige.
Vielleicht kann es auch ein anderer brauchen!

MfG Paul
Autor: peter dannegger (Gast)
Datum: 19.11.2003 11:51

Und das funktioniert wirklich ?

Ich kann nirgends die mindestens 500ms Wartezeit für die Wandlung
entdecken und das Busy-Waiting ist ja auch auskommentiert.

Wenns also doch funktioniert widerspricht es jedenfalls völlig den in
dem Datenblatt angegebenen Methoden.


Auch dürfte das Digit0 wesentlich heller leuchten, da ja dann immer die
Mainloop länger dauert wegen der 1-wire Sachen.
Deshalb multiplexe ich immer im Timerinterrupt.


Peter
Autor: Paul Baumann (Gast)
Datum: 19.11.2003 19:02

Hallo Peter!
Ja, das funktioniert wirklich! ...und ganz ohne Assembler :-)))
Ich konnte nach dem Testen die Busy Abfrage herausnehmen, da es
offenbar mit dem Wandeln im DS1820 schneller geht als angegeben.

Mit dem letzten Digit hast Du recht; es ist ein kelin wenig heller.
Aber es ist scön, wenn einer das PRG im Kopf durchforstet und es nicht
nur einfach so hinnimmt!

MfG Paul
Autor: peter dannegger (Gast)
Datum: 19.11.2003 22:45

Ich vermute mal, der DS18S20 ignoriert weitere Startbefehle während der
Wandlung und hat ein extra Latch, daß die alte Wandlung ausgibt,
solange die neue noch läuft.

Da das aber alles undokumentiert ist, würde ich es lieber nicht so
machen.

Die alten DS1820 hatten jedenfalls während einer Wandlung nur Mist
ausgegeben.


Für eine 1/10 Grad Anzeige sollte man außerdem nur alle 5s oder noch
länger wandeln, da sonst der erhöhte Stromverbrauch während der
Wandlung eine merkbare Eigenerwärmung verursacht (+0,1..0,3°).


Peter
Autor: Paul Baumann (Gast)
Datum: 20.11.2003 21:24

Hallo Peter!
Ich habe mir ein Präzisionsthermometer geliehen, welches
am gleichen Messort 0,1 Grad weniger anzeigt. Die Linearität
ist im ganzen Bereich gleich gut. Somit bin ich ganz zufrieden
mit dem Resultat.
Ich habe das Display aus einer alten Personenwaage. Weil es so
schön gross ist, (5 cm hohe Ziffern) habe ich halt das Thermometer
gebaut.
Ich baue schon seit etlichen Jahren Ekeltronikkram, aber noch nicht
sehr viel mit MC s.
Da ja die Syntax von Assemblern immer eine andere ist, arbeite ich
lieber mit Basic oder Pascal.

Du schriebst, dass Du lieber im Timerinterrupt multiplext. Davon
riet mir mein Arzt auf Befragen ab.
Er empfahl statt dessen intravaginale Injektionen!

MfG Paul
Autor: peter dannegger (Gast)
Datum: 20.11.2003 22:03

"0,1 Grad weniger anzeigt"

Das ist aber purer Zufall, der Fehler darf ja bis zu +/-1° betragen.


Die Eigenerwärmung kriegst Du aber nur so raus, daß Du den Sensor
längere Zeit (>30min) im Standby, d.h. ohne Wandlung an ruhiger Luft
betreibst und danach die Wandlungen aktivierst.
Dann wirst Du ab der 1. Messung ein Ansteigen beobachten und daß ist
dann der Fehler durch die Eigenerwärmung.


Wenn Dein Arzt was von Timerinterrupts versteht, dann hat er den
falschen Beruf und Du solltest ihn schleunigst wechseln. Er kann ja
nicht mal Dein Geschlecht erkennen (intravaginale Injektionen!).


Peter
Autor: Henning Halm (Gast)
Datum: 21.11.2003 10:10

Man sollte die Kirche im Dorf lassen. Ich finde es toll, wenn ein
Hobbyelektroniker sein Programm ins Netz stellt. Vielleicht ist es
Zufall, vielleicht wurde der DS18S20 verbessert, auf jeden Fall scheint
es zu funktionieren. Am einfachsten ist es, wenn es der Zweifler selbst
ausprobiert und dann sein Ergebnis mitteilt. Mit Pauschalaussagen ist
niemanden gedient.
Autor: peter dannegger (Gast)
Datum: 21.11.2003 11:06

@Henning

"Am einfachsten ist es, wenn es der Zweifler selbst
ausprobiert und dann sein Ergebnis mitteilt. Mit Pauschalaussagen ist
niemanden gedient."

Ich habs ausprobiert und dabei besagte Eigenerwärmung beobachtet.

Es geht ja auch aus dem Datenblatt hervor:

Standby: 1µA
Active: 1,5mA

Und 5V * 1,5mA = 7,5mW sind schon beträchtlich. Das wird Dir auch jeder
bestätigen, der andere Sensoren (z.B. PT100) nimmt.


Es sei denn, man will die Erwärmung absichtlich haben, z.B. um die
Strömungsgeschwindigkeit zu messen.


Peter
Autor: ---- (Gast)
Datum: 21.11.2003 11:23

@Henning:
Wem wäre dann geholfen, wenn Codebeispiele hier vorgestellt werden, von
denen man nicht sicher sein kann, daß sie funktionieren?

Einem Anfänger ohne Referenzwissen? sicher nicht.
Einem ders sowieso schon besser weiß? der braucht das Codebeispiel
nicht.

Also kritische Betrachtung ist enorm wichtig. Peter konnte sogar die
Nebenwirkungen (LED heller) aus dem Code rauslesen. Und das das
Originalprogramm sich nicht um das Timing/Ausleseintervalle usw.
kümmert, mag in diesem Falle funktionieren - im Nachbaufalle aber evtl.
nicht!

---- (QuadDash).
Autor: Paul Baumann (Gast)
Datum: 21.11.2003 13:05

Hallo Männer und Frauen!

Ich habe das Prg für ein simples Zimmerthermometer geschrieben.
Es erhebt keinen Anspruch auf absolute Genauigkeit und Perfektion.

Ich denke, +/- 0,1 Grad reichen für das Wohnzimmer.:-))

Wenn sich aber jemand berufen fühlt, Verbesserungen und ent-
sprechende Änderungen einzuarbeiten: Feuer frei!

Es werden ohnehin nicht viele Codebeispiele in das Forum gestellt;
da dachte ich mir nichts Böses.

Mfg Paul
Autor: peter dannegger (Gast)
Datum: 21.11.2003 17:54

@Paul,

"Ich habe das Prg für ein simples Zimmerthermometer geschrieben.
Es erhebt keinen Anspruch auf absolute Genauigkeit und Perfektion."

das hat ja auch niemand verlangt.

Aber es muß schon erlaubt sein, Verbesserungsmöglichkeiten zu
benennen.
Ob Du sie auch ausprobierst ist allein Deine Sache.

Ich freue mich jedenfalls immer, wenn jemand was zu meinen Beispielen
schreibt und besonders, wenn er anderer Meinung ist oder Verbesserungen
findet, denn nur dadurch kann man lernen.


Und wenn Du nicht weißt, was "multiplexen im Timerinterrupt"
bedeutet, dann brauchst Du das nur zu sagen, das nimmt Dir keiner
übel.
Aber dann blöde Sprüche abzulassen, das ist nicht schön :-(

Das hat auch nichts mit Assembler zu tun, auch in Bascom kann man
Interrupts benutzen.


Peter
Autor: Paul Baumann (Gast)
Datum: 21.11.2003 19:12

@Peter

Peter, ich wollte Dir nicht in irgendeiner Art auf den Schlips
treten. Ich habe auch nichts gegen Kritik und Anregungen. So habe
ich das nicht gemeint und gewollt.

Auch weiss ich, was ein Timerinterrupt ist, wie man ihn in Bascom
programmiert und multiplexen konnte ich in meinem PRG auch genug :-)

Ich habe ein lebhaftes Vorstellungsvermögen, deshalb habe ich mir
vorgestellt, wie DU im Timerinterrupt multiplext (ROTFL). Siehe Deine
erste Antwort.

Das war nicht so bierernst zu sehen.

MfG Paul
Autor: Paul Baumann (Gast)
Datum: 02.12.2003 19:13

So, das Gerät existiert nun in 4-facher Ausführung und die
Messwerte sind am gleichen Ort auch gleich hoch. (Bis auf den
unvermeidlichen Digitfehler in der Kommastelle).

@ QAUDDASH:Es ist also reproduzierbar.

MfG Paul
Autor: stromi (Gast)
Datum: 20.08.2004 00:55

@Paul
sollte dich nicht abschrecken hier zu posten.
meine Codes sind zB. auch nicht immer eingerückt wie es sein sollte,
soll ja helfen.... Und das Programm "funst" auch bei mir, zwar mit
LCD
aber auch wunderbar.
Tschaui
Autor: Paul Baumann (Gast)
Datum: 20.08.2004 12:56

Hallo Stromi!

Na da bin ich ja entzückt. (Wie Kojak sagen würde) :_))

MfG Paul
Autor: mike (Gast)
Datum: 20.01.2008 12:20

Hallo Paul Baumann

Habe dieses Programm mal mit Bascom 1.11.9.0  compiliert
und es erscheinet ein Fehler für

Fourdigitdisplay = Format(str(decigrades) , "00") +
'Format(str(tfrac) , "00")

kann es sein das dies aus der neueren Version herrührt und die damalige
Version dies nicht erkannte.

Programm ist ja auch schon 5 jahre alt.

gruß mike
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 14:16

Möglich ist alles. :-)
Nein, im Ernst: WAS für eine Fehlermeldung gibt es denn? Mit der Version
1.11.8.1 habe ich es ebn noch einmal fehlerfrei kompilieren können.

MfG Paul
Autor: mike (Gast)
Datum: 20.01.2008 14:35

Hallo Paul

Also:

Error: 213 Line 50
String expected for assigment[STR(DECIGRADES)]

Error:  13 Line 50
Incalid datatype[[0011]200]

Error: 124 Line 50
Loop expected

wenn ich die Zeile rauskommentiere ,compiliert er es,aber dann fehlt
ja was.

danke Mike
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 14:48
Dateianhang: THERMOMETER0_1.HEX (4,9 KB, 94 Downloads)

Keine Ahnung, was bei Dir passiert. :-(

Ich habe Dir mal die .hex-Datei angehangen, die ich eben noch einmal
daraus
"hergestellt" habe.

MfG Paul
Autor: mike (Gast)
Datum: 20.01.2008 14:52

Habe mir eben noch mal das Demo geladen ist 1.11.8.7

Jetzt kommt nur der Fehler 13  Invalid datatype[200].

Die Älteren Demo´s habe ich leider nicht,hatte mir mal
Bascom gekauft,letztes Jahr und dacht das ich so auf dem neuesten
Stand bin und alle bugs die bisher enthalten sind beseitigt.

mfg Mike
Autor: mike (Gast)
Datum: 20.01.2008 14:53

Danke werde ich mal probieren.

Mike
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 15:01

Nein, das ist wie bei jeder Software: kleinere Bugs werden nach und nach
durch größere ersetzt. ;-))

MfG Paul
Autor: mike (Gast)
Datum: 20.01.2008 15:09

wohl wahr, hoffe das ich das Thermometer so hin bekommen.Wenn
nicht melde ich mich noch einmal.

mfg Mike
Autor: Avr Nix (avrnix) Benutzerseite
Datum: 20.01.2008 15:20

Hallo Paul,

schönes Projekt! Hatte das mal vor paar Jahren mit einen Nokia Display
wie hier beschrieben gemacht
http://comwebnet.weimars.net/index.php?option=com_...

ist auch in Bascom, hatte mir da im Netz eine Tabelle gefunden welches
eine Auflösung von 0,1 Grad versprach, obwohl der Sensor +-0,5 Grad
Messen kann
(DS18S20).

Musstest du was kalibiren oder eine Konstante einbauen?
Weil +-0,1 Grad ist schon was!
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 15:46
Dateianhang: ds1820.pdf (276 KB, 185 Downloads)

Die Routine stammt aus dem Datenblatt vom Onkel Dallas/Maxim. Ich habe
es mal angehängt.

MfG Paul
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 15:47
Dateianhang: Thermo.zip (285,2 KB, 178 Downloads)

Hier noch ein paar Bilder vom Apparat.

Paul
Autor: Rolf Im forum (for_ro)
Datum: 20.01.2008 18:17

Hallo,

mike wrote:

> Fourdigitdisplay = Format(str(decigrades) , "00") +
> 'Format(str(tfrac) , "00")

Hier bekommst du den Fehler wegem des "+"-Zeichens am Ende der Zeile.
Wenn du den zweiten Teil auskommentieren willst, dann mach das ' vor das
+

Den Format Fehler bekommt man, weil Bascom früher erlaubt hat, als Input
für die Format Funktion nicht nur einen String, sondern auch eine
Funktion, die einen String zurückgibt, zu verwenden. Heute geht das
nicht mehr. Du musst also so schreiben:

Temp_str = str(decigrades)
Fourdigitdisplay = Format(Temp_str , "00")
Temp_str = str(tfrac)
Fourdigitdisplay = Fourdigitdisplay + Format(Temp_str , "00")

@avr_nix
Warum denkst du , dass der DS18s20 nur 0,5° Auflösung hat? Er hat
tatsächlich 1/16 ° Auflösung, überträgt diese aber nicht in den Bytes 1
und 2, sondern im Byte 7. Musst du dir im Datenblatt mal durchlesen. Die
besagte Tabelle verspricht ja nicht die Auflösung, die muss der Sensor
schon liefern und tut es auch.

Gruß

Rolf
Autor: mike (Gast)
Datum: 20.01.2008 18:38

Danke für die Antwort:

Habe jetzt das mal getestet.Musste aber noch
Temp_str = str(tfrac) auskommentieren.
str(tfrac) ist ja nicht declariert und ich weiss auch nicht
wozu.Wenn ich das so mache funzt es.

was auch noch dazu kommt ist der unterstich der entfernt
werden musste,sehe ich das so richtig.
Temp_str = str(decigrades) in  Tempstr = str(decigrades)


mfg Mike
Autor: Rolf Im forum (for_ro)
Datum: 20.01.2008 18:44

Hallo Mike,
ja, es muss Tempstr heissen, weil die Variable ja so deklariert ist.
Hatte ich aus dem File Thermometer0_1.bas falsch in Erinnerung.
Ich schätze mal, dass der Autor mit tfrac den Nachkommateil meinte, der
aber jetzt im Programm nicht mehr enthalten ist.

Gruß

Rolf
Autor: Paul Baumann (Gast)
Datum: 20.01.2008 18:48

Ich hatte "Tempstr" im Text. Wenn Du die Änderung von Rolf nehmen
willst,
mußt Du natürlich alles andere auch "Temp_str" nennen.

MfG Paul
Autor: mike (Gast)
Datum: 20.01.2008 18:49

Danke,muss morgen erst mal die Hartware aufbauen.
Dann wird sich herausstellen,ob es funktioniert.
Habe ja auch die HEX von Paul Baumann bekommen,
denke das diese 100% läuft.Er hat ja schon einige Anzeigen
am laufen.

mfg Mike
Autor: Mike Köppl (helimike0705)
Datum: 25.01.2008 19:37
Dateianhang: thermometer0_1-1.bas (5 KB, 129 Downloads)

Hallo ,

So habe mir das Thermometer mal auf dem Steckbrett aufgebaut.
Funktioniert prima,habe auch eine kleine änderung vorgenommen.
Jetzt leuchten die Segmente gleich hell und ein kleines Gradzeichen
im oberen Teil wird bei mir angezeigt.Okay eine kleine einschränkung,
die mich aber nicht stört,ist,die anzeige wird nach rund 20 sek. immer
kurz (1/10 tel sek. denke ich)dunkel geschalten.
Habe so mit einfachen mitteln die Erwärmung des Sensors eliminiert und
eine gleichbleibende helligkeit.

Danke nochmal an "Peter" und "Rolf Im forum"

Gruß Mike
Autor: Paul Baumann (Gast)
Datum: 25.01.2008 20:05

Na prima! Da gibt es nun 5 Geräte davon. :-)

MfG Paul
Autor: Mike Köppl (helimike0705)
Datum: 25.01.2008 21:57

Entschuldige : Nicht Peter soll es sein .
der Dank geht an "Paul Baumann".

Dies wollt ich nur noch klarstellen.

Wenn mein projekt fertig ist gibt es auch noch ein Bild.

Mike
Autor: Paul Baumann (Gast)
Datum: 26.01.2008 16:57

Danke für den Dank. ;-)

MfG Paul
Autor: Albert Doeberl (albert32)
Datum: 27.01.2008 11:30

@ peter dannegger

Und das funktioniert wirklich ?

Ich kann nirgends die mindestens 500ms Wartezeit für die Wandlung
entdecken und das Busy-Waiting ist ja auch auskommentiert.

Wenns also doch funktioniert widerspricht es jedenfalls völlig den in
dem Datenblatt angegebenen Methoden.

Hallo, Claus Kühnel schreibt in seinem Buch Programmieren der AVR RISC
Mikrokontroller mit BASCOM-AVR - "Das Timing der Datenübertragung soll
anhand von Abbildung 124 kurz erläutert, aber nicht weiter vertieft
werden.

Die BASCOM-AVR versteckt diese Anforderungen vor dem Programmierer.
Durch die 1-Wire Instruktionen ist das erforderliche Timing
sichergestellt."

albert
Autor: Paul Baumann (Gast)
Datum: 27.01.2008 14:46

Ich hatte erst eine Sequenz drin, die darauf wartete, daß der DS1820
"FF" zurückgibt, als Zeichen dafür, daß er mit dem Wandeln fertig ist.

Er ist aber wesentlich schneller fertig damit, als es im Datenblatt
steht.
Dadurch konnte ich das auskommentieren. Der Meßwert blieb der Gleiche.

Ich nehme an, daß der Onkel Dallas/Maxim auf "Nummer sicher" gehen
wollte.

Wurst-Käse Fall, oder wie das heißt. ;-)

MfG Paul
Autor: Mike Köppl (helimike0705)
Datum: 03.02.2008 14:48
Dateianhang: thermometer01mini-maxi.bas (6,2 KB, 117 Downloads)

Hallo Paul,
und der Rest des Forums.Paul habe mal dein Thermometer nachgebaut und
auch gleichzeitig erweitert,man kann jetzt Mini- und Maximal-temperatur
abfragen.Die Anzeige ist gleichmässig hell und die DS1820 abfrage wird
auch etwa alle 5 Sekunden abgefragt.Das aufrufen der Mini bzw.
Maxi-temp.wird auch rund 5 Sekunden angezeigt,der wechsel ist natürlich
auch möglich innerhalb der 5 sek.Denke das du damit einverstanden bist,
das ich dein Programm benutzt habe und ein klein wenig verändert.

Habe mit diesem Teil wieder einen menge gelernt,danke.


mfg Mike Köppl
Autor: Paul Baumann (Gast)
Datum: 03.02.2008 16:05

Na freilich bin ich einverstanden. Deswegen habe ich ja den Quelltext
veröffentlicht, damit man ihn verändern und auf seine Bedürfnisse
zuschneiden kann.

Daß das "C" für Celsius bei mir heller leuchtet als die anderen Segmente
hatte ich absichtlich so gemacht, damit man gleich sieht, daß das ein
Thermometer ist.

MfG Paul
Autor: Max (Gast)
Datum: 14.05.2008 19:50

Das könnte was sein, was ich mal nachbauen könnte freu

Habt ihr die Segmentanzeige direkt an den AVR gehängt, oder über ein
Treiberarray wie das ULN2003?

In der bas-Datei steht das leider nicht genau drin.

Gruß und vielen Dank für die Anregung

Max
Autor: Paul Baumann (Gast)
Datum: 14.05.2008 20:50

Ja, die Anzeigen hängen direkt (über entsprechende
Segmentvorwiderstände) und 4 Treibertransistoren am MC. Es wird wohl bei
neueren sog. Low-Current Anzeigen auch ohne die Transistoren gehen.
Natürlich muß dann die Invertierung (der NOT-Befehl) raus.

MfG Paul
Autor: Max (Gast)
Datum: 14.05.2008 21:22

Ok,

danke für die Antwort. Besser ist es dann über 4 PNP-Transistoren  oder?
Desweiteren habe ich gerade mal geguckt, ob es schon Anzeigen gibt, bei
denen die Segmente bereits zusammengefasst sind, damit ich diese
multiplexen kann und nicht alle einzeln verdrahten muss....habe aber
leider nichts gefunden.
Autor: Paul Baumann (Gast)
Datum: 14.05.2008 21:37

>Besser ist es dann über 4 PNP-Transistoren  oder?
Das hängt davon ab, ob Du Anzeigen mit gemeinsamer Anode oder
gemeinsamer Kathode hast.

Vierstellige Anzeigeelemente gibt es in rauhen Mengen. ;-)

Zum Bleistift:

http://www.conrad.de/Bauelemente-Bausatze/4_digit_led.sap

...oder Du gehst zum freundlichen Fernsehmann, läßt Dir einen alten
Sat-Receiver geben und veranstaltest ein schönes Schlachtfest. :-)

MfG Paul
Autor: Max (Gast)
Datum: 14.05.2008 21:50

"...oder Du gehst zum freundlichen Fernsehmann, läßt Dir einen alten
Sat-Receiver geben und veranstaltest ein schönes Schlachtfest. :-)"

Habe ich mir auch schon gedacht, da ich da ja arbeite^^
Aber in den alten zB GRundig sind einzelne drin, die über ein IC
angesteuert werden.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net