Datum: 18.11.2003 20:02
Hallo! Hier ist ein Prg für ein Thermometer mit 7 Segment LED Anzeige. Vielleicht kann es auch ein anderer brauchen! MfG Paul
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
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
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
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
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
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.
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
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).
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
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
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
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
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
Datum: 20.08.2004 12:56
Hallo Stromi! Na da bin ich ja entzückt. (Wie Kojak sagen würde) :_)) MfG Paul
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
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
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
Datum: 20.01.2008 14:48
Keine Ahnung, was bei Dir passiert. :-( Ich habe Dir mal die .hex-Datei angehangen, die ich eben noch einmal daraus "hergestellt" habe. MfG Paul
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
Datum: 20.01.2008 14:53
Danke werde ich mal probieren. Mike
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
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
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!
Datum: 20.01.2008 15:46
Die Routine stammt aus dem Datenblatt vom Onkel Dallas/Maxim. Ich habe es mal angehängt. MfG Paul
Datum: 20.01.2008 15:47
Hier noch ein paar Bilder vom Apparat. Paul
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
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
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
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
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
Datum: 25.01.2008 19:37
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
Datum: 25.01.2008 20:05
Na prima! Da gibt es nun 5 Geräte davon. :-) MfG Paul
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
Datum: 26.01.2008 16:57
Danke für den Dank. ;-) MfG Paul
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
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
Datum: 03.02.2008 14:48
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
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
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
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
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.
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
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