.: Christians Technikseite :.
   .: The rotary way of life ...

RS485-Busankoppler für Taster, LEDs und Temperaturfühler.

RS485_Bus
Diese Schaltung ermöglicht die günstige und einfache Anbindung von bis zu 8 Tastern, 8 LEDs und einem Temperatursensor (je Modul) an eine übergeordnete Steuerung mittels RS485 und spart somit viele IOs auf der Steuerung sowie Verkabelungsaufwand. Das Protokoll wurde bewusst einfach gehalten, damit es problemlos in viele verschiedene Steuerungen implementiert werden kann. Aus diesem Grund und der Tatsache, dass im Gebäude "sehr selten" zwei Taster zur selben Zeit gedrückt werden, wurde auf eine Kollisionskontrolle verzichtet.

Motivation.

Einiger meiner Freunde baute vor einiger Zeit sein Eigenheim und setzte dabei bei der Gebäudeautomatisierung auf eine „SPS-artige“ Steuerung von Loxone. Diese bietet bei einem vernünftigen Preis-Leistungs-Verhältnis jede Menge Komfort. Da die IO-Erweiterungen bei der benötigten Menge schnell teuer werden und die Verkabelung ausartet, suchten wir nach einer alternativen Möglichkeit um Taster mit ihren integrierten LEDs und ein paar Temperatursensoren an die Steuerung zu koppeln. Die Verwendung von KNX-Tastern wäre brauchbar, wenn auch nicht besonders günstig. Somit wurde wieder einmal mein Entwicklertrieb geweckt.

Technische Grundlagen.

Die Schaltung wurde für die Anbindung von sogenannten SPS- oder Elektronik- Tastern entwickelt. Diese Taster beinhalten bis zu 8 Taster und 8 LEDs in der Baugröße eines herkömmlichen Schalters. Somit können viele Funktionen ohne riesiger Schalterbatterien an den Wänden, übersichtlich realisiert werden. Bei dem Projekt wurden die Jung 4248TSM verbaut, diese Taster haben 8 Taster mit gemeinsamen Wurzelkontakt und 8 LEDs (24V 1mA) mit gemeinsamer Masse. Ähnliche Taster gibt es auch von anderen Herstellern. Beim Betätigen sowie beim Loslassen einer Taste wird ein Telegramm erzeugt, dies ermöglicht der übergeordneten Steuerung eine Auswertung der Länge des Tastendrucks. Die Temperaturmessung wird durch einen MCP9701 erledigt. Dieser gibt eine zur Temperatur proportionale Spannung aus (V = 0,4V + Temperatur (in °C) * 0,0195), die absolute Genauigkeit ist mit ± 2K zwar nicht besonders gut, doch dies lässt sich in der übergeordneten Steuerung kompensieren. Ist ein Temperatursensor am Busankoppler angeschlossen, wird der aktuelle Messwert im 5 Minuten-Takt übertragen. Es gibt noch einen Reserveeingang, welcher als digitaler oder analoger Eingang verwendet werden kann, mögliche Einsatzzwecke wären Feuchtefühler, IR-Empfänger, ...

Übertragungsprotokoll

Das Übertragungsprotokoll wurde bewusst einfach gehalten, auch wenn dadurch keine 100%ig zuverlässige Übertragung garantiert werden kann. Bisherige Tests mit mehr als 20 Tastern in einem Wohnhaus, zeigte allerdings keine störenden Ausfälle. Lediglich bei der Ansteuerung der LEDs sollte man mit Umsicht arbeiten und keine wilden Blinkorgien oder Lauflichter realisieren, da dies den Bus unnötig belastet und die Gefahr von Datenkollisionen oder Verlusten steigt.

Grundsätzlicher Telegramaufbau:

Startzeichen: <0x02>
Tasteradresse: Grossbuchstabe
Daten
Endzeichen: <0x03>

Busbefehle:

Funktion Datenstrom Beschreibung
Taster A; Taste 3 gedrückt <0x02>AI31<0x03> I: Input; 3: Tasternummer; 1: Ein
Taster B; Taste 2 losgelassen <0x02>BI20<0x03> 0: Aus
Taster A; LED 5 einschalten <0x02>AO51<0x03> O: Output; 5: LED-Nummer; 1: Ein 
Taster A; LED 5 ausschalten <0x02>AO50<0x03> 0: Aus
Taster C; Temperatur <0x02>CT223<0x03> T: Temperatur; 223 = 22,3°C
Taster C; Temperatur <0x02>CT-005<0x03> -005 = -0,5°C
Taster A; Hardwareversion abfragen  <0x02>AHW?<0x03>  
Taster A; Hardwareversion Antwort <0x02>AHW;8;8;1;0;02<0x03>  8xDI, 8xDO, 1xAI, 0xAO; V0.2
Taster A; Firmwareversion abfragen <0x02>AFW?<0x03>  
Taster A; Firmwareversion Antwort <0x02>AFW;01<0x03> V0.1
Moduladresse setzen <0x02>*SETD<0x03> Setze Adresse D
Taster A; Bootloader aktivieren <0x02>ABL!<0x03> alle anderen für 60s stumm


Hardware.

Technische Daten.

  • Versorgungsspannung: 24VDC ±10%
  • 8 digitale Eingänge mit gemeinsamer Masse
  • 8 digitale Ausgänge 24V High Side schaltend (max. 10mA je Kanal)
  • 2 analoge Eingänge (1x Temperatursensor (MCP9701), 1x Reserve)
  • Abmessungen: 40mm x 40mm x 15mm
  • RS485- Bus:
    • maximal 26 Teilnehmer
    • Geschwindigkeit: 19200 Bit/s
    • Datenbit: 8
    • Stopbit: 1
    • Parität: gerade

Schaltung.

Schaltplan Version 0.2

Die 5V Versorgung der Komponenten wird von einem Schaltregler aus der 24V Versorgungsspannung generiert. Der Controller läuft mit 4Mhz, welche von einem Resonator erzeugt werden, dessen Genauigkeit reicht aus um eine stabile Kommunikation zu gewährleisten. 

Eingänge: Die 8 digitalen Eingänge werden von den Pull-Up-Widerständen auf +5V gehalten und müssen von den externen Tastern auf Masse gezogen werden. Die beiden analogen Eingänge (derzeit nur einer programmiert für den Temperatursensor) können 0V bis 5V verarbeiten. Die Anschlussleitungen sollten nicht länger als 30cm sein, um keine Störungen einzufangen, da keine weiteren EMV-Maßnahmen getroffen wurden.

Ausgänge: Die 8 digitalen Ausgänge werden 24V- seitig geschalten. Der MIC5891 ist ein Schieberegister mit integrierten High-Side-Treibern und für diese Aufgabe perfekt geeignet. Die beiden Widerstände R4 und R5 dienen der Strombegrenzung, falls ein ausgangsseitiger Kurzschluss auftreten sollte. Die Anschlussleitungen sollten nicht länger als 30cm sein, um keine Störungen einzufangen.

Layout.

Top Layout Version 0.2 Bottom Layout Version 0.2

Die Platine ist fast vollständig mit SMD- Bauteilen bestückt, um die Abmessungen möglichst gering zu halten. Der Einbau erfolgt in ein modifiziertes Vergussgehäuse (Hammond 1596B107) und ermöglicht den Einbau in einer Schalterdose hinter dem eigentlichen Taster. Die Verbindung zu den Tastern, LEDs und dem Temperatursensor, erfolgt mit etwa 12cm langen Flachbandleitungen, welche durch MicroMatch-Stecker mit der Platine verbunden werden. Dies ermöglicht einen unkomplizierten Anschluss der Peripheriegeräte. Ich habe bei meinen Platinen die Buchse K3 (ISP-Anschluss) nie bestückt, zum Programmieren verwende ich einen passenden Pfostenverbinder, der etwas verspannt in die durchkontaktierten Bohrungen gesteckt wird, die Verbindung reicht zum Programmieren des Controllers. Buchse S1 wird ebenfalls nicht bestückt, da diese im Normalfall ebenfalls nur 1x, beim vergeben der Busadresse, benötigt wird. Hier verwende ich einen Drahtbügel, kleine Zange oder sonstiges.

Fotos.

Platine von unten Version 0.2 Platine von oben Version 0.2 Platine mit Gehäuse Version 0.2

Firmware.

Die Firmware wurde in Bascom geschrieben.
Die folgende Beschreibung soll einen groben Überblick über die wichtigsten Teile der Firmware geben.

Initialisierung.

Nach dem Start wird die Busadresse aus dem ROM gelesen und auf Gültigkeit geprüft, sollte diese außerhalb des gültigen Bereiches (A bis Z) liegen, so kann nur der Programmiermodus der Adresse aufgerufen werden, alle anderen Funktionen sind gesperrt. Der Buskoppler zeigt die Busadresse binär an seinen Ausgängen für 5 Sekunden an. Anschließend zählt er bis 0 und zeigt diesen Zustand binär auf den Ausgängen an. Wenn eine Spannung am Temperatursensor-Eingang anliegt, wird die Temperaturübertragung aktiviert. Abschließend werden die Interrupts aktiviert und in die Hauptschleife gesprungen.

Hauptschleife.

Programmiermodus:

Wird durch das Verbinden der beiden Kontakte von S1 der Programmiermodus aktiviert, werden alle Ausgänge aktiviert und der Buskoppler wartet auf den Befehl zum Setzten der Busadresse (<0x02>*SETx<0x03>), wird eine gültige Empfangen, speichert der Busankoppler die Adresse im ROM und führt über den Watchdog einen Reset aus. Soll keine Adresse gespeichert werden, ist S1 nochmals zu verbinden, dadurch wird ebenfalls ein Watchdog Reset ausgelöst.

alle 500µs:

Wird der Empfangspuffer auf ein vollständig empfangenes Telegramm abgefragt und wenn nötig ausgewertet.
Befinden sich Daten im Sendepuffer und ist der Bus, seit einer durch die Busadresse, ermittelte Mindestzeit frei (Zähler der Sendesperre auf 0), werden Diese gesendet.

alle 10ms:

Nach 20 Ticks des Timers (500µs) werden die Taster eingelesen und in einem Ringspeicher abgelegt, die letzten beiden Einträge müssen identisch sein und von davor liegenen verschieden. Somit wird eine Flankenerkennung und Entprellung erreicht. Wurde eine Flanke detektiert, werden die entsprechenden Telegramme in den Sendepuffer eingetragen.

alle 60s:

Wird wenn ein Temperatursensor beim Start erkannt wurde, die aktuelle Temperatur ein einen Puffers geschrieben.

alle 300s:

Wird aus den Daten des Temperatur-Puffers der Mittelwert gebildet und auf °C umgerechnet. Dieses Ergebnis wird als komplettes Bustelegramm in den Sendepuffer geschrieben.

Interrupts.

Timer0:

Wird im 500µs Takt ausgelöst und incrementiert er den Zähler zur Erzeugung des 10ms-Taktes und decrementiert den Zähler für die Sendesperre.

Empfang auf der seriellen Schnittstelle:

Puffert das letzte empfangene Zeichen und prüft es.
Wird ein Startzeichen (0x02) empfangen, wird der gesamte Puffer gelöscht. Die weiteren Zeichen werden im Empfangspuffer abgelegt, bis der Puffer voll ist oder ein Endzeichen empfangen wurde. Beide Zustände werden der Hauptschleife angezeigt um das Telegramm auszuwerten.
Jedes Mal wenn ein Zeichen empfangen wurde, wird der Zähler für die Sendesperre auf den Startwert [(Busadresse + 5) * 500µs] gesetzt.

Bedienung.

Grundprogrammierung des Mikrocontrollers.

Für die Grundprogrammierung des Mikrocontrollers benötigt man das kostenlose Atmel Studio, ein Programmiergerät und die Dateien aus der „RS485_BCU_V0.2.zip“ (siehe Downloads).
  1. Den Busankoppler mit dem Programmiergerät verbinden und das Programmiergerät mit dem PC verbinden. (Der Busankoppler sollte somit über das Programmiergerät mit Spannung versorgt werden.)
  2. Im Atmel Studio auf "Device Programming" klicken.
  3. Tool, Device (ATmega8A) und Interface (ISP) auswählen und mit "Apply" bestätigen.
  4. Als ersten Funktionstest, kann man versuchen die Device Signature zu lesen, dies sollte ohne Fehlermeldung möglich sein.
  5. Zuerst der heikelste Teil der Programmierung. Unter "Fuses" bei HIGH = 0xC0 und LOW = 0x8F eintragen und mit "Programm" in den Controller speichern. (Hier keine Fehler machen, da man sich ansonsten leicht aus dem Controller aussperrt und den Controller wieder von der Platine löten darf.)
  6. Nun zur eigentlichen Firmware, welche unter "Memories" programmiert wird.
    Unter "Flash" die Datei „TasterRS485_Bootloader_V030.hex“ auswählen und "Programm" in den Controller speichern.
  7. Um sich nacher die Mühe der Adressvergabe über den Bus zu ersparen, kann man diese gleich in den Controller schreiben.
    Unter "EEPROM" die passende Datei „EEPROM_Adresse?.hex“ auswählen und "Programm" in den Controller speichern.
Atmel Studio Verbindungseinstellungen Programmieren der Fuses Programmieren der Speicher

Programmierung der Busadresse.

  1. Die beiden Kontakte von S1 kurz verbinden, um in den Programmiermodus zu kommen.
    Alle Ausgänge sind in dieser Zeit aktiv.
  2. Busadresse mittels <0x02>*SETx<0x03> setzen, wobei x die neue Adresse darstellt, diese muss als Großbuchstabe zwischen A und Z liegen.
    (Dies funktioniert manchmal nicht auf Anhieb, den Busankoppler kurz von der Versorgungsspannung trennen und nochmals versuchen.)
  3. Der Busankoppler übernimmt die Adresse und startet kurz darauf neu.

Ändern der Firmware über den RS485-Bus.

In der Firmware ist ein Bootloader integriert. Es handelt sich dabei um den Standard-Bootloader von Bascom. Durch den Bootloader ist es möglich die Firmware der Busankoppler über den RS485-Bus zu übertragen und kann sich somit den Ausbau der Busankoppler ersparen.
Für das Übertragen der Firmware braucht man einen PC mit direkten Zugriff auf den Bus, über zum Beispiel einen USB-RS485-Adapter oder einen seriellen Netzwerkserver. Wichtig ist, das die Verbindung unter Windows als COM-Schnittstelle eingetragen ist.
  1. Starten Sie die Bootloader.exe und wählen Sie die gewünschte Firmware aus und stellen Sie die Schnittstellenparameter ein.
  2. Öffnen Sie ein Terminalprogramm (HTERM, Hyperterminal, ...) und öffnen Sie eine Verbindung zum Bus.
  3. Aktivieren Sie den Bootloader, im zu updatenden Busankoppler, mit <0x02>xBL!<0x03> wobei x wieder der Busadresse entspricht und zwischen A und Z liegen muss. Als Antwort erhalten Sie  <0x02>x_Bootloader<0x03>.
  4. Der gewählte Taster schaltet für 10s jeden zweiten Ausgang ein und startet anschließend im Bootloader-Modus und ist somit empfangsbereit. Alle anderen Busankoppler schalten alle Ausgänge ein und reagieren weder auf Tastenbefehle noch senden sie auf den Bus, um das Firmwareupdate nicht zu unterbrechen. Nach etwa einer Minute nehmen sie den regulären Betrieb wieder auf.
  5. Da der Bootloader-Modus nach kurzer Zeit wieder verlassen wird, wenn keine Daten empfangen werden, heißt es nun schnell sein.
  6. Schließen Sie die Verbindung im Terminalprogramm und die Schnittstelle, für die Übertragung der Firmware, frei zu geben.
  7. Laden Sie die Firmware mit der Bootloader.exe unter File / Upload in den Busankoppler.
  8. Wenn der Upload erfolgreich war, startet der Busankoppler mit der neuen Firmware. Alle anderen Busankoppler sollten kurze Zeit später ihren Normalbetrieb wieder aufnehmen.

Einbindung in Loxone.

In den unten gezeigten Beispielen hängen die Taster über einen seriellen Server am Loxone und werden daher per UDP-Befehle angesteuert. Bei Verwendung der RS485-Extension gelten die Einstellungen sinngemäß.
Ab der Loxone Firmware 6.xx empfehle ich die Verwendung der Loxone RS485-Extension, da seit dieser Version die UDP-Schnittstelle des Miniservers, bei schnellen Befehlsfolgen, nicht mehr zuverlässig funktioniert.

Tastereingänge.

Tastereingänge Loxone Einstellungen

Die Tastereingänge werden als analoge Eingänge konfiguriert. Dies liegt darin begründet, dass es nur so möglich ist, die 1 im Telegramm als EIN und die 0 als AUS zu interpretieren. Bei der Auswertung als digitale Eingänge müsste man je einen Eingang für Ein und einen für Aus anlegen. Diese würden bei jeder Erkennung einen kurzen Impuls liefern, welcher über ein RS-Flip-Flop in ein brauchbares Signal verwandelt werden müsste. Dies spart man sich alles durch den analogen Trick.
Im Bild rechts sieht man die Einstellungen für die erste Taste des Tasters "A".

Temperatureingänge.

Temperatureingänge Loxone Einstellungen

Die Temperatureingänge werden als klarer weise als analoge Eingänge konfiguriert. Wichtig ist die Vorzeichenerkennung und die richtige Skalierung.
Im Bild rechts sieht man die Einstellungen für den Temperatursensor des Tasters "B".

LED-Ausgänge.

LED-Ausgänge Loxone Einstellungen

Die LEDs werden über den Befehl bei EIN und Befehl bei AUS angesteuert.
Im Bild rechts sieht man die Einstellungen für die erste LED des Tasters "A".

Lizenzen.

  • Die Hardware und deren Dokumentation, sind als Open Hardware Projekt konzipiert und lizenziert. Die zur Anwendung kommende Lizenz, ist die TAPR Open Hardware License in der Version 1.0 oder höher. Die Lizenz kann unter http://www.tapr.org/OHL heruntergeladen werden und regelt die Weitergabe, Veränderung und Haftung des Produktes.
  • Die Firmware des Mikrocontrollers ist als Open Source konzipiert und lizenziert. Die zur Anwendung kommende Lizenz, ist die GNU General Public License in der Version 2.0. Die Lizenz kann unter http://www.gnu.de/documents/gpl-2.0.en.html heruntergeladen werden und regelt die Weitergabe, Veränderung und Haftung der Firmware.

Download.

Schaltplan, Layout, Firmware

Kommentare.



Kommentare (11)

Sortierung
4/5 (3)
erste < 1 2 3
Facebookdel.icio.usStumbleUponDiggGoogle+Twitter
Gravatar
Full StarFull StarFull StarFull StarFull Star
Henry (Deutschland) sagt...
Hallo Christian,
wie kann ich eine Verbindung zwischen 2 Busankopplern ziehen? Soweit ich gesehen habe gibt es nur 2 Klemmen für den Busanschluß und keine weiterführenden Buchsen.
Kann man das Modul auch mit dem 5248 TSM von Jung betreiben?

Wie teuer ist ein RS485 Busankoppler und kann man diesen bei Ihnen beziehen? Ist dieser dann schon fertig gelötet oder bieten Sie diesen nur als Bausatz an?

Mit freundlichen Grüßen
Henry Juhl
Admin:
Hallo Henry.
In jede Klemme passen zwei Drähte bis max. 0,8mm Durchmesser, somit kann man von einem Taster zum nächsten verkabeln.
Mit den neuen Jung Tastern sollte es auch funktionieren, allerdings muss die + und die - Klemme an den Tastern auf Masse gelegt werden.

Das Projekt dient eigentlich mehr als Nachbauanleitung und es ist eigentlich nicht Platinen zu verkaufen (noch nicht von dieser Version). Die reinen Bauteilkosten liegen bei etwa 25,- inkl. Platine und Gehäuse. Schick mir ansonsten einfach mal ein E-Mail, vielleicht lasse ich mal wieder ein paar Platinen fertigen, dann kannst du auch welche haben.

Christian
15 Januar 2015 15.53
erste < 1 2 3
Seite 3 von 3

Kommentar Hinzufügen

* Pflichtfeld
(wird nicht veröffentlicht)

 
Bold Italic Underline Strike Superscript Subscript Code PHP Quote Line Bullet Numeric Link Email Image Video
 
Smile Sad Huh Laugh Mad Tongue Crying Grin Wink Scared Cool Sleep Blush Unsure Shocked
 
1000
 
Informiere mich via E-Mail über neue Kommentare.
 
Meine Daten auf diesem Computer speichern (Cookie).
 
Ich habe die Datenschutzrichtlinien gelesen und verstanden. *
 
Ich habe die Bedingungen und Konditionen gelesen und stimme ihnen zu. *
 
 
Powered by Commentics
.: Christians Technikseite 28.02.2015 10:02:43