Dokumentation zur Schnittstelle des Honeywell HR20(E) Heizungsreglers: Diese Dokumentation wurde von Werner Cornelius erstellt und beruht auf einer Untersuchung vorhandener Hardware. Sie erhebt keinen Anspruch auf Vollstaendigkeit oder Korrektheit. Der Autor uebernimmt daher auch keinerlei Verantwortung fuer Fehler, Probleme, Sach-, Personen sowie sonstige Schaeden, die durch die Anwendung von Erkenntnissen aus dieser Beschreibung enstehen koennen. Fuer die Dokumentation findet der Inhalt der GNU Public License Version 2 Anwendung (zu finden unter http://www.gnu.org). Dieses beinhaltet unter anderem den Haftungsausschluss sowie die Weitergabe der Information nur in vollstaendiger Form incl. diese Textes zum Urheber. Selbstverstaendlich sind Erweiterungen und Korrekturen erwuenscht. Der Regler besitzt eine 10 polige (in 2 Reihen a 5 Polen)2.54mm Stiftleiste, die sich unter einer Abdeckung auf der linken Seite des Reglers befindet (Regler an Heizung montiert mit Ableseblick auf das Display): Prozessor im Geraet: NEC 753016AG-E33 (16kByte ROM, 1k*4Bit RAM) EEPROM: 3-Wire 93C5X mit 2KBit (128 Adressen * 16 Bit) Nummerierung des Steckers wie normaler Pfostenstecker. Pfostenstecker mit Nase nach oben aufsetzen. Markierter Pin 1 ist dann der hinterste Pin der oberen Reihe. Pin 2 der hinterste Pin der unteren Reihe. Belegung des Steckers: Pin: CPU-Signal: Verwendung: 1 mehrere GND 2 mehrere VCC (Batteriespannung, bei Trockenbatterien nichts einspeisen !) 3 P42 unbekannt (normal auf VCC) 4 P00+P03/SI serielle Empfangsleitung mit 120k Pullup (3 V Pegel !) 5 P02/SO serielle Sendeleitung (3 V Pegel) 6 P43 unbekannt (normal auf VCC) 7 P13/TI0 unbekannt (anscheinend offener Input ?) 8 P30/LCDL unbekannt (anscheinend offener Input ?) 9 ------- nicht belegt 10 P31/SYNC unbekannt (anscheinend offener Input ?) Sofern ein 3V/RS232 Pegelwandler eingesetzt wird, kann die Schnittstelle mit einem normalen Terminalprogramm bedient werden. Parameter: 2400 Baud, 8 Datenbits, gerade Paritaet, mind. ein Stopbit Die Schnittstelle scheint aus Stromspargruenden nicht immer aktiv zu sein. Vergeht eine gewisse Zeit (30s ?), ohne das ein Kommando gesendet wird, muss anscheinend erst durch das Senden von einem oder mehreren Leerkommandos bis zum Empfangen einer gueltigen V02 Antwort gewartet werden. Nach einem Power-Up gibt der Regler eine Meldung aus, die der Versionsmeldung des V Kommandos entspricht. Ob der Controller auch fuer eine direkte Vernetzung (Draht oder Funk) mit den noch ungenutzten Leitungen ohne weitere CPUs geeignet ist (wegen fehlender Adressierung) ist fraglich aber natuerlich nicht ausgeschlossen. Ein entsprechendes Pin-Strapping fuehrte diesbezueglich bisher nicht zum Erfolg. Kommandos: Kommandos und Antworten sind komplett in ASCII ausgefuehrt. Alle Kommandos und Antworten werden zeilenweise interpretiert. Es kann immer nur ein Kommando in Bearbeitung sein ! Kommandos sind mit einem CR abzuschliessen. Alle Kommandos beginnen immer am Zeilennanfang und bestehen immer aus einem Zeichen. Eventuelle Parameter werden direkt ohne Trennzeichen angefuegt. Es sind keine Leerzeichen oder Kommas sowie sowie sonstige Trennzeichen zulaessig. Bei Kommandos und Parmetern wird nicht zwischen Gross- und Kleinschreibung unterschieden. Fehlerhafte Kommandos oder Parameter werden mit: Exx: xx ist ein nummerischer Fehlercode: Bisher bekannt: E02:Missing Value E04:Not Implemented E05:Value out of Range E08:A/D-Error E09:Time-Out Folgende Kommandos wurden bisher herausfunden: Leerkommando: (nur CR) Dient vermutlich zur Synchronisation oder Ueberwachung. Der Regler antwortet jeweils mit: V02 K Kommando: Verhaelt sich anscheinend genauso wie das Leerkommando, auch wenn Parameter angegeben werden. T Kommando: Gibt vermutlich ein Herstellungsdatum und/oder Version aus, Parameter werden anscheinend ignoriert. Ausgabe: V010200:Tue 15.07.1997 15:11 V Kommando: Gibt die Version aus, Parameter werden ignoriert. Ausgabe: V010200:HR20-PI, R1.3.0 U Kommando: Gibt aktuelles Datum und Zeit aus, Parameter werden anscheinend ignoriert. Ausgabe: U 10.01.06 16:56:32 Raaa Kommando: Dieses Kommando fragt anscheinend eine definierte 16 Bit Speicherstelle ab und gibt diese im Hex-Format aus. Die Adresse aaa ist ebenfalls ein Hex-Wert (digits von 0..9, A-F) im Bereich von 000 bis 1ff. Fuehrende Nullen muessen mit angegeben werden. Auch im Bereich von 200 bis 211 gibt es funktionierende Adressen, die aber anscheinend nichts mit dem Speicher sondern vermutlich mit Ports des Prozessors zu tun haben. Antwort auf R000 mit M (vermutlich Memory, Adresse + Wert) z.B.: M0009F48 Vermutung M wie Memory, Adresse 000, Wert 9F48 Hex. Waaavvvv Kommando: Setzt den Speicher an der Hex-Adresse aaa auf den Hex-Wert vvvv. Auch fuehrende Nullen muessen angegeben werden. Es wird zur Bestaetigung vom Regler mit der Adresse und dem gesetzen Wert mit W geantwortet. So wird z.B das Kommando W0009F48 mit M0009F48 beantwortet. Welche Speicherstellen was bewirken ist bisher nur teilweise klar. Der Speicher scheint wie folgt belegt zu sein. Adressen (jeweils hex): 000-07f: 128 Worte a 16 Bit, die konstant bleiben (vermutlich EEPROM) 080-0ff: dupliziert aus 000-07f, vermutlich wird ein groesseres EEPROM unterstuetzt ist aber nicht eingesetzt und dupliziert sich hier. 100-1ff: 256 Worte a 16 Bit, die den internen RAM Speicher des Prozessors abbilden. 200-211: Register des Prozessors, die nur teilweise schreib- und lesbar sind. Wenn nicht gelesen werden kann, gibt es Fehler- meldungen. Es handelt sich nicht nur um reine Register sondern auch ggf. Messwerte. Das EEPROM sowie das RAM sind immer lesbar und schreibbar. Dabei werden immer 16 Bits gleichzeitig geschrieben oder gelesen. Die Darstellung der Speicherstellen wird als 16 Bit Wert angenommen: Hoeherwertig ist dabei dann das erste Byte !! Strikt genommen sind nicht alle Adressen Speicherstellen, die Adressen >=0x200 geben teilweise auch direkt ermittelte A/D-Werte zurueck. Die hier verwendeten Adressen entsprechen auch nicht den Realadressen des Mikroprozessors sondern werden umgesetzt. Speicherstellen im EEPROM: 0x000-0x005 vermutlich Kennung und Kalibrierparameter. 0x006: Vorprogrammierte Komfort- und Spartemperatur. Das niederwertige Byte gibt die Spartemperatur an, das hoeherwertige die Komforttemperatur. Wert in 1/10 Grad Celsius mit Offset 6.0 Grad -> 0 = 6.0 Grad, 10dez = 7.0 Grad. Einer der Werte werden waehrend eines Umschaltvorganges durch die Uhr jeweils in das RAM an Adresse 0x136 als aktueller Sollwert uebernommen (siehe unten). 0x009-0x00b: Hier wird die letzte manuell eingestellte Zeit/Datum im EEPROM gesichert und dem Benutzer nach einem Stromausfall bzw. Batteriewechsel wieder angeboten. Das Format entspricht dem RAM Format an Adresse 0x110-0x112. Die Sekunden werden hier jedoch IMMER mit 00 abgespeichert, da diese nicht manuell eingebbar sind. 0x00f: Anfang + Ende der ersten Heizzeit fuer den Wochentag Montag 0x010: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Montag 0x011: Anfang + Ende der ersten Heizzeit fuer den Wochentag Dienstag 0x012: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Dienstag 0x013: Anfang + Ende der ersten Heizzeit fuer den Wochentag Mittwoch 0x014: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Mittwoch 0x015: Anfang + Ende der ersten Heizzeit fuer den Wochentag Donnerstag 0x016: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Donnerstag 0x017: Anfang + Ende der ersten Heizzeit fuer den Wochentag Freitag 0x018: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Freitag 0x019: Anfang + Ende der ersten Heizzeit fuer den Wochentag Samstag 0x01a: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Samstag 0x01b: Anfang + Ende der ersten Heizzeit fuer den Wochentag Sonntag 0x01c: Anfang + Ende der zweiten Heizzeit fuer den Wochentag Sonntag Die Heizzeiten sind wie folgt abgelegt: Die Aufloesung einer Schaltzeit betraegt 10 Minuten. Das niederwertige Byte eines 16 Bit Wortes definiert den Start der Heizzeit, das hoeherwertige Byte das Ende der Heizzeit. Die Einheit sind hier jeweils Schritte a 10 Minuten. So besagt das Hex-Wort 0x0201 ein Start der Heizzeit um 00:10 (Wert 0x01) und ein Ende der Heizzeit um 00:20 (Wert 0x02). Nicht belegte Umschaltzeiten sind mit dem Wert 0xff gekennzeichnet, der ausserhalb des Bereiches liegt. (Maximal gueltiger Wert ist 143 dezimal bzw. 0x8f Hex was einer Schaltzeit von 23:50 entspricht. Beim Programmieren von Wochenzeiten werden alle Tage automatisch einzeln ausgefuellt. Das EEPROM enthaelt noch weiteren Speicherplatz fuer mehr Schaltzeiten, die anscheinend von den automatischen Wochenroutinen auch ausgefuellt aber spaeter nicht genutzt werden. Moeglicherweise wird der Controller auch im groesseren Reglermodell HR40 eingesetzt und laesst sich durch Aenderung des EEPROM-Inhaltes oder das Umlegen von Prozessorleitungen in einen HR40 Modus bringen. Speicherstellen im RAM: 0x10d aendert sich mit der Uhrzeit, aber schnell (vermutlich ein Interrupt Counter) Aktuelle Zeit: 0x110 niederwertiges Byte -> Sekunden (00..59) 0x110 hoeherwertiges Byte -> Minuten (00..59) 0x111 niederwertiges Byte -> Stunden (00..23) 0x111 hoeherwertiges Byte -> Tag (1..31) 0x112 niederwertiges Digit -> Monat (1..12) 0x112 zweitniederwertiges Digit -> Wochentag (0 = Montag, 6=Sonntag) 0x112 hoeherwertiges Byte -> Jahr letzte 2 Stellen (96-99, 00..xx) Display: 0x102 Darstellung Display Grad 0zek (z=Zehner, e=Einer, k=Kommastelle) wird von einer Hintergrundroutine aber immer wieder ueberschrieben Temperatur: 0x136 aktuelle Solltemperatur, kann bis zur naechsten automatischen Umstellung per Uhr wohl ueberschrieben werden. Im nauellen Mode bleibt der Wert dauerhaft erhalten Wert in 1/10 Grad Celsius mit Offset 6.0 Grad -> 0 = 6.0 Grad, 10dez = 7.0 Grad Prozessorregister / sonstige Daten: 0x206 ungenutzt bzw. ergeben E09:Time-Out 0x207-0x208 aktuell gemessener Temperaturwert vom A/D-Wandler ? (die Einheit/Umrechnung ist noch unklar) 0x209-0x20b ungenutzt bzw. ergeben E08:A/D-Fehler Sonstige Dokus: Folgende Informationen sind dem Autor noch aus anderer Quelle (Dank an ) zugesendet worden. Erkenntnisse aus den folgenden Dokus wurden in obiger Doku (EEPROM Inhalt) bisher nicht beruecksichtigt. "geheime" Sonderfunktionen des Rondostat HR-20E Im Grundzustand des Geraetes die Taste "Prog" 20 Sekunden gedrueckt halten, erst blinkt "1-7", dann die Jahreszahl, schliesslich "01:01". Damit ist das Menue fuer die Sonderfunktionen erreicht. Mit dem "+/-"-Drehrad werden die Werte in den einzelnen Menueauswahloptionen geaendert. Mit der "Prog"-Taste werden die Einstellungen gespeichert und Sie gelangen zum naechsten Menuepunkt. "01:01" blinkt, Auswahlmoeglichkeiten: * "01:01" = automatische Sommer- / Winterzeitumschaltung aktiv * "01:00" = keine Umschaltung "02:01" blinkt, Auswahlmoeglichkeiten: Hinweis: Bedeutung der Balkenanzeige. * "02:00" = keine Balkenanzeige * "02:01" = Gew. Raumtemperatur, Balken zeigen Schaltzeiten * "02:02" = Gew. Raumtemperatur, Balken zeigen Schaltzeiten und aktuelle Uhrzeit * "02:03" = Gew. Raumtemperatur, Balken zeigen Ist-Temperatur (6 bis 24 Grad C). Bei Temperaturen ueber 24 Grad C blinkt das letzte Segment. * "02:04" = Gew. Raumtemperatur, Balkensegment zeigt Position des Ventils -> rechts = geschlossen, links = voll geoeffnet "03:05" blinkt, Auswahlmoeglichkeiten: Hinweis: Rueckkehrzeit aus Fensterfunktion. * "03:00" = Fensterfunktion ausgeschaltet * "03:05" = Rueckkehrzeit aus Fensterfunktion 05 * 6 minuten "04:04" blinkt, Auswahlmoeglichkeiten: Hinweis: Anzahl der Schaltzeiten pro Tag. * "04:04" = Maximal 4 Schaltzeiten pro Tag * "04:02" = Maximal 2 Schaltzeiten pro Tag "05:00" blinkt, Auswahlmoeglichkeiten: * "05:00" = KEIN Hardware-Reset auf Werkseinstellung * "05:01" = Hardware-Reset auf Werkseinstellung "08:30" blinkt, Auswahlmoeglichkeiten: Hinweis: Ab 15 Grad C aufwaerts ist die Raumtemperatur nach unten korrigiert, um die erhoehte Raumtemperatur in Radiatornaehe auszugleichen. * "08:30" = bei 28 Grad C wird um 30 / 10 = 3 Grad C vermindert, bei 20 Grad C um etwa 1,15 Grad C * "08:00" = keine Absenkung der Ist-Temperatur "09:16" blinkt, Auswahlmoeglichkeiten: * Vorgesehen fuer Regelparameter: Integrierzeit, nicht aktiv "10:00" blinkt, Auswahlmoeglichkeiten: * Vorgesehen fuer Regelparameter: P-Anteil, nicht aktiv "11:50" blinkt, Auswahlmoeglichkeiten: Hinweis: Korrektur des Schliesspunktes nach der Adaption. * "11:50" = keine Aenderung * "11:00" = 50 Optopulse Richtung "Auf", entspricht 0,2mm oder 0,004mm/Digit * "11:99" = 49 Optopulse Richtung "Zu", entspricht 0,2mm