History:
29.06.2011 - Die Messstation läuft seit 2 Monaten und überträgt
Daten ins Internet.
Der Feuchtesensor HH10D im nässegeschützten Gehäuse liefert bei
niedrigen Temperaturen Mist
März 2012 - Der Feuchtesensor wird nach innen verlagert,
die Berechnungsroutinen neu angepasst
Die Außentemperatur misst jetzt ein Analogsensor LM235
28.05.2017 - Nach längerem Stillstand wurden der schrottige
HH10D sowie der nie zuverlässige LM235 durch einen
DHT22 abgelöst, der ab sofort rel. Luftfeuchtigkeit und Außentemperatur
liefert. Der Drucksensor HP03S wird beibehalten
In diesem Projekt sind folgende Ideen und Ansätze vereinigt worden:
Schon einige Male waren mir die Sensoren HH10D (Feuchtesensor) und HP03S (Temperatur- und Luftdrucksensor) in der Pollinliste aufgefallen. Der Preis von ca. 10 Euronen hat mich dann doch stets vom Kauf abgehalten. Bis - ja, bis mir mein Temperaturlogger gefühlt zu wenig Information lieferte. Innen- und Außentemperatur waren halt irgendwann zu wenig, zur langzeitlichen Klimadoku wollte ich auch andere Daten wie Druck und Feuchte erfassen und - das Ganze sollte auch noch etwas ausbaubar sein - irgendwann kommt vielleicht eine Wolkenerfassung, Windaufzeichnung etc. dazu. Ferner stand das Runderneuern der bereits vorhandenen Bibliotheksmodule an.
Mit diesem letzteren Bestreben ging ich also an die Arbeit. Es gab Auslagerungen, Zusammenführung, Vereinheitlichung und diverse Verbesserungen. Langsam kristallisierte sich dabei die Ausrichtung der Bemühungen auf die oben genannten Sensoren und einige weitere heraus, die irgendwann demnächst einer näheren Betrachtung unterzogen werden (One-Wire-Sensoren von Dallas, DCF77-Uhr ...).
Beide Klimamodule, die man über Pollin beziehen kann, nutzen zur Übertragung von Koeffizienten für die Kalibrierung den I2C-Bus. Der HP03S liefert auch die Messwerte auf diesem Weg, während der HH10D die Luftfeuchtewerte über eine Frequenz codiert, die es für die Auswertung zu messen gilt. Die Datenblätter des Herstellers (bitte nur die Originaldatenblätter von HOPE RF verwenden, Pollin Datenblätter spicken vor diversen gravierenden Fehlern!) enthalten die zur Kalibrierung notwendigen Formeln. Jeder Sensorchip ist auf seiner kleinen Platine mit einem seriellen EEPROM versehen, in dem die werksseitig festgestellten Koeffizienten abgelegt sind. Muss ein Sensor getauscht werden, dann bringt also der neue seine eigenen Koeffizienten an Bord wieder mit. Eine Änderung des Programms im AVR ist daher nicht nötig, weil dieser einfach die neuen Korrekturfaktoren statt der alten ausliest.
Das Feuchtemodul HH10D enthält neben dem eigentlichen Sensor auch ein EEPROM vom Typ 24C02, welches 2 2-Byte-Korrekturkoeffizienten enthält, die zum Verrechnen der über den Ausgang FOUT ausgegebenen Frequenz dient. Der eigentliche kapazitive Sensor ist am zweiten IC, einem ICM7555, angeschlossen, der als astabiler MV die Frequenz erzeugt.
Der Anschluss des Moduls an einen AVR-Controller ist völlig unspektakulär und erfolgt über eine Steckleiste mit einem Pinabstand von 2,54mm. Beim Betrachten der Oberseite des SMD-bestückten Moduls (die Seite mit den ICs) liegen die Stifte auf der vom Betrachter abgewandten Seite. Abb. 1 gibt die Beschaltung an.
Abb. 1: Beschaltung des HH10D
SCL und SDA kennen wir bereits aus dem I2C-Kapitel, sie vertragen bei mir (seit 2 monatigem Dauereinsatz) Spannungen bis 4,3 V. Eine Anpassung von 3,3V auf die üblichen 5,0V auf dem I2C-Bus habe ich in meiner Anwendung daher nicht vorgesehen. FOUT stellt die Messfrequenz zur Verfügung. Bemerkenswert ist der Vdd-Anschluss. Hier dürfen Betriebsspannungen von 2,7 bis maximal 3,3V angeschlossen werden. Realisiert wird das über einen Spannungsregler LM317LZ im Zusammenhang mit einem Trimmpoti. Die hier eingestellte Spannung bedient auch den HP03S und diente ferner als Referenzspannung für den ATMega8 zur Erfassung der externen Temperatur über den Sensor LM235.
Die Korrekturkoeffizienten für Empfindlichkeit und Offset liegen im EEPROM des HH10D (Basisadresse 0xA2) auf Speicheradresse 10:11 und 12:13 (!DEZIMAL!!!). Um das herauszukriegen muss man das ORIGINAL Datenblatt sehr genau lesen, auch den Schaltplan, der im Datenblatt angegeben ist muss man genau interpretieren und wissen, wie ein 24C02 adressiert werden muss. Das Pollindatenblatt ist Schrott, das kann man voll vergessen, das spickt vor Fehlern, die teilweise wohl darauf zurückzuführen sind, dass von einem anderen - bereits fehlerhaften Datenblatt - teilweise wieder falsch abgeschrieben wurde und darüberhinaus auch noch weitere hausgemachte Schreib- oder Interpretationsfehler passiert sind. Tatsachen sind jedenfalls folgende - ich stelle erst einmal zusammen:
a) Auf dem HH10D-Board ist ein 24C02 EEPROM verbaut. Die haben die Basisadresse 0xA0 (siehe Datenblatt des Bausteins). Daher muss die Basisadresse des EEPROMs auf dem Board zwingend mit 0xA beginnen.
b) Schaut man sich den Schaltplan auf dem HOPERF Datenblatt an, dann sieht man, dass die Adressleitungen A1 und A2 auf Masse liegen und A0 an +Vcc angeschlossen ist. Darau ergibt sich eine Hardware Adressierung von 0b001. Diese Information steht - allerdings auch recht irreführend im HOPERF Datenblatt: "the eeprom physical address is fixed to 01" heißt es dort auf Seite 3 ganz unten. Wenn man jetzt das Datenblatt nicht ganz liest, meint man natürlich, dass das EEPROM tatsächlich mit der Basisadresse 0x01 anzusprechen ist. Das kann aber gar nicht sein, denn dann müsste 0x00 die Basisadresse zu Schreiben ins EEPROM sein und 0x01 wäre somit nicht die Basisadresse. (Siehe Datenblatt zum EEPROM 24C02)
c) Nun liegen die drei Hardware Adressleitungen des 24C02 aber nicht auf Byte 0,1 und 2 sondern auf 1, 2 und 3. Das bedeutet, dass die Bitfolge 0b001 um eine Stelle nach links zu verschieben ist und im Adressbyte mit der Wertigkeit 2 auftaucht. Aus 0xA0 wird damit 0xA2. An dieser Basisadresse ist der Baustein dann auch tatsächlich ansprechbar und zwar mit gelöschtem Bit 0 zum Schreiben und mit gesetztem Bit 0 zum Lesen. Also: Schreibzugriff 0xA2 und Lesezugriff 0xA3!
Hier zur Verdeutlichung noch einmal das Bilden der EEPROM-Adresse in Bitschreibweise:
Hexadecimal | Binär | |
Basis Adresse des 24C02 | 0xA0 | 0b10100000 |
Adressbits A2:A0 | 0x02 | 0b00000010 |
Schreiben | 0x00 | 0b00000000 |
Lesen | 0x01 | 0b00000001 |
Gesamt Schreiben | 0xA3 | 0b10100011 |
Gesamt Lesen | 0xA2 | 0b10100010 |
Pollin mach aus einem 01 vom Originaldatenblatt ein noch falscheres 0x01 und schreibt auch noch dazu: "(Schreibzugriff nicht erlaubt)"
d) Den nächsten kapitalen Patzer liefert Pollin gleich in der anschließenden Tabelle. Die Koeffizienten stehen nämlich nicht an Adresse 0x10 und 0x12 im EEPROM sondern - wie im Originaldatenblatt zu ersehen- auf 10 (dezimal!!) und 12 also 0x0A und 0x0C! Lesen müsste man können, dann ist man beim Abschreiben einfach im Vorteil! Liest man die Koeffizienten von diesen Positionen, dann kommt beim nachträglichen Rechnen nämlich durchaus ein brauchbarer Wert für die Feuchte heraus.
e) Nun hätte HOPERF gut daran getan, in die Tabelle mit den Koeffizienten nicht einfach "sense" sondern "sense * 2^12" zu schreiben. Das die abschließende Division durch 2^12 in der Formel zur Wertekorrektur erklärt. Ferner ist der Koeffizient "sens" nur ein 1-Byte-Wert. Liest man den Wert von Speicherstelle 11 als LSB zum MSB aus Adresse 10 mit ein, dann ergeben sich total verkehrte Feuchtewerte.
Seit der DHT11/DHT22 auf dem Markt ist, ist der HH10D mit der frequenzcodierten Übertragung des Feuchtewerts obsolet. Damit entfällt auch die in den Versionen 1.0 und 2.0 der Wetterstation notwendige Frequenzmessung durch eine IRQ-Serviceroutine. Ferner wird auch der unzuverlässig arbeitende LM235 entfernt. Wer sich für Frequenzmessung und die Erfassung analoger Daten interessiert, kann sich im Downloadbereich die Programmsuite der Wetterstation 2.0 herunterladen und studieren. Hier wird jetzt nur die Version 3.0 vorgestellt und beschrieben.
Die gesamte Hardware (ohne Netzteil) der Wetterstation hat in einem KS-Gehäuse (120mmx135mmx40mm b x t x h), das speziell aus Acrylglasplatten gebaut wurde Platz. Die ausgelagerte Platine ist das Hardware-Interface zur Sensorperiferie. Liinks der I2C-Bus und die Steuer- und Datenleitungen, die das Druckmodul HP03S und den ehemaligen Feuchtesensor HH10D versorgt haben. Rechts das umfunktionierte Analoginterface, dessen mittlerer Anschluss jetzt den DHT22 anbindet.
Abb. 2: Das Innere der Wetterstation 3.0
Alle Platinen sind einseitig beschichtet. Das kleine HP03S-Platinchen muss mit einem spitzen Lötkolben mit einer Isolierzwischenlage auf der Lötseite der Interfaceplatine eingelötet. Hier im Detail zu sehen. Alle Platinen dieses Projekts finden sich auch als Layout für die Direktkopie sowie als Bestückungsplan in der PDF-Datei im Downloadbereich.
Abb. 3: der HP03S auf der Trägerplatine
Der HP03S benötigt neben den Leitungen SDA und SCL noch einen Takt MCLK. Das Signal wird auf der Prozessorplatine erzeugt. Auch die XCLR-Leitung gehört dem HP03S. Die Betriebsspannung des Drucksensors von 3,3V wird über das Parallelkabel von Der Prozessorplatine her zugeführt. In Abbildung 3 erkennt man auch die Pullupwiderstände (10k) für den I2C-Bus gegen +3,3V. Für die Version 3.0 der Wetterstation wird der HH10D Feuchtesensor nicht mehr verwendet, die Leitung Fout ist daher obsolet.
Abb 4: Das "Mainboard"
Die Hauptplatine der Wetterstation enthält 5 Baugruppen. Rechts unten sitzt der Linearregler 7805/1A, der die Betriebsspannung von 5V herstellt. Links daneben sitzt die standardmäßige rudimentäre RS232-Schnittstelle. Darüber befindet sich der LM317, der die 3,3V für die I2C-Sensoren bereit stellt. Rechts daneben der ATMega8 mit SPI und ehemaligem Analoginterface, das jetzt zum Anschluss für den DHT22, einen Triggerausgang für's Debugging und einen Anschluss für die Diagnose LED für das DHT22-Protokoll umfunktioniert wurde. Ganz oben liegt der Taktgenerator für den HP03S, der mittels Mehrgangpoti genau eingestellt werden kann.
Die Signale MCLK und XCLR vom NE555 und dem Pin PD6 vom ATMega8 werden durch Spannungsteiler 1k0-3k3 von 5V auf ca. 3,3V reduziert.
Abb. 5: Sensorinterfaceplatine für den DHT22, rechts Anschluss 2 und
den HP03S links
Das Hardware Sensor Interface wird normal bestückt aber mit der Lötseite nach oben auf die Hauptplatine gesteckt.
Abb. 6: Das LCD ist ebenfalls über den I2C-Bus angeschlossen
Um Portpins für das LCD zu sparen, wurde das Display über den eh schon vorhandenen I2C-Bus angeschlossen. Ein Portexpander PCF8574 sorgt für die Umsetzung seriell zu Parallel. Die für das vorhandene LCD negative Vorspannung, wird durch eine Ladungspumpe bereitgestellt, die ihren Takt durch einen NE555 erhält. Die Flachbuchse für das Flexprintkabel zum LCD sitzt auf der Lötseite, alles andere ist normal bestückt. Die Adresslage des PCF8574 kann durch drei Adressleitungen flexibel festgelegt werden. Nach dem Durchtrennen der Masse-Brücken bei JP2.a-c werden die Anschlüsse A0:A2 auf 5V gezogen. JP2.a-b bietet Brücken, die SDA und SCL an Pullupwiderstände binden.
Wetterstation 2.0 mit HP03S, HH10D und LM235
Wetterstation 3.0 mit HP03S und DHT22
Bibliothekmodul DHT
Bibliothekmodul delay
Platinenlayouts:
I2C-Interface, Prozessorplatine, Sensorinterface
Die neuesten Bibliotheksmodule für ATTiny2313/4313, ATMega8/16, ATMega48/88/168/328