- Maksymalnie 64 modułów wykonawczych (typu Slave) w ramach jednej sieci systemu iControl.
- Maksymalnie 16 modułów sterujących (typu Master) wyposażonych w interfejs użytkownika z wyświetlaczem TFT.
- Adresy logiczne modułów wykonawczych nadawane są automatycznie przez moduły sterujące podczas konfigurowania sieci, zaś adresy logiczne modułów sterujących nadawane są przez użytkownika za pomocą interfejsu użytkownika GUI.
- Każdy moduł sterujący może zapamiętać i zaadresować 64 moduły wykonawcze.
- Wszystkie moduły wykonawcze zapamiętane przez dany moduł sterujący mogą zostać połączone w maksymalnie 8 grup, dowolnie podczas konfiguracji sieci, reprezentujących pomieszczenia, nad którymi moduł ten ma kontrolę (np. pokoje).
- Kilka modułów sterujących może mieć kontrolę nad jednym modułem wykonawczym.
- W ramach graficznego interfejsu użytkownika modułu sterującego każdy moduł wykonawczy jest identyfikowany przez unikalną nazwę.
- Każda z 8 możliwych grup, w które mogą być łączone moduły wykonawcze może mieć nadaną nazwę, aktywowana lub wyłączona.
- Przewidziano 5 rodzajów modułów wykonawczych: wyłącznik 1-biegunowy, wyłącznik 2-biegunowy, ściemniacz, sensor temperatury, sterownik oświetlenia RGB LED.
- System iControl sygnalizuje dołączenie nowych, jeszcze nieskonfigurowanych modułów wykonawczych oraz wystąpienie błędów transmisji.
- System iControl umożliwia usuwanie modułów wykonawczych z sieci, a co za tym idzie – rekonfigurację sieci.
„Sercem” urządzenia jest mikrokontroler ATmega8 odpowiedzialny za realizację całej założonej funkcjonalności. Mikrokontroler za pomocą wbudowanego, sprzętowego interfejsu TWI steruje pracą modemu CY8CPLC10. Dane są transmitowane oraz analizowane z użyciem przerwania zewnętrznego INT1. Ponadto wykorzystano programową implementację obsługi interfejsu 1-Wire (wyprowadzenie PD2 mikrokontrolera), dzięki czemu zrealizowano współpracę sterownika ze scalonym termometrem typu DS18S20 zapewniając dokładny pomiar temperatury otoczenia. Część analogowa iControlSensor jest w zasadzie taka sama, jak w module iControlSwitch, więc nie będę powielał szczegółowego opisu zastosowanych rozwiązań sprzętowych odsyłając dociekliwych Czytelników do artykułu wspomnianego we wstępie. Jedyne, co należy podkreślić to fakt, iż rozbudowana aplikacja toru analogowego wynika wyłącznie z chęci sprostania wymogom norm CENELEC EN50065-1:2001 oraz FCC part 15 (w jej konstrukcji posłużono się zresztą schematem aplikacyjnym firmy Cypress – nota aplikacyjna CY3274).
Z uwagi na fakt, że moduł iControlSensor „zadowala się” znacznie mniejszym zapotrzebowaniem na energię, niż wspomniany moduł iControlSwitch, w jego zasilaczu zastosowano typowy transformator do druku (15 V/2,6 VA) oraz dwa stabilizatory liniowe (78M12 i 78M05) zapewniającą odpowiednie napięcie zasilające.
Przejdźmy do szczegółów implementacyjnych programu obsługi aplikacji, które nie zostały opisane w poprzednim artykule. Wszystkie moduły systemu iControl wykorzystują wbudowany w modem CY8CPLC10 mechanizm detekcji zajętości magistrali danych (Band In Use), więc wysłanie pojedynczego pakietu danych, w zależności od parametrów transmisji i stanu tejże magistrali, może zając nawet 1,5 sekundy. Dlatego rozwiązanie przesyłania danych w postaci inicjacji transmisji danych i oczekiwania na rezultat jej wykonania byłoby nieefektywne. Z punktu widzenia programu sterującego wstrzymywałoby obsługę innych, ważnych procesów. W związku z tym w aplikacji programu obsługi urządzeń systemu iControl zaimplementowano specjalny mechanizm wysyłania, synchronizacji i kontroli pakietów danych. Po pierwsze, zastosowano specjalny bufor kołowy pakietów transmisji (z odpowiednimi wskaźnikami miejsca zapisu i odczytu), którego elementem jest struktura danych opisująca kompletną ramkę transmisji.
Dodatkowo, przewidziano 2 funkcje obsługi przerwań ISR: od Timera1 (dokładnie, od porównania wartości Timera1 z wartością rejestru ORC1A), wywoływaną cyklicznie co 100 milisekundy, której zadaniem jest sprawdzanie czy są jakiekolwiek dane przeznaczone do wysłania, inicjacja procesu wysłania danych, jego nadzór i obsługa bufora kołowego oraz funkcję obsługi przerwania zewnętrznego INT1, której zadaniem jest zarówno odbiór „zwykłych” danych przesyłanych przez moduł sterujący iControlMaster oraz odbiór statusów bieżącej i zainicjowanej we wcześniej wspomnianej procedurze obsługi przerwania, transmisji danych. W tym, drugim przypadku, funkcja obsługi przerwania zewnętrznego INT1 sprawdza status wysyłania bieżącej transmisji danych i w zależności od jego stanu modyfikuje bieżąca strukturę danych dając asumpt do ponowienia tejże transmisji (w przypadku jej niepowodzenia i nie przekroczenia maksymalnej liczby retransmisji) lub też kończąc jej przebieg poprzez ustawienie odpowiednich flag w strukturze danych (przeprowadzenia transmisji zakończonego powodzeniem lub niepowodzeniem) jak i flag dla pętli głównej aplikacji, dzięki czemu program główny informowany jest na bieżąco o aktualnym stanie systemu. W ten prosty sposób unika się niepożądanego wstrzymywania pracy aplikacji w przypadku problemów z komunikacją po magistrali PLC. W celu zrealizowania powyższej funkcjonalności, po pierwsze, przewidziano prostą funkcję narzędziową, której zadaniem jest dodanie do nadawczego bufora kołowego, danych przeznaczonych do wysłania.
Kolejnym krokiem jest implementacja funkcji, której cykliczne wywoływanie (co 100 ms) zapewnia sprawdzanie czy są jakiekolwiek dane przeznaczone do wysłania, inicjacja procesu wysłania danych, jego nadzór i obsługa bufora kołowego.