Hallo,
ich bin zur Zeit daran einen Thermometer zu Programmieren. Ein Bekannter
hat mir dabei auch schon geholfen, jedoch hat er sich selbst auch noch
nie mit diesem Sensor beschäftigt und macht selbst auch weniger mit
Bascom.
Als µC habe ich einen Atmega8.
Der Temperatursensor ist ein DS18B20
Die 7-Segment Anzeigen haben eine gemeinsame Anode, welche über NPN
Transistoren an +5V liegen.
Der Atmega8 ist so belegt:
Portd. 0 = a der Anzeigen
Portd. 1 = b der Anzeigen
...
Portd. 6 = g der Anzeigen
Portb. 0 = Anzeige 1
Portb. 1 = Anzeige 2
Portb. 2 = Anzeige 3
Portb. 3 = Sensor
Das Programm zur Ansteuerung der 7-Segment-Anzeige ist bereits
geschrieben, jedoch weiß ich nicht, wie ich den Sensor auslese uns
anschließend den Wert auf dem Displan ausgebe.
Es genügt eine Anzeige in ganzen Schritten.
Das bereits geschriebene Programm ist im Anhang als Textdokument.
Ich hoffe auf Hilfe :)
Gruß
Jochen
jetzt hast du in Scratch(1) das Vorzeichen und in Scratch(0) die
Temperatur in 0.5 Grad Celsius. Man sollte aber noch die CRC auswerten.
Das ist mal schnell aus dem Kopf da ich nichts mehr mit Bascom mache.
Gruß Rene
Hallo Jochen,
die wirklichen Probleme gehen erst los, wenn durch das Multiplexen das
Timing des 1wire zerhauen wird.
Seit wann kann man den Prescale eines Timers eigentlich auf "5" setzen?
Timer schrieb:> Für das Timing kann man ja den Timer solange deaktivieren, dass ist doch > nicht
das Problem
Das wirst du dann in der Anzeige bemerken, da die Bascom Befehle für
1wire schon mal mehrere ms dauern. So einfach geht das nun wieder nicht.
Ich hab mir ein Aquariumthermoter mit nem DS18S20 gebaut und das dort
auch so gemacht. Alle 60 sek wird der Sensor ausgelesen solange der
Interrupt fürs Multiplexing aus und wieder ein. Vielleicht ne Sekunde
sind die Anzeigen aus oder weniger und das stört eig wenig. Weil wenn
man draufschaut dann sind sie meistens eh an.
So,
der Code wäre fertig, jedoch gibt Probleme:
Die Anzeige zeigt immer nur "00"
Es ist alles so beschalten, wie oben beschrieben, jedoch mit dem
Unterschied, dass der Sensor nun an Portd. 7 dran hängt.
Für weitere Hilfe wäre ich sehr dankbar :)
So,
ich habe gestern mal den Code abgeändert und er sieht nun so aus:
https://dl.dropbox.com/u/41257941/temp.bas
Jedoch zeigt die anzeige nur "01" an und ändert sich nicht.
Die Anzeige erlischt nun alle 10 Sekunden für ca. 1sekunde, wie es ja
soll.
Jedoch wird nicht die richtige Temperatur angezeigt ...
Ich steh echt auf dem Schlauch.
da habe ich mich verschrieben es muß eine Subtraktion sein.
Kannst du dir die Werte des Scratch, Temperatur und T1 mal ausgeben
lassen?
So wie ich das sehe gibst du die Temperatur ja nur in ganzen Grad
Celsius ohne Nachkommastelle aus. Dann brauchst du die erweiterte
Genauigkeit nicht.
Es reicht dann ja das Vorzeichen aus Scratch(2) zu lesen eventuell
Scratch(1) anzupassen und durch 2 zu Teilen dann hast du schon die
Temperatur auf ein Grad genau. Du sparst dir dann auch die ganze
Gleitkommasache.
Hallo und einen Guten Amend miteinander
Ich habe nun auch diesen Aufbau, wie Jochen, aufgebaut und das Programm
von Rene auf den Atmega8 gemacht. Irgendwie kommt bei dem Link von
Jochen nun ein Error??
Jedoch habe ich auch das Problem, dass immer nur "00" angezeigt wird?
Kann es sein, dass etwas an dem Code nicht stimmt, weil richtig
aufgebaut habe ich es zu 100% und auch Jochen hat das Problem schon
beschrieben. Kann mir jemand weiterhelfen?
Wenn es geht Rene, da du ja anscheinend was davon verstehst ;D
Ich wünsche noch einen schönen Abend
Alexander
>Kannst du dir die Werte des Scratch, Temperatur und T1 mal ausgeben>lassen?
Wie ich schon sagte lasst euch die Werte mal ausgeben um den Fehler
einzuschränken.
Jochen schrieb:> Jedoch wird nicht die richtige Temperatur angezeigt ...Ich steh echt> auf dem Schlauch.
Hallo Jochen,
hast du denn inzwischen mal in das Datenblatt des Sensors geschaut oder
wartest du nur darauf, dass Rene dir ein fertiges Programm abliefert?
Dann hättest du vielleicht auch erkannt, dass Renes Auswertung
offensichtlich für einen DS1820 geschrieben ist, du aber scheinbar einen
DS18B20 verwendest. Und dann sind die Ergebnisse durchaus
nachvollziehbar.