Bakalářská práce. Programovatelný termostat k bojleru



Podobné dokumenty
PK Design. MB-ATmega16/32 v2.0. Uživatelský manuál. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 (21.12.

Voděodolný tloušťkoměr MG-401 Obsah:

Registrační teploměr


VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

CQ485. Opakovač a převodník linek RS485 a RS422. S aktivní i pasivní obnovou dat

Snímače teploty a vlhkosti s komunikací po RS485 protokolem Modbus RTU - řada PHM

TENZOMETRICKÝ MĚŘIČ. typ Tenz

Snímač barometrického tlaku T2314, T2414

Elektronická stavebnice: Deska s jednočipovým počítačem

V případě potřeby lze snímače nakonfigurovat do kompatibilního režimu se staršími snímači REGMET P21M. Přehled typů: osvětlení

1 Podrobná specifikace Yunifly Datasheet

Univerzální jednočipový modul pro řízení krokových motorů

Laboratorní zdroj - 6. část

Microchip. PICmicro Microcontrollers

PK Design. MB-S2-150-PQ208 v1.4. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 ( )

POKLADNÍ DISPLEJ LCD. hotline: strana 1

Rozhraní mikrořadiče, SPI, IIC bus,..

PK Design. EVMS-mega128. Uživatelský manuál. v1.0. Výuková deska s mikrokontrolerem ATmega128. Obr. 1 - výuková deska s LCD displejem

Maticová klávesnice. Projekt do předmětu Subsystémy PC. Brno, Tomáš Kreuzwieser, Ondřej Kožín

Paměťové prvky. ITP Technika personálních počítačů. Zdeněk Kotásek Marcela Šimková Pavel Bartoš

Temp-485. Teplotní čidlo pro vnitřní použití na sběrnici RS-485 s jednoduchým komunikačním protokolem

RE8USB modul s 8 vstupy a 8 výstupy ovládaný z USB

enos dat rnici inicializaci adresování adresu enosu zprávy start bit átek zprávy paritními bity Ukon ení zprávy stop bitu ijíma potvrzuje p

TENZOMETRICKÉ MĚŘIDLO

Převodník na DIN lištu s frekvenčním výstupem typ RF1

STŘEDOŠKOLSKÁ TECHNIKA 2013

1. ÚVODNÍ USTANOVENÍ 2. NAHRÁNÍ VLOŽENÉHO PROGRAMU

RE5USB programovatelné USB relé s integrovaným watchdogem ( RE5 ) Základní vlastnosti

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Grafický výtahový displej

Návrh konstrukce odchovny 2. dil

Číslicový otáčkoměr TD 5.1 AS

Řídící jednotka pro 2 čtečky SL20

TCL. Měřící modul proudu 4-20mA s výstupem RS485

Teploměry a ovladače s digitální komunikací - řada AM. Tango. alpha nea. Základní technické parametry

Zahradní bazén, řídící jednotka, čerpadlo filtrace, solární kolektor, snímač teploty.

Elektronická časomíra SH3

FASTPort. Nová sběrnice pro připojení inteligentních karet* k osmibitovým počítačům. aneb. Jak připojit koprocesor

DM4.3 odmagnetovací modul

MLE2 a MLE8. Datalogery událostí

TQS1. Inteligentní teplotní čidlo. Komunikace linkou RS485. Teplotní rozsah -55 C až +125 C. Obrázek září 2005 w w w. p a p o u c h.

INDUKČNÍ PRŮTOKOMĚR F3 INSTALAČNÍ PŘÍRUČKA

24 bitový AD USB modul AD24USB. Návod k použití

Obsah: KR2 - Uživatelská příručka -1-

Návod pro USB Teploměr. s čidlem DS18B20

XR110C - XR120C - XR130C - XR130D

EMJ-01 odmagnetovací jednotka

HTemp-485. Teplotní a vlhkostní čidlo pro vnitřní použití na sběrnici RS-485 s jednoduchým komunikačním protokolem CZ

Uživatelský manuál. s klávesnicí K648

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Rozšiřující modul s protokolem MODBUS

TCP2RTU. Transparentní převodník protokolu MODBUS TCP na MODBUS RTU/ASCII. Tři varianty: pro RS422, RS485 a RS232

Řídicí systémy řady 400 str.2 z 16 MICROPEL

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

GENEROVÁNÍ ZVUKŮ POMOCÍ MIKROKONTROLÉRŮ

MR51P. Systémy Měřicí, Analytické a Regulační Techniky POPIS A NÁVOD K OBSLUZE PROGRAMOVATELNÝ MĚŘIČ PRŮTOKU A PROTEKLÉHO MNOŽSTVÍ. verze 1.

Úvod do mobilní robotiky AIL028

Způsoby realizace paměťových prvků

Uživatelský manuál. KNX232e / KNX232e1k

Arduino digitální multimetr

MIDAM UC 301 modbus regulátor topeni, otočné tlačítko, RTC, 2xDO, 1x DI, externí odporové čidlo PT1000, RS485

Adresovatelný převodník rozhraní RS48/RS232 ELO E250. Uživatelský manuál

JEDNOTKA SNÍMAČŮ 1-WIRE (DALLAS) TUDS-40-MOD

DM2.3E odmagnetovací modul V AC /5A

Technická dokumentace ČTEČKA ČIPŮ DALLAS. typ DSRS

MyIO - webový komunikátor

SB8485. Převodník USB na 8x RS485/RS září 2010 w w w. p a p o u c h. c o m

Dálkové ovládání GB060. Umožní jednoduché ovládání otopné soustavy. Osm binárních vstupů / výstupů a jeden reléový výstup

DataLab IO. DataLab PC/IO

DISTA. Technická dokumentace. Pokyny pro obsluhu a údržbu. Verze 2.5

Uživatelský manuál. KNXgal. řízení zabezpečovacích ústředen. Galaxy ze sběrnice KNX. napájeno ze sběrnice KNX. indikace komunikace na KNX

Technické prostředky počítačové techniky

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Popis zapojení: < 27 dbµv. < 33 dbµv LW. S/N ratio (60 dbµv): > 57 db FM mono > 52 db AM

Tepelná čerpadla HP. tepelná čerpadla. Návod k obsluze a instalaci pro verzi software xx

Cílem této kapitoly je seznámit s parametry a moduly stavebnice NXT. Obr. 1: Brick s moduly [3]

Programátor pro procesory PIC. Milan Horkel,Miroslav Janás

PROCESOR. Typy procesorů

Převodník USB na RS232. Milan Horkel

Inteligentní procesorem řízený U/I převodník MPH 71

Návod k použití. T3113 T3113D T3113L T3113Ex T3117 T3117D T3117L

ELEKTRONICKÁ ČASOMÍRA

Uživatelský manuál. KNXgal

) informace o stavu řízené veličiny (předávaná řídícímu systému) - nahrazování člověka při řízení Příklad řízení CNC obráběcího stroje

Úloha- Systém sběru dat, A4B38NVS, ČVUT - FEL,

Principy činnosti sběrnic

Jízda po čáře pro reklamní robot

Dvoukanálový monitor absolutního chvění MMS 6120

TEPL2344 Technická dokumentace PŘEVODNÍK TEPLOTY. typ TEPL2344 s rozhraním RS232.

Průmyslové pece Tepelné procesy Sušárny a klimatizační komory Zkušebny Technologické linky Stroje

NÁVOD K POUŽÍVÁNÍ PU 298

Měřič krevního tlaku. 1 Měření krevního tlaku. 1.1 Princip oscilometrické metody 2007/

POKOJOVÁ JEDNOTKA S MODULAČNÍM PROGRAMOVATELNÝM REGULÁTOREM

Detektor mobilní komunikace DMC - 3 popis a návod k použití Před použitím přístroje si prosím přečtěte tento návod

Návod k použití. Elektronický inteligentní regulátor vytápění

Kompaktní procesní stanice

CHARAKTERISTIKY MODELŮ PC

Pace Maker ZJ18. Návod k použití. 1) Popis výrobku:

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačů Bakalářská práce Programovatelný termostat k bojleru Jan Šesták Vedoucí práce: Ing. Martin Novotný Studijní program: Elektrotechnika a informatika, strukturovaný bakalářský Obor: Výpočetní technika Květen 2010

Poděkování Děkuji panu Ing. Martinu Novotnému, za pomoc a rady při řešení a tvorbě mé bakalářské práce.

Prohlášení: Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne 27.5. 2010

Abstract This bachelor thesis is dealing with realization of programmable boiler thermo regulator, which allows to control heating of water according to weekly temperature curve, and realization of PC program for communication with thermo regulator via serial interface. Thermo regulator is programmed in C language and implemented into microcontroller ATmega32. PC program includes graphic user interface and it is programmed in Java language. Abstrakt Tato bakalářská práce se zabývá realizací programovatelného termostatu k bojleru, který umožňuje ovládání ohřevu teplé vody podle týdenní otopové křivky, a realizací počítačového programu umožňujícího ovládání termostatu přes sériovou linku. Termostat je naprogramován v jazyce C a implementován do jednočipového mikropočítače ATmega32. Navrhovaný počítačový program obsahuje grafické uživatelské prostředí a je naprogramován v jazyce Java.

Obsah 1. Úvod... 1 1.1. Cíl práce... 1 2. Analýza a návrh řešení... 3 2.1. Volba implementační platformy... 4 2.1.1. Základní deska MB-ATmega32L... 5 2.1.2. Modul LCD displeje a tlačítek... 5 2.2. Použití programovacího jazyka... 5 2.3. Vývojové prostředí... 5 2.4. Teplotní čidlo... 6 2.5. Ovládání bojleru... 6 2.6. Návrh řešení termostatu... 7 2.6.1. Měření času... 7 2.6.2. Sériové rozhraní.... 7 2.6.3. Tlačítka.... 7 2.6.4. Otopová křivka... 7 2.6.5. Teplotní čidlo.... 8 2.6.6. Ovládání obvodu bojleru... 8 2.6.7. Nastavení hodnot.... 8 2.7. Návrh komunikace mezi PC a přípravkem... 8 2.8. Návrh programu pro komunikaci s PC... 10 3. Implementace... 13 3.1. Návrh programu termostatu... 13 3.1.1. Integrace částí programu... 13 3.1.2. Teplotní čidlo... 14 3.1.2.1. ROM příkazy... 15 3.1.2.2. Funkční příkazy... 16 3.1.2.3. Realizace komunikace... 17 3.1.3. Modul s LCD displejem a tlačítky... 19 3.1.4. Sériové rozhraní RS232... 19 3.1.5. Otopová křivka... 20 3.1.6. Implementace ovládání... 22 3.2. Návrh programu pro PC... 22 3.3. Návrh sestavení výsledného přípravku... 24 3.3.1. Deska s ovládáním obvodu s bojlerem.... 26 4. Testování... 27 4.1.1.1. Testování čítače reálného času... 29 4.1.1.2. Testování teplotního čidla... 29 4.1.1.3. Testování programu pro komunikaci... 29 4.1.1.4. Testování zápisu a čtení dat z EEPROM paměti... 30 4.1.1.5. Testování komunikace mezi termostatem a PC... 30 4.1.1.6. Testování ovládání obvodu bojleru... 30 5. Práce do budoucna... 31 5.1. Realizace desky pro spínání elektrického obvodu... 31 5.2. Záložní napájení... 31 5.3. Doplnit termostat o port USB... 31

5.4. Monitorování ústředního topení...32 5.5. Vylepšení programu pro PC...32 6. Závěr...33 7. Návod k používání termostatu...35 7.1. Instalace termostatu...36 7.2. Ovládání termostatu...36 8. Program pro komunikaci s PC...39 8.1. Ovládání programu...39 9. Literatura...43 10. Obsah přiloženého CD...45

Seznam obrázků 2.1 Základní deska MB-ATmega32L 3 2.2 Modul LCD displeje s tlačítky 4 2.3 Příklad příkazu Zapiš data 9 2.4 Příklad příkazu Zjisti data 9 3.1 Příklad komunikace s teplotním čidlem 14 3.2 Úvodní okno programu 22 3.3 Okno zobrazující informaci o teplotě 22 3.4 Okno pro vzdálené ovládání termostatu 23 3.5 Přehled okno zobrazující nastavení otopové křivky 23 3.6 Schéma zapojení přípravku 25 3.7 Schéma desky ovládání elektrického obvodu 25 4.1 Záznam příkazu WRITE SCRATCHPAD z osciloskopu 27 4.2 Schéma příkazu WRITE SCRATCHPAD 27 4.3 Záznam příkazu COPY SCRATCHPAD z osciloskopu 27 4.4 Schéma příkazu COPY SCRATCHPAD 28 4.5 Záznam příkazu CONVERT z osciloskopu 28 4.6 Schéma příkazu CONVERT 28 4.7 Záznam příkazu READ SCRATCHPAD z osciloskopu 28 4.8 Schéma příkazu READ SCRATCHPAD 29 7.1 Schéma ovládání elektrického obvodu 35 7.2 Schéma zapojení přípravku 35 7.3 Tlačítka termostatu 36 7.4 Schéma přepínání módů termostatu 36 8.1 Úvodní okno programu pro PC 39 8.2 Okno zobrazující teplotu vody 39 8.3 Okno pro vzdálené ovládání termostatu 40 8.4 Okno, které slouží k zobrazení hodnot otopové křivky 40

Seznam tabulek Tabulka 1.1: Stručný seznam vývojových desek dostupných na trhu 3 Tabulka 2.2: Typy příkazů komunikace po RS232 9 Tabulka 3.1: Možné příkazy komunikace s teplotním čidlem 16 Tabulka 3.2: Převod teploty 18

1. Úvod Jako téma bakalářské práce jsem si vybral Programovatelný termostat k bojleru. K tomuto rozhodnutí mne vedla myšlenka, jak ušetřit energii při ohřevu teplé vody na chatě, kde není k ovládání bojleru používán systém HDO (hromadné dálkové ovládání). Hlavní výhodou nasazení programovatelného termostatu je možnost zadání maximální teploty ohřevu pro týdenní časovou smyčku, čímž lze minimalizovat náklady za elektrickou energii. Na trhu se sice vyskytuje velké množství programovatelných termostatů, bohužel všechny slouží k ovládání topení v obytných prostorách, což znamená, že jsou všechny navrhovány pro práci v teplotním rozsahu maximálně 50 C. Tato teplota je ovšem pro ohřev vody nedostačující. 1.1. Cíl práce Cílem této práce je návrh a implementace zařízení programovatelného termostatu. Toto zařízení umožňuje zadat týdenní otopovou křivku a podle této křivky ovládat ohřev vody, pomocí spínání elektrického obvodu bojleru. Zařízení obsahuje displej, tlačítka, teplotní čidlo, vývody pro spínání silového obvodu a konektor pro připojení k PC pomocí sériového rozhraní RS232. Na displeji jsou zobrazeny informace o aktuálním dění programovatelného termostatu v základním módu displej zobrazuje informace o čase, teplotě ohřívané vody a požadované teplotě. Pomocí tlačítek je možné procházet nastavení termostatu a případně změnit nastavení hodin nebo požadované teploty. Jelikož zařízení umožňuje komunikaci s PC po sériovém rozhraní, je součástí tohoto projektu také implementace programu, který nám umožňuje ovládat přípravek z prostředí počítače. Tento program obsahuje grafické rozhraní a k jeho ovládání postačují základní dovednosti uživatele. 1

2

2. Analýza a návrh řešení Tabulka 1.1: Stručný seznam vývojových desek dostupných na trhu Název Čip Cena /Kč AVR Butterfy ATmega169 800 MB-ATmega16 ATmega16 1050 MB-ATmega32 ATmega32 1100 MB-ATmega128 ATmega128 1500 PVK 40 PIC16F877 2950 TestPack-78K0S µpd78f9177ay 2350 Obrázek 2.1: Základní deska MB-ATmega32L 3

Obrázek 2.2: Modul LCD displeje s tlačítky 2.1. Volba implementační platformy Při vybírání přípravku pro implementaci se naskytlo několik možností. Zvolit jednočipový mikropočítač nebo programovatelné hradlové pole FPGA? Implementace pomocí FPGA při použití pouze hardwarových prvků by nám přinesla vysokou rychlost zpracování dat problému, kterou při tomto návrhu ale nedokážeme využít. Navíc by byl tento způsob návrhu zbytečně složitý. Další možností by bylo do FPGA integrovat CPU jádro, tento způsob implementace by byl již lepší, ale při porovnání pořizovacích cen součástek tohoto řešení a cen s použitím jednočipového mikropočítače, bylo i toto řešení vyhodnoceno jako nevýhodné. Výběr přípravku proto směřoval na jednočipové mikropočítače. Na trhu lze najít mnoho čipů různých firem (Intel, Microchip, Atmel, Texas Instrument, ). Pro názornost jsem vybral některé modely a uvedl je v tabulce 2.1. Při výběru jsem zohlednil předchozí zkušenosti s mikropočítači, které jsem získal během studia v předmětech Strojový kód a data (X36SKD), kde jsem se seznámil s modulem AVR Butterfly (Atmel, čip ATmega169), a Mikropočítače (X34MPC), kde byl k dispozici modul PVK 40 (Microchip, čip PIC 18F452). I proto jsem se rozhodoval mezi dvěma největšími výrobci Microchip a Atmel, obě firmy vyrábějí čipy podobných vlastností, které se liší pouze v detailech, z finančního hlediska není mezi modely těchto firem žádný velký rozdíl. Nakonec jsem se rozhodl pro desku s čipem firmy Atmel, kterou jsem našel při procházení již vyrobených vývojových desek. Tato deska navrhnutá firmou PK-Design, lze si ji prohlédnout na obrázku 2.1, je osazena čipem ATmega32A. Výhody této desky jsou přítomnost sériového portu (RS232), 32 I/O výstupů na dvou portech (2x10) a možnost programovat a ladit přes sběrnice ISP a JTAG. Desku je potřeba doplnit modulem s LCD displejem a tlačítky, který lze vidět na obrázku 2.2. Při výběru jsem zvažoval i volbu výroby vlastní desky, kterou jsem nakonec zavrhl kvůli časové náročnosti návrhu desky (seznámení s návrhovým prostředím, různými technikami i způsoby návrhů, stanovení parametrů všech potřebných a efektivních součástek - stabilizátor napětí, převodníky TTL úrovní, registry, rezistory, kondenzátory apod.) a neefektivnosti tohoto řešení, jelikož se zatím jedná pouze o výrobu prototypu. Kdyby byl o takovýto výrobek větší zájem, výroba desky by se již dala zvažovat. 4

2.1.1. Základní deska MB-ATmega32L Na této desce, kterou je možné vidět na obrázku 2.1, je osazen čip ATmega32A, který obsahuje 8-bitový RISC procesor, sériové rozhraní, AD převodník, 32 I/O vývodů, tři paměti (32 kb Flash, 1kB EEPROM a 2kB SRAM) a jeden 16 bitový a dva 8 bitové čítače (každý čítač má svoji vlastní děličku pro nastavení frekvence). Čip nám umožňuje připojit k jednomu 8 bitovému čítači vnější oscilátor a použít ho jako čítač reálného času. K dispozici je také odpojitelné sériové rozhraní, u něhož se čip sám stará o přijímání a odesílání dat. Nevýhoda čipu je, že pokud chceme použít např. vnější oscilátor nebo sériové rozhraní, přicházíme o I/O vývody. Deska dále obsahuje dva konektory pro připojení dalších modulů (CON1, CON2), sériové rozhraní, konektory JTAG a ISP, dva oscilátory a šest konektorů nastavení (JP1 JP6). Konektory CON1 a CON2 jsou typu MLV20 (2x10). Obsahují v každé řadě piny VCC, P0-P7, GND. Sériové rozhraní se skládá z konektoru Canon 9 a obvodu MAX3232. Na desce lze najít dva oscilátory hlavní (14,7456 MHz, lze ho snadno nahradit jiným modelem a změnit tím frekvenci čipu) a vedlejší oscilátor (32,768 khz, který se hodí pro čítač reálného času). JTAG a ISP konektory slouží k programování a ladění přípravku. Konektor JP6 nám umožňuje pomocí propojky výběr napájecího napětí pro mikropočítač a periferie mezi 3,3V a 5V. Pořizovací cena této desky je 1130 Kč. 2.1.2. Modul LCD displeje a tlačítek Tento modul, který je možné vidět na obrázku 2.2, se připojuje k základní desce pomocí kabelu a obsahuje osm tlačítek, piezoelektrický měnič pro generování zvukových signálů, LCD displej 2x16 znaků (BC1602AYPLEH) a trimr pro nastavení kontrastu displeje. Modul lze připojit k základní desce pomocí paralelního rozhraní (14 vodičů) nebo sériového rozhraní (7 vodičů). Při použití dvaceti žilového vodiče je automaticky nastaveno paralelní rozhraní. Sériové rozhraní je povoleno jen v případě, že na pin SDS (1) portu není připojeno +5V a propojka JP1 je rozpojena. Jinak je vždy zakázáno. Pořizovací cena modulu je 570 Kč (deska s tlačítky 390 Kč, LCD displej 180 Kč). 2.2. Použití programovacího jazyka Přípravek je možno programovat použitím programovacího jazyka C nebo pomocí asembleru. Pro řešení svého projektu jsem se rozhodl pro použití jazyka C, tento způsob jsem zvolil kvůli snadnější reakci na případné budoucí problémy a vylepšení, ale také pro případný přechod na jiný druh mikropočítače. Pro realizaci programu pro PC jsem zvolil programovací jazyk Java. Tento jazyk jsem si vybral kvůli znalostem grafického uživatelského prostředí a možnosti přechodu na jiný operační systém. 2.3. Vývojové prostředí Pro implementaci termostatu v přípravku se nejvíce hodí program AVR Studio 4. Toto prostředí je vhodné zejména kvůli možnosti programování přípravku přímo z programu a kvůli testování částí zdrojového kódu. Tento program má totiž přístup k registrům, které jsou v čipu k dispozici. Při použití programovacího jazyka C je potřeba ještě překladač WinAVR. 5

Pro programování přípravku lze použít také program AVR ISP PROG společnosti PK-Design. Tento program nám umožňuje číst, kontrolovat a přepisovat obsah pamětí Flash a EEPROM přípravku. Obsah pamětí je možné pro další použití exportovat do souboru. Pomocí tohoto programu je možné ještě poupravit nastavení přípravku (např. uzamčení pamětí, povolení rozhraní JTAG ). Pro implementaci programu pro PC v programovacím jazyku Java je potřeba mít v systému nainstalovanou verzi Java SE JDK. Pro psaní kódu používám vývojové prostředí NetBeans IDE. K vývoji projektu byly použity aktuální verze programů, které byly uvolněny před zahájením projektu AVR Strudio 4, WinAVR 20100110, AVR ISP PROG v. 6.51, Java SE JDK 6u16, Netbeans 6.8. 2.4. Teplotní čidlo Pro termostat k ohřevu vody je potřeba čidlo s teplotním rozsahem 0 100 C. Pří výběru teplotního čidla se naskytly možnosti použití čidla s digitálním výstupem nebo s analogovým výstupem a použití AD převodníku. Jako lepší varianta bylo vyhodnoceno čidlo s digitálním výstupem. Čidla s digitálním výstupem se vyrábějí v následujících provedeních: jednodrátová sběrnice I 2 C sběrnice (1 datová linka, 1 pro hodinový signál) převodník teplota/střída (generuje PWM signál) Pro svůj návrh jsem si vybral teplotní čidlo firmy Dallas Semiconductor (člen společnosti Maxim), které komunikuje přes 1-drátovou sběrnici a má 3 vývody (V DD, zem, data). Toto čidlo je možné napájet klasicky nebo parasitně. Parasitně znamená, že je čidlo napájeno přes datovou linku. Výhodou tohoto zapojení je potřeba pouze dvou vodičů, nevýhody zapojení jsou: potřeba držet datovou sběrnici ve stavu log 1 pomocí pull-up rezistoru s relativně malým odporem, při teplotní konverzi (měření teploty) a ukládání do EEPROM paměti čidla může být odebírán větší proud, nevhodnost pro teploty nad 100 C. Pro tento termostat nejsou tyty nevýhody až tak důležité. Při klasickém napájení čidla jsou sice potřeba tři vodiče, ale není tolik zatěžována datová sběrnice. Během teplotní konverze můžeme kontrolovat stav čidla čtecím pulsem, kdy čidlo vysílá 0, dokud pracuje, nebo 1, pokud čeká na další příkazy. Čidlo umí měřit teplotu v 9-12 bitovém režimu přesnosti, tedy 1-4 bity pro desetinnou část. Pro návrh termostatu pro ohřev vody stačí přesnost na 1 C, proto je dostačující 9 bitový režim přesnosti. Další velkou výhodou tohoto čidla je možnost adresace čidla pomocí 64 bitového unikátního sériového kódu uloženého na čipu, tato adresace umožňuje použití více teplotních čidel na sběrnici. Toto řešení by se dalo použít v případě kombinovaného bojleru (voda je ohřívána pomocí elektrické spirály nebo pomocí ústředního topení), kde by byla kromě teploty vody monitorována také teplota vody ústředního topení pokud by se topilo v ústředním topení, byl by vypnut elektrický ohřev. Toto řešení nebude zatím implementováno. 2.5. Ovládání bojleru Při návrhu této části musíme zohlednit elektrické parametry navrhovaného termostatu a ovládaného bojleru. Vývojová deska má výstupní napětí U=5V 6

a maximální proud, který lze odebírat z výstupu mikropočítače, je I max =20mA. Pro bojler známe napájecí napětí U B =230V a výkon P B =2000W, spínaný proud (I B =P B /U B ) by tedy měl dosahovat hodnot kolem 8,7 A, proto musí být spínání dimenzováno minimálně na 10A, lepší variantou je dimenzovat na 16A kvůli zamezení překročení maximálních povolených hodnot spínacího prvku a minimalizovaní možnosti vzniku požáru. Při návrhu spínání obvodu s bojlerem je nutno si uvědomit, že se jedná o spínání síťového napětí s hodnotou 230V, proto je potřeba zamezit přístupu k živým částem tohoto obvodu, aby nedošlo k úrazu elektrickým proudem. Pro kontrolu spínacího zařízení je vhodné přidat kontrolku, která by informovala o sepnutí kontaktů. 2.6. Návrh řešení termostatu 2.6.1. Měření času. Programovatelný termostat by měl pracovat samostatně, přičemž musí každou vteřinu provést inkrementaci času a překreslení displeje. Tento proces je možné uskutečnit použitím přerušení vyvolaného při přetečení čítače reálného času (TIMER2/COUNTER OVERFLOW) nebo pomocí přerušení vyvolaného při shodě hodnoty čítače s požadovanou hodnotou (TIMER2/COUNTER COMPARE MATCH). Poslední variantou je kontrolovat hodnotu čítače ve smyčce hlavního programu, tato varianta je ale nevhodná, protože nemusí dojít k inkrementaci času při provádění časově náročné operace. Jelikož je vstupem čítače oscilátor s frekvencí 32,768 khz a při nastavení děličky na 128 dojde k inkrementaci čítače 256x za sekundu, tedy čítač dosáhne maxima pravidelně po jedné sekundě, je vhodné použít přerušení vyvolaného při přetečení čítače. 2.6.2. Sériové rozhraní. Dalším vstupem termostatu je sériové rozhraní, u kterého je potřeba zajistit co nejrychlejší příjem dat a uvolnění přijímacího registru pro další data. K těmto účelům by se nechalo opět využít přerušení (USART RX Complete). V obsluze tohoto přerušení je potřeba zkontrolovat platnost dat (např. kontrola parity) a uložit je pro další zpracování na zásobník. Při zpracování dat ze zásobníku by již nebyla data, která jsme přijali od počítače ohrožena dalšími přenosy. Dále by se přepisu dat nechalo zabránit pozastavením vysílače v počítači, než dojde k potvrzení dat od termostatu. 2.6.3. Tlačítka. Posledním vstupem termostatu jsou tlačítka, ty jsou sekvenčně testována pokud je tlačítko stisknuto, je nastaven jeho bit (8 tlačítek = 8 bitů), poté vybereme operaci pro právě stisknuté tlačítko. 2.6.4. Otopová křivka. Ukládání hodnot otopové křivky tyto hodnoty jsou uloženy do paměti EEPROM. Teplota je uložena jako celé číslo a nabývá kladných hodnot do 100 C, proto ji lze zapsat pomocí jednoho bytu a v paměti zabírá pouze jednu adresu. Zatím je navrženo rozlišení s krokem jedna hodina, které zabere 168 bytů paměti 7

(7dní * 24hodin = 168 hodnot), toto rozlišení se mi zdá prozatím dostačující, ale nevylučuji možnost nastavovat kratší úseky (např. 30 nebo 15 minutové). Jelikož paměť EEPROM má kapacitu 1 kb, maximální možné rozlišení v případě týdenního cyklu je nastavovat teplotu pro 10 minutové intervaly (7* 24* 6 = 1008). 2.6.5. Teplotní čidlo. K přípravku bude prozatím připojeno pouze jedno teplotní čidlo, které bude měřit teplotu v bojleru. Kontrola teploty v ústředním topení zatím nebude implementována, bude to možné vylepšení do budoucna. 2.6.6. Ovládání obvodu bojleru. Přípravek spíná topení podle hodnot otopové křivky uložené v paměti, dále by mohl umožnit sepnout nebo vypnout topení nezávisle na hodnotách v programovatelném termostatu. V tomto případě by byla maximální teplota ohřevu stanovena klasickým termostatem bojleru, který také zaručuje vypnutí tělesa při selhání přípravku. Existují dvě možnosti, jak to vyřešit. Jedna z nich je nastavení vyhrazené hodnoty v přípravku, která by umožňovala nastavit tři typy topení (zapnuto, vypnuto, měřit maximální teplotu podle otopové křivky). Druhá možnost je přidat dva vypínače, které by ovládaly vstupy relé. Varianta s přidáním vypínačů je uživatelsky příjemnější, protože nepožaduje změnu nastavení přípravku, ani není potřeba znalost ovládání termostatu pomocí tlačítek. Nevýhoda této volby je, že neumožňuje volbu ovládání z prostředí počítače. 2.6.7. Nastavení hodnot. Na termostatu bude možné provádět nastavení hodin (den, hodiny a minuty) a otopové křivky (nejprve nastavíme interval, ve kterém budeme požadovat novou hodnotu, den a hodina začátku, den a hodina konce, dále nastavíme požadovanou teplotu). Další funkcí je procházení teplotní křivky po jednotlivých hodinách. Pro pohyb nastavení slouží šipky, výběr příkazu bude navržen jako menu nebo jen jako přepínání kontextu. Při nastavování údajů bude pozice aktuálně nastavované hodnoty označena blikajícím kursorem. Více informací k ovládání přípravku je v uživatelské příručce k termostatu v příloze. 2.7. Návrh komunikace mezi PC a přípravkem Tato komunikace je zprostředkována pomocí sériového rozhraní RS232. Tento způsob komunikace nám umožňuje posílat data (5-8 bitů) a paritní bit (0-1 bit). Data jsou posílána nejnižším bitem napřed, po posledním datovém bitu může následovat bit paritní, který nám umožňuje provést kontrolu přenášených dat. Rychlost přenosu je potřeba zvolit tak, aby bylo možné data vysílat v krátkém časovém intervalu, ale také aby bylo umožněno přenášení dat i na větší vzdálenosti a zamezení znehodnocení dat vnějšími rušivými jevy při vyšších rychlostech. Dále je potřeba při volbě rychlosti zvážit počet sekvenčně vysílaných dat a jejich načítání nebo ukládání. Při použití pozastavování vysílače na straně počítače, který čeká na potvrzení každého bytu, nepotřebujeme mít na straně přípravku zaručenu velkou rychlost zpracování dat ani vysokou rychlost přenosu. Nejvíce dat je posíláno pouze z termostatu do počítače, kdy dojde při příkazu zjisti data (zjisti nastavení otopové 8

křivky) k odeslání 168 hodnot otopové křivky načítaných z paměti přípravku a jednoho potvrzení. To znamená, že přenos hodnot nepotřebuje vysokou rychlost. Tabulka 2.2: Typy příkazů komunikace po RS232 Počet vysílaných bajtů ve směru Příkaz Číslo příkazu Zápis v hex PC termostat termostat PC Zjisti data 237 0xED 2 169 Zapiš data 222 0xDE 5 4 Zjisti teplotu 203 0xCB 2 2 Zapiš čas 188 0xBC 5 4 OK 253 0xFD 1 0 Chyba 254 0xFE 1 1 Příkaz 0xDE DATA0 0x03 DATA1 0x25 DATA2 0x3C OK 0xFD Potvrzení 0xDE Potvrzení 0x03 Potvrzení 0x25 Potvrzení 0x3C Obrázek 2.3: Příklad příkazu Zapiš data Příkaz 0xED OK 0xFD Potvrzení 0xED BYTE0 0 BYTE 167 Obrázek 2.4: Příklad příkazu Zjisti data Dalším důležitým prvkem komunikace je bezpečnost. Při přenosu dat může dojít k jejich znehodnocení (chyba na straně přijímače nebo vysílače, rušení okolí), a proto je potřeba umožnit detekci chyb. Jelikož při zadávání hodnot z počítače je použito potvrzování a pravděpodobnost vzniku chyby není velká, lze data zabezpečit paritním bitem, který nám umožňuje detekci lichého počtu chyb a je vypočítán z přenášených dat. Máme na výběr lichou nebo sudou paritu, kdy počet jedniček i s paritním bitem je lichý, respektive sudý. Komunikace má zatím definovány jen čtyři příkazy, jež začínají vždy na straně počítače, který odešle hodnotu příkazu a čeká na jeho potvrzení. Pokud za příkazem následují další data, jsou vysílána postupně a vždy se čeká na příjem potvrzení a kontrolu správnosti, protože se jedná o důležité hodnoty pro nastavení termostatu (otopová křivka, hodiny). 9

V tabulce 2.2 jsou uvedeny možné příkazy komunikace a zápis příkazu v desítkové a šestnáctkové soustavě. Poslední dva sloupce zobrazují počet bytů, které lze při provádění příkazu zachytit na sběrnicích. Pro názornost, jak by mohla komunikace vypadat, přikládám obrázky 2.3 a 2.4, na kterých je zachycena posloupnost údajů. První řádek znázorňuje přenos od počítače k termostatu, druhý naopak přenos od termostatu k počítači. Příkazem Zjisti data vyšle počítač přípravku žádost o poslání informací o nastavení otopové křiky, proto je přenášeno směrem k počítači tolik hodnot (1 příkaz + 168 hodnot této křivky). Zapiš data slouží k nastavení otopové křivky podle hodnot poslaných z programu v počítači. Po příkazu Zjisti teplotu odešle přípravek počítači aktuální teplotu vody v bojleru. Příkaz Zapiš čas slouží k nastavení časových údajů termostatu podle hodnot na počítači. Příkaz OK je vysílán počítačem a znamená, že i poslední potvrzená hodnota byla správná a může dojít k vykonání příkazu, který byl nyní potvrzen. Příkaz Chyba lze zachytit, jak na trase od termostatu k počítači, tak naopak. Tento příkaz dává druhé straně najevo, že přijatá data jsou špatná (nesedí parita, přijatý příkaz není stejný, jako jsme posílali apod.). 2.8. Návrh programu pro komunikaci s PC Pro komunikaci s termostatem je potřeba vytvořit program, který by tuto komunikaci zprostředkoval i lidem, kteří mají pouze základní znalosti práce s PC. Proto je implementace orientována do jazyku Java, který umožňuje jednoduchou tvorbu grafického prostředí, jež by mělo při použití prvků knihovny Swing [7] vypadat na různých operačních systémech stejně. Jelikož způsob ovládání periferních zařízené (v tomto případě sériového portu) pod operačními systémy Windows a Linux (např. Ubuntu) není shodný, je potřeba vytvořit dvě aplikace, nebo jednu aplikaci umožňující výběr prostředí. Problém vzniká například při použití převaděčů USB na RS232 v systému Windows vzniká virtuální port, který se chová stejně jako sériový, ale na systému Linux jsou odkazy na tento port umístěny mezi odkazy na USB zařízení. Proto se v této práci zaměřím pouze na vývoj programu pod operačním systémem Windows, který je nejvíce používaným systémem. Komunikaci s porty v tomto programovacím jazyce umožňuje použití doplňkových knihoven. Na internetu jsou k nalezení knihovny Comm a RXTX. Která varianta je lepší, se ukáže až v samotném návrhu a testování programu. Program bude nejlepší rozdělit do různých částí, oddělit základní parametry programu (výběr portu pro komunikaci) a jednotlivých ovládacích prvků (nastavení hodnot v paměti přípravku, zobrazení nastavených a naměřených hodnot z přípravku, změna času ). Přijímač a vysílač bude nejvýhodnější navrhnout jako vlákna. Tato varianta umožňuje příjem dat i v době, kdy běží vysílač, a měla by zamezit zmeškání dat nebo chybnému čtení. Pro základní nastavení programu, tedy výběr příslušného portu, se jako nejjednodušší možnost pro uživatele nabízí výběr portu ze seznamu, jelikož se jedná o výběr 1 z N, tak se zdá nejvýhodnější varianta použití Check Box okénka. 10

Ovládání lze umístit na jeden formulář, který by mohl obsahovat všechny možnosti nastavení hodnot pro zadávání otopové křivky, ovládací prvky. Formulář zadávání tedy bude obsahovat pět políček pro nastavení hodnot a čtyři tlačítka pro jednotlivé příkazy. Při stisknutí tlačítka zadat čas by došlo k odeslání dat (aktuální hodnoty počítače den, hodiny, minuty). Při výběru nastavení otopové křivky by se vypočetly hodnoty, které by byly následně poslány přípravku. Při výběru příkazů Zjisti teplotu nebo Zjisti nastavení křivky ( Zjisti data ) by se otevřely nové formuláře. Pro teplotu může být jednoduchý, protože zobrazuje informaci pouze o teplotě. Formulář, který vypisuje aktuální informace o otopové křivce, je složitější, protože zde musí zobrazit 168 údajů. Pokud by byly nastaveny kratší intervaly, vzrost by počet údajů a také doba potřebná k přenesení údajů od přípravku do počítače, kterou lze snížit zvýšením rychlosti přenosu. 11

12

3. Implementace Kapitolu implementace programovatelného termostatu lze rozdělit do tří částí: návrh programu termostatu, implementace programu pro PC a sestavení výsledného přípravku. 3.1. Návrh programu termostatu V této kapitole se zabývám vývojem softwarové části termostatu. Návrh programu je prováděn v programovacím jazyce C, ze kterého vývojové prostředí vytvoří kód v asembleru a program (hexadecimální zápis) pro nahrání do přípravku. Při nahrávání je pak změněn obsah pamětí Flash a EEPROM čipu podle námi zvolených parametrů. Kapitolu bych rozdělil na více části, ve kterých se budu věnovat pouze určitému problému (ovládání teplotního čidla, komunikace po RS232, ovládání modulu s displejem a tlačítky, přerušení ). Nejprve bych shrnul celkový program v podkapitole Integrace částí a poté bych se věnoval jednotlivým částem v dalších podkapitolách. 3.1.1. Integrace částí programu V této podkapitole bych chtěl shrnout výsledný návrh programu, který je nahrán do čipu ovládací desky. Konečný program zahrnuje všechny body návrhu a implementuje je v nejvýhodnější formě pro programovatelný termostat. Při zapnutí přípravku dojde k inicializaci a základnímu nastavení jednotlivých periférií (modul s tlačítky a LCD displejem, teplotní čidlo, komunikace po RS232 a přerušení). Zbytek programu je procházen v nekonečné smyčce, při každém jejím průchodu je zkontrolován zásobník pro ukládání příkazů a dat přijatých po sériové lince. Pokud jsou zde uložena data, které je již možné zpracovat, provede se obsluha tohoto příkazu. V ostatních případech se tato operace přeskočí a přečteme stavy tlačítek. Pokud je nějaké tlačítko stisknuto, dojde k jeho obsluze a piezoelektrický měnič vygeneruje zvukový signál. Vedlo této smyčky program obsahuje dvě přerušení. Jedná se o přerušení vyvolané osmi bitovým čítačem a přerušení signalizující přijatá data ze sériové linky. Přerušení sériové linky. Pokud je vyvoláno přerušení ze sériové linky, dojde ke kontrole těchto dat, a pokud nebyla zjištěna žádná chyba, dojde k uložení dat na zásobník. Označení zásobník může být zavádějící, protože se nejedná o systémový zásobník, ale o pole velikosti pěti bytů, do kterého jsou ukládána přijatá data. Jelikož příkazy od počítače jsou maximální délky čtyř bytů, je toto řešení dostačující. 13

Přerušení čítače reálného času. Druhé přerušení, která má vyšší prioritu, je přerušení vyvolané maximální hodnotou osmi bitového čítače reálného času, ke kterému je připojen krystal o frekvenci 32,768 khz. Čítač má děličku hodinového signálu nastavenou na hodnotu 128, která nám zaručuje dosažení maximální hodnoty 1x za sekundu, a proto je vhodný k použití jako čítač reálného času. Při obsluze tohoto přerušení je provedena inkrementace času, pokud je termostat v normální módu (zobrazení informací), dojde také k překreslení LCD displeje. Každou minutu dojde k přečtení teploty a jednou za určitý interval (např. 15 minut) dojde k přečtení požadované teploty z paměti. Jednou za minutu dojde také k porovnání požadované teploty s naměřenou teplotou, podle kterého dojde k sepnutí nebo rozepnutí ovládacího obvodu relé, připojeného k pinu PD5. 3.1.2. Teplotní čidlo RESET PULS PRESENC PULS ROM příkaz Funkční příkaz Obrázek 3.1: Příklad komunikace s teplotním čidlem Pro svoji práci jsem si vybral model DS18B20, který na trh dodává firma Dallas Semiconductor. Čidlo je dostupné ve třech typech provedení pouzder 8-pin SO (150mil), 8-pin µsop a 3-pin TO-92. Pro svoji práci jsem si vybral provedení TO-92, které se svými rozměry hodí k připájení na kabel. Ostatní modely jsou určeny hlavně pro osazení na deskách plošných spojů. Pouzdro TO-92 má tři vývody V DD, DQ a GND. Vývod DQ slouží pro čidlo jako vstup i výstup. Datová sběrnice (DQ) je potřeba připojit k napájení (V DD ) pomocí pull-up rezistoru (R=4,7 kω). Toto teplotní čidlo je možné napájet dvěma způsoby, parasitně (napájeno přes datovou sběrnici DQ, V DD musí být přizemněno) nebo klasickým způsobem. Pro návrh svého obvodu jsem si vybral klasický způsob napájení. Jsou sice potřeba tři vodiče, ale nemůže dojít k výpadku napájení při zápisu do EEPROM paměti nebo při konverzi teploty a není kladen důraz na rychlost nastavení log 1 na sběrnici. Čidlo umí měřit teplotu od -45 C do 125 C, pro interval od -10 C po 85 C je zaručena minimální přesnost ± 0,5 C. Čidlo je možné nastavit na 9-12 bitový režim měření, tedy 1 4 bity pro desetinnou část. Pro programovatelný termostat ohřevu vody nám plně vystačuje přesnost na celé stupně, větší přesnost nemá význam, protože požadované hodnoty jsou v paměti uloženy jako 8 bitová čísla. Doba měření teploty pro 12 bitový režim je 750 ms. Za každý ubraný bit dostaneme poloviční časový úsek potřebný k převodu teploty. Proto je v práci používáno čidlo v 9 bitovém režimu a hodnota teploty, používaná v termostatu, je pouze její 8 bitová celá část. Další výhodou DS18B20 je možnost použít více čidel na jedné sběrnici a možnost nastavit registry alarmu. Čidlo při každé teplotní konverzi kontroluje, zda je teplota mezi hodnotami v registrech, pokud není, nastaví se alarm flag. Toto řešení umožňuje ovládacímu zařízení monitorovat, zda na některém čidle nedošlo k překročení maximální nebo minimální hodnoty pro měřenou oblast, aniž by znalo aktuální teploty této oblasti. Jelikož jsou pro realizaci termostatu použita maximálně dvě teplotní čidla, u kterých potřebujeme znát měřenou teplotu, není třeba kontrolu alarmu přidávat. 14

Komunikace s teplotním čidlem probíhá přes 1-drátovou sběrnici, tento způsob nepatří mezi standardní komunikační rozhraní, ale není těžký na implementaci. Komunikace začíná vždy reset pulsem, na který zařízení odpovídá přítomnostním pulsem. Přenos dat je vždy zahájen nejnižším platným bitem. Příkazy lze rozdělit na ROM příkazy (výběr zařízení na sběrnici) a funkční příkazy. Pro názornost přikládám ukázku komunikace, viz obrázek 2.5. Komunikace začíná vždy reset pulsem, následuje presenční puls, který nás informuje, zda je nějaké zařízení k dispozici. Po tomto pulsu je možné vyslat ROM příkaz, který adresuje čidla připojené k této jednodrátové sběrnici, po dokončení adresace je vyslán funkční příkaz, podle kterého čidlo provede určitou operaci. Příkazy jsou rozebrány v následujícím textu. Čidlo obsahuje Scratchpad paměť (9 bytů), která obsahuje tato data 2 byty teplota, 2 byty registry alarmu, 1 byte nastavení režimu konverze, 3 byty pro vnitřní funkce čidla a 1 byty CRC. V následujícím textu jsou rozepsány jednotlivé příkazy, které umožňují komunikaci s teplotním čidlem. Dělí se na ROM příkazy, která umožňují získat identifikační čísla a podle nich adresovat jednotlivá zařízení na sběrnici, a na funkční příkazy, které určují činnost teplotního čidla. 3.1.2.1. ROM příkazy Používají se k získání identifikačních čísel a k adresaci zařízení na sběrnici. SEARCH ROM Příkaz se využívá po inicializaci a slouží k získání 64 bitových identifikačních klíčů všech zařízení na sběrnici. Musí být proveden tolikrát, kolik je použito zařízení. Tento příkaz je složitější na implementaci. READ ROM Obdoba předchozího příkazu, ale slouží k získání identifikačního čísla pouze jednoho zařízení. To znamená, že nesmí být přítomno více zařízení, jinak by došlo ke kolizi dat. MATCH ROM Tento příkaz, následovaný 64 bitovým identifikačním číslem, slouží k výběru zařízení s tímto identifikačním číslem. Ostatní zařízení nebudou odpovídat, dokud nebude proveden reset. Tento příkaz je nutné použít, pokud chceme číst teplotu ze sběrnice, kde je přítomno více zařízení. SKIP ROM Příkaz vybere všechny zařízení na sběrnici. Je vhodné ho použít, pokud máme pouze jedno teplotní čidlo, nebo pokud chceme provést měření na všech čidlech. Jestliže po tomto příkazu bude následovat čtení dat a na sběrnici bude více zařízení, může dojít ke kolizi dat. ALARM SEARCH Slouží ke kontrole, zda nemá některé zařízení nastaven alarm flag. Ten je nastaven, pokud při předchozím měření byla hodnota teploty mimo meze nastavené v registrech čidla. 15

Tabulka 3.1: Možné příkazy komunikace s teplotním čidlem Typ příkazu ROM příkazy Funkční příkazy Název příkazu SEARCH ROM READ ROM MATCH ROM SKIP ROM ALARM SEARCH CONVERT WRITE SCRATCHPAD READ SCRATCHPAD COPY SCRATCHPAD RECALL E 2 READ POWER SUPPLY Zápis příkazu 0xF0 0x33 0x55 0xCC 0xEC 0x44 0x4E 0xBE 0x48 0xB8 0xB4 3.1.2.2. Funkční příkazy Určují činnost teplotního čidla. CONVERT Po tomto příkazu následuje měření teploty, výsledná hodnota je uložena ve 2 bytech scratchpad paměti čidla. Je-li čidlo napájeno klasickým způsoben, je možné kontrolovat stav konverze čtecími pulsy, kdy čidlo vysílá 0 během procesu a 1, pokud již byla konverze dokončena. WRITE SCRATCHPAD Po tomto příkazu jsou poslány další 3 byty nastavení. Byty jsou přijímány a zapsány do scratchpad paměti (na pozice 2-4). Příkaz umožňuje nastavit režim konverze a spodní a horní registry alarmu. READ SCRATCHPAD Tento příkaz požaduje od čidla obsah scratchpad paměti a využívá se pro předávání teploty. Poté ovládací zařízení může číst všech 9 bytů paměti čidla. Ovládací zařízení ukončí čtení resetem, pokud nechce všech 9 bytů. Data začínají nejnižším bitem. COPY SCRATCHPAD Čidlo uloží obsah nastavení režimu konverze a registry pro alarm ze Scratchpad paměti do EEPROM paměti. RECALL E 2 Opak příkazu COPY SCRATCHPAD, nastavení je obnoveno z paměti EEPROM. READ POWER SUPPLY Tento příkaz umožňuje ovládacímu zařízení zjistit, zda jsou na sběrnici přítomna zařízení napájená pomocí parasitního režimu. Při čtení stavu sběrnice vysílají zařízení napájená tímto způsobem hodnotu log 0. 16

Implementace ovládání teplotního čidla je v souboru cidlo.c (hlavičkový soubor cidlo.h). Pro správný způsob komunikace je potřeba nejdříve nastavit pin, ke kterému je poté potřeba připojit sběrnici. Jelikož sběrnice pracuje na principu otevřeného kolektoru, kde hodnota log 0 je nastavena pomocí otevření tranzistoru a přizemnění sběrnice a hodnota log 1 je nastavena pomocí pull-up rezistoru, rozhodl jsem se na přípravku nastavovat log 0 jako výstup a log 1 přepnutím na vstup. Pin je nastaven jako výstupní, pouze pokud je na výstupu nastavena log 0. Pro ukázku přikládám část programu ovládání teplotního čidla, která slouží ke změně vstupu a výstupu pro I/O vývod PD4. unsigned char pinp=0x10; void zapis_0(){ DDRD =pinp; //nastaví pin jako výstup PORTD&=~pinP; //nastaví hodnotu log 0 } void zapis_1(){ DDRD&= ~pinp; } //nastaví pin jako vstup 3.1.2.3. Realizace komunikace Každý příkaz začíná reset pulsem, kdy na sběrnici nastavíme hodnotu log 0 po dobu minimálně 480µs. Na tento puls reaguje čidlo po 15 60µs presenčním pulsem, log 0 po dobu 60-240µs. Po uplynutí 860µs od začátku komunikace lze začít posílat příkaz ROM, který vybere čidla na sběrnici, po výběru zařízení je možné vyslat funkční příkaz, který určí následující operaci teplotního čidla. Zápis bitu s hodnotou 0 provedeme tak, že na sběrnici nastavíme log 0 na dobu 60 120µs, bit s hodnotou 1 je zapsán nastavením log 0 na dobu 1µs, po této době se sběrnice přes pull-up rezistor nabije do stavu log 1. Čtení hodnot probíhá nastavením log 0 na dobu 1µs, poté musíme vyčkat, aby se případně stihla sběrnice nabít přes pull-up rezistor, a pak teprve přečíst hodnotu, která je platná maximálně 15µs od začátku čtení. Časový úsek pro zápis i čtení musí trvat minimálně 60µs a mezi jednotlivými úseky musíme vyčkat minimálně 1µs. Pro názornost přikládám ukázku čtení a zápisu 1B (8 bitů). Protože data jsou vysílána od nejnižšího platného bitu po nejvyšší, přijímá funkce aktuální hodnotu jako nejvyšší bit a poté provede posun doprava. void write_byte (char prikaz){ // funkce která vysílá byte for (i=0; i<8; i++){ bit=prikaz & 0x01; //výběr nejnižšího bitu prikaz=prikaz>>1; //posuv příkazu o 1 bit vpravo _delay_loop_2(wait_1us); //vyčká 1µs mezi úseky zapis_0(); //nastaví hodnotu 0 na sběrnici _delay_loop_2(wait_1us); //opět vyčká 1µs if (bit == 0) _delay_loop_2(wait_80us); //vyčkáme 80µs zapis_1(); //nastavíme hodnotu 1 }else{ zapis_1() //nastavíme hodnotu 1; _delay_loop_2(wait_80us); //vyčkáme 80µs }}} 17

Tabulka 3.2: Převod teploty bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 2 3 2 2 2 1 2 0 2-1 2-2 2-3 2-4 bit 15 bit 14 bit 13 bit 12 bit 11 bit 10 bit 9 bit 8 znaménko 2 6 2 5 2 4 char precti(){ char tmp=pinp; tmp&=pind; tmp = tmp << 7; return tmp; } //funkce přečte bit //nastavení, který bit chceme číst //načteme hodnotu tohoto bitu (použijeme logický součin) //posuneme vlevo, aby byl bit nejvyšším //předá hodnotu char read_byte (void){ // funkce která čte byte byte = 0x00; //smazání proměnné for (i=0; i<8; i++){ zapis_0(); //nastavení nuly _delay_loop_2(wait_1us); //vyčká 1µs zapis_1(); //zapíše 1 _delay_loop_2(wait_10us); //vyčká 10µs byte=byte>>1; //posun o 1bit doprava byte =precti(); //přečte aktuální hodnotu _delay_loop_2(wait_50us); //vyčká 50 µs } return byte; } Při zapnutí přípravku musí dojít k inicializaci čidla nastavení 9 bitového režimu a registrů alarmu, i když nejsou využity. Nastavení je provedeno v metodě write_scratch(), ve které jsou odeslány 4B (0x4E, 0x00, 0x60, 0x1F). Byty jsou v následujícím pořadí: příkaz, spodní a horní registry alarmu a nastavení pro 9 bitový režim. Následně jsou informace zkopírovány do paměti EEPROM, kdyby došlo k výpadku napětí čidla. void init_cidlo () { zapis_1(); reset_pulse(); byte = read_presence(); skip_rom(); write_scratch(); _delay_loop_2(wait_80us); //vyčkat 80µs reset_pulse(); byte = read_presence(); } skip_rom(); copy_scratch(); //nastaví jako výstup //reset puls //přečte přítomnostní puls //vybere všechny zařízení na sběrnici //nastavení čidla //uloží nastavení do EEPROM paměti Čtení teploty probíhá načtením obsahu scratchpad paměti. Pro získání teploty jsou důležité pouze první dva byty. Převod na dekadickou hodnotu probíhá podle schématu popsaného v tabulce 3.2. Následující kód je použit pro načítání teploty a převod na dekadickou hodnotu. 18

char read_temp (){ //čtení teploty reset_pulse(); byte = read_presence(); //čtení přítomnostního pulsu if(byte==0x10){return 0x00;} //kontrola přítomnosti čidla skip_rom(); read_scratch(); //příkaz čtení obsahu scratch paměti char tmp1=read_byte(); //čtení prvního bytu _delay_loop_2(wait_50us); //vyčkat 50µs tmp1=tmp1>>4; //posuv o 4 bity vpravo => pouze 4 nejvyšší bity char tmp2=read_byte(); //čtení druhého bytu _delay_loop_2(wait_50us); //opět vyčkat 50µs tmp2=tmp2<<4; //posuv o 4 bity vlevo => použití pouze 4 nejnižší bity tmp1=tmp1+tmp2; //sloučení hodnot ve výslednou teplotu for(i=0;i<7;i++){ read_byte(); //přečte zbylé položky scratchpad paměti _delay_loop_2(wait_50us); //mezi čtením vyčká vždy 50µs } return tmp1; } 3.1.3. Modul s LCD displejem a tlačítky Modul lze připojit k desce pomocí sériového nebo paralelního rozhraní, v tomto návrhu využívám pouze paralelní rozhraní (připojení pomocí 20 žilového plochého kabelu), které sice potřebuje více vodičů, ale umožňuje jednodušší ovládání. Modul obsahuje piezoelektrický měnič pro generování zvukových signálů, který je využit při stisku tlačítka. Dále deska obsahuje dvouřádkový LCD displej, který umožňuje na každém řádku zobrazit 16 znaků. Jedná se o displej se žlutozeleným pozadím a evropským znakovým fontem. Na modulu je k dispozici také osm tlačítek, které nám umožní základní ovládání programovatelného termostatu. Modul je potřeba připojit k portu CON1 vývojové desky, port CON2 není možné použít k připojení, protože nejsou k dispozici všechny I/O vývody čipu ovládací desky, které jsou využity k jiným účelům. Pro ovládání modulu jsem použil zdrojové kódy umístěné na stránkách výrobce desky firmy PK-Design [5], které jsem poupravil do výsledné podoby. Tyto zdrojové kódy jsou uloženy v souboru modul_tlacitka.c (hlavičkový soubor modul_tlacitka.h). Ovládání LCD displeje je uloženo v souboru lcd.c (hlavičkový soubor lcd.h). Zdrojové kódy pro ovládání LCD displeje byly také k dispozici, ale rozhodl jsem se je poupravit podle dokumentace k displeji [6]. Pokud porovnáme funkce s dostupným kódem k ovládání LCD displeje, je řešení velmi podobné. Způsobeno je to tím, že není možné napsat tyto funkce jinak, pokud vyžadujeme identickou funkčnost. 3.1.4. Sériové rozhraní RS232 Rozhodl jsem se vyrobit přípravek, který by byl schopný komunikovat s počítačem, program v PC by umožnil například vzdálené ovládání. Pro připojení k počítači je na základní desce připraven odpojitelný sériový port. Tento port sdílí dva I/O vývody čipu portu D, které jsou jinak vyvedeny na portu CON2 (PD0, PD1). Čip osazený na desce podporuje sériovou komunikaci a stará se za nás o vysílání a přijímání dat v požadované formě a rychlosti. 19

Při realizaci jsem se rozhodl použít standardní velikost datového bloku 8 bitů, které jsou zabezpečeny pomocí jednoho paritního bitu. Lze použít sudou nebo lichou paritu. Při návrhu jsem se rozhodl použít lichou paritu (součet jedniček datových bitů i s paritním bitem je liché číslo). Paritní bit nám umožňuje detekci lichého počtu chyb. Rychlost přenosu dat jsem zvolil 9600 BAUD (znaků za sekundu). Při zapnutí termostatu je potřeba nastavit parametry pro sériové rozhraní čipu USART (Universální synchronní a asynchronní přijímač a vysílač). Nastavení tohoto rozhraní je uloženo v registrech UCSRB, UCSRC, UBBRL a UBBRH. V registru UCSRB je možné nastavovat přerušení, povolit přijímač a vysílač, jeden bit velikosti datové části a také jsou zde 2 bity pro posílání a příjem devátých datových bitů. V tomto registru je potřeba povolit přerušení při dokončení příjmu (7) a odeslání (6) dat, povolit přijímač (4) i vysílač (3). V registru UCSRC lze nastavit, zda používáme synchronní nebo asynchronní operace, paritu, počet stop bitů, počet datových bitů a polaritu hodin (při užití synchronního módu). Pro přístup k tomuto registru musí být nejvyšší bit 1, protože registr sdílí adresu s registrem UBBRH. Nastavíme asynchronní mód, lichou paritu, 1 stop bit a 8 datových bitů. Nakonec je potřeba nastavit rychlost přenosu dat, což provedeme zapsáním hodnoty UBBR do registrů UBBRL a UBBRH. Hodnotu UBBR pro asynchronní normální mód vypočteme podle vzorce: f OSC fosc BAUD = UBBR = 1 16( UBBR + 1) 16BAUD 14,7456 10 UBBR = 16 9600 6 1 = 95 void init_rs232(){ //nastavení děličky UBRR UBRRH = 0x00; UBRRL = 0x5F; //95 } UCSRB = 0xD8; UCSRC = 0xA6; Příjem a zápis dat jsou prováděny přes registr UDR, ve kterém je uloženo 8 bitů dat, samotné vysílání a přijímání jednotlivých bitů je zajištěno zařízením USART na čipu. Výstup tohoto zařízení je připojen k na I/O vývody portu D PD0 a PD1. Při přijetí dat dojde k vyvolání přerušení, v obsluze tohoto přerušení dojde ke kontrole dat, kontrola parity, kontrola datového okna (zda není stop bit roven log 0) a zda nedošlo k přepisu přijatých dat. Pokud byla zjištěna chyba, vyšle termostat Error (hodnota 0xFE), v ostatních případech vyšle potvrzení (stejnou hodnotu, která byla přijata) a uloží tento byte na zásobník. Komunikace v plné rychlosti probíhá pouze při odesílání hodnot otopové křivky nastavených v přípravku. 3.1.5. Otopová křivka Hodnoty otopové křivky jsou uloženy v EEPROM paměti na čipu, aktuální požadovaná teplota je uložena v proměnné (tj. v SRAM paměti) a je pravidelně načítána. Programovatelný termostat lze rozdělit maximálně na 10 minutové 20

intervaly (1008 hodnot), pro které lze nastavit různou teplotu. Pro realizaci prototypu je zatím navržen hodinový interval pro týdenní časovou smyčku. Tato volba vyžaduje 168 B paměti EEPROM. Nastavení hodnot otopové křivky je možné vysláním příkazu z počítače, nebo pomocí tlačítek termostatu. Při správném zadání údajů (kontrola, zda nejsou zadány stejné údaje pro začátek i konec intervalu) je zavolána funkce, která se stará o zápis do paměti. Funkce umí zkontrolovat, zda není konec intervalu v týdnu dříve než začátek, pokud je požadované zadání, dojde k rozdělení na dva cykly, první se postará o zápis dat do konce týdne, druhý se postará o zápis od začátku týdne do zvoleného datumu. V opačném případě je použit pouze jeden cyklus, kde je inkrementován ukazatel na již zapsaná data. V cyklu se volá funkce s parametry adresa a hodnota, která nastaví na adresu požadovanou hodnotu teploty. Pří přístupu k paměti musíme vždy vyčkat na dokončení předchozí operace s pamětí. Poté je potřeba nastavit adresu (registry EEARL a EEARH), při zápisu případně data. Operace čtení začne, pokud je nastavena připravenost zařízení číst (bit EERE registru EECR). Při zápisu je potřeba nejprve nastavit, že je zařízení připraveno na zápis (bit EEME) a poté teprve zahájit proces zápisu (bit EEWE). Ukázka zdrojového kódu pro práci s paměti (tyto metody se nachází v souboru ovladani.c). unsigned char get_ee(unsigned char adr){ while(eecr & (1 << EEWE)); EEARH = 0x00; data) EEARL = adr; EECR = 0x01; return EEDR; } //čekám na dokončení předchozích operací //nastavení vrchních bitů adresy (nejsou zde //nastavení spodních bitů adresy //nastavím 0bit, že jsem připraven číst //EEDR EEPROM data registr void set_ee(unsigned char adr, unsigned char temp){ while(eecr & (1 << EEWE)); //čekám na dokončení předchozích operací EEARH = 0x00; //nastavení adresy EEARL = adr; EEDR=temp; //EEDR nastavení dat do EEPROM data registru EECR = 0x04; //nastavím 2 bit, že jsem připraven zapisovat EECR = 0x02; //nastavím 1 bit na 1, můžu zapisovat } void zapisdata(){ if(tod < tdo){ while(tod<tdo){ set_ee(tod,tepz); tod++; } }else{ int ad; for(ad=tod;ad<168;ad++){ set_ee(ad,tepz); } for(ad=0;ad<tdo;ad++){ set_ee(ad,tepz); } nastav = 0 nastav_stav(0); } //začátek menší než konec //zápis dat //začátek větší než konec //smyčka od začátku intervalu do konce týdne //zápis dat //smyčka od začátku týdne po konec intervalu //zápis dat //zneplatnění posledních načtených dat; //nastaví normální mód displeje 21

3.1.6. Implementace ovládání Termostat umožňuje čtyři základní módy, jež lze zvolit pomocí tlačítek, a čtyři rozšiřující módy, ve kterých se přípravek nachází při komunikaci s počítačem. Základní módy umožňují nastavení času, nastavení otopové křivky, procházení hodnot a zobrazení informací o aktuálním dění. Při implementaci přepínání módů byla zvažována možnost použití menu, které by bylo přehledné a při použití více položek určitě i výhodnější. Jelikož termostat umí pouze tyto čtyři módy, vystačuje zatím přepínání pomocí tlačítek F1 a F2. Při nastavování otopové křivky je na prvním řádku zobrazen název operace a spodní řádek slouží k zobrazení aktuálně nastavovaných hodnot, řádek je rozdělen na sloupce podle počtu proměnných, které lze měnit. Hodnota, která je právě vybrána, je zdůrazněna pomocí kursoru displeje. Pro pohyb mezi sloupci jsou použita tlačítka vlevo a vpravo, pro pohyb mezi řádky tlačítka Enter a ESC. Procházení otopové křivky je pomocí tlačítek vlevo a vpravo znamená změnu o hodinu, nahoru a dolu znamená změnu o 24 hodin (celý den). Při každém stisku směrových tlačítek dojde k nahrání hodnoty z paměti EEPROM. Nastavení změny času bylo nejdříve implementováno pouze v jednom kroku, toto řešení je sice jednodušší na implementaci, ale mohlo by snadno dojít ke změně údajů při nechtěném stisku tlačítka. Proto je toto řešení rozděleno do dvou kroků, přičemž v prvním nastavíme hodnoty (den, hodiny a minuty). Nastavení těchto hodnot probíhá na jednom řádku. Při stisku tlačítka Enter je nyní zobrazen potvrzovací dialog, při opětovném stisku tlačítka Enter dojde teprve k přednastavení údajů o čase. 3.2. Návrh programu pro PC Obrázek 3.2: Úvodní okno programu Obrázek 3.3: Okno zobrazující informaci o teplotě 22

Obrázek 3.4: Okno pro vzdálené ovládání termostatu Obrázek 3.5: Přehled okno zobrazující nastavení otopové křivky Program je navrhován v programovacím jazyku Java a je určen pro operační systém Windows. Umožňuje komunikaci s programovatelným termostatem přes sériový port, tuto komunikaci umožňuje použitá knihovna RXTX, která nám umožňuje přístup k portům počítače. Při běhu programu musí být tato knihovna ve stejné složce jako spouštěný program. Výhodou tohoto programu je pro uživatele grafické uživatelské rozhraní, které umožňuje jednoduché ovládání pomocí základních komponent. Po spuštění programu se zobrazí úvodní obrazovka (viz. obrázek 3.2), kde je potřeba provést důležité nastavení programu a vybrat port, ke kterému je připojen kabel od přípravku. Výběr probíhá z komponenty CheckBox, která po rozkliknutí zobrazí seznam aktuálně dostupných portů v PC. Zde vzniká problém pro uživatele, kteří neznají označení těchto portů a nemusejí vědět, který port vybrat. Program 23