Умный дом

Схема и программа релейного модуля

Функциональная схема модуля состоит из интерфейса, кон­троллера и адресного селектора, образующих базу для пост­роения остальных модулей, а отличительной особенностью данного модуля является использование реле (рис. 1.33). Реле я включил через транзисторный ключ. В зависимости от кон­кретного реле, которое вы выберете, транзисторный ключ может оказаться лишним.

Схема и программа релейного модуля

Рис. 1.33. Функциональная схема релейного модуля

Я не стал устанавливать реле на макетной плате. Реле - эле­мент достаточно дорогой, и нет нужды покупать его без твер­дого намерения использовать. Вместо него к выходам микро­контроллера были подключены красные светодиоды АЛ307. Как выяснилось позже, получилось очень полезное решение при наладке и разработке других модулей (рис. 1.34).

При сборке макета потребуются не все элементы, обозна­ченные в табл. 1.3.

Схема и программа релейного модуля

8 о

§

С §

I S CL

С

Таблица 1.3. Спецификация релейного модуля

Обозна­чение

Изделие '

Количество

Цена (Р)

Примечания

1

DD1

МАХ1483

1

96

2

DD2

PIC16F628A

1

100

Установить на панельку

3

DD3

LM2936-Z5

1

68

4

VT1

КТ503Г

1

5

5

VD1, VD2

АЛ307

2

3

6

VD3

КД522

1

3

7

VD4

АЛ307

1

3

8

Р1

12В, 5А/-220 В

1

170

10

R1-R3

1 кОм 0,25 Вт

3

1

11

R4-R7

10 кОм 0,25 Вт

4

1

12

R8

2,2 кОм 0,25 Вт

1

1

13

С1, С2

0,1 мкФ

2

5

14

СЗ

100 мкФ 16 В

1

20

15

Х1

Кл. 6 конт.

1

10

16

S1

Пер. 2 пол. 4 нал.

1

50

17

SOC

DIP18

1

21

Ориентировочная стоимость элементов - 558 руб В целях экономии я отказался от установки на макетную плату реле и переключателя для организации адресного се­лектора, распаяв соответствующие выводы, чтобы получить один адрес. На схеме показано одно реле, но их количество можно увеличить до 7-8, используя все свободные выводы портов А и В. Это определяется конкретными соображения­ми по применению модуля. Например, если вы планируете использовать релейный модуль в своей комнате для включе­ния торшера или настольной лампы, достаточно одного реле. Для безопасного включения лампы я советую использовать закрытую розетку со стандартным сетевым проводом. Одна из жил этого провода доллсна разрываться контактами реле. Настольная лампа включается в розетку, которая, в свою оче­редь, подсоединяется к сети -220В. При замыкании контак­тов реле напряжение подается на лампу. Поскольку неизвест­но, какой из проводов вы коммутируете: нулевой или фазный, все работы лучше производить без напряжения.

После тщательной изоляции розетки и всех соединений включите лампу в вашу розетку, подключите мультиметр в режиме измерения сопротивления к вилке вашего провода и включите реле. Мультиметр должен показать такое же сопро­тивление, что и настольная лампа, если измерить ее сопро­тивление. После команды выключения реле тестер должен показать обрыв. В любом случае при первом включении сле­дует соблюдать осторожность, а релейный модуль сразу поме­стить в любую подходящую пластмассовую коробку.

Команды, на которые модуль должен реагировать:

• включить - Rxx$xN;

• выключить - Rxx$xF;

• передать статус - Rxx$xS.

При передаче статуса используем следующую символику:

• включено - Rxx#xN;

• выключено - Rxx#xF.

Здесь Rxx$xN означает: R - релейный модуль, хх - два сим­вола адреса от 00 до 15, $ - символ команды (# - символ стату­са), х - номер реле от 0 до 7, N - включить (F - выключить).

Набор и формат команд вы можете переопределить по своему вкусу или сообразуясь с целями. Для этого достаточно внести изменения в исходные коды, приводимые ниже.

Для адресации используются четыре бита порта В (RB4- RB7), что позволяет адресоваться к 16 модулям.

Для тех, кому не терпится опробовать готовые решения, кому это не интересно или не нужно знать, как программиро­вать модуль, я сразу приведу текст программы модуля на ас­семблере, текст программы на языке программирования С и НЕХ-файл для загрузки в программатор.

Программа модуля на ассемблере

List p=16f628a

#include pl6f628a. inc

; Инициализация модуля.

BCF STATUS, RP1 ; Выбор банка 0.

BCF STATUS, RP0 CLRF PORTA MOVLW 0x07 MOVWF CMCON BCF STATUS, RPl BSF STATUS, RPO MOVLW 0x80 MOVWF TRISA MOVLW 0xF6 MOVWF TRISB BCF STATUS, RPl BCF STATUS, RPO CLRF PORTB

Настройка порта A. Выбор банка 1.

Настройка порта В. Выбор банка 0.

; Настройка приемопередатчика USART

BSF RCSTA, SPEN BCF RCSTA, RX9 BSF RCSTA, CREN BCF STATUS, RPl BSF STATUS, RPO BCF TXSTA, TX9 BCF TXSTA, SYNC BSF TXSTA, BRGH MOVLW 0x16 MOVWF SPBRG BCF STATUS, RPl BCF STATUS, RPO CLRW

ADDWF PORTB, 0 ANDLW OxFO MOVWF 0x20 SWAPF 0x20, 1 битами. CALL adrsim

; Настройка приемника.

; Выбор банка 1.

; Настройка передатчика.

; Выбор банка 0.

Считывание собственного адреса. '

; Прочитаем порт В. ; Нам не нужны младшие биты. ; Сохраним адрес в 2Oh.

; Нам не нужна работа с младшими

; Преобразуем его в символьный вид.

; прочитаем из EEPROM 30h - состояние реле.

BSF STATUS, RP0 BCF STATUS, RPl MOVLW 0x00 MOVWF EEADR BSF EECON1, RD

Выбор банка 1.

Адрес считываемого регистра. Чтение.

MOVF EEDATA, W BCF STATUS, RP1 BCF STATUS, RPO MOVWF 0x30 COMF 0x30Д CLRW

W = EEDATA. Выбор банка 0.

Будем хранить в EEPROM в инверсном виде.

; А в регистре 30h в прямом. ; Перепишем 30h в порт.

ADDWF 0x30,0 MOVWF PORTA

; Начало работы, ожидание команды, отработка первой команды.

CLRW ; Очищаем аккумулятор, ждем команды по USART.

Start: BTFSS PIR1, RCIF ; Ждем прихода первого символа команды.

GOTO start

BCF STATUS, RP1 ; Выбор банка 0. BCF STATUS, RPO

CALL cmnd ;C приходом первого символа начинаем обработку.. GOTO start

ЮР

; Обработка команды - проверка адреса, определение команды.

Cmnd: BCF STATUS, Z MOVF RCREG, 0

XORLW 0x52 ; Проверим, наш ли модуль R (52h) .

BTFSS STATUS, Z ; Если нет, вернемся

RETURN

Inl: BTFSS PIR1, RCIF ; Ждем прихода первого символа адреса.

GOTO inl ; Если совпадает, продолжим. MOVF RCREG, 0 BCF STATUS, Z

XORWF 0x21, 0 ; Первый символ адреса.

BTFSS STATUS, Z

RETURN

In2: BTFSS PIR1, RCIF ; Ждем прихода второго символа адреса.

GOTO in2 ; Если совпадает, продолжим.

MOVF RCREG, О BCF STATUS, Z

XORWF 0x22, 0 ; Второй символ адреса.

BTFSS STATUS, Z

RETURN

In3: BTFSS PIR1, RCIF ; Ждем прихода символа.

GOTO іпЗ ; Если за адресом следует символ команды, продолжим.

MOVF RCREG, 0 BCF STATUS, Z

XORLW 0x24 ; Выполнение $(24h). BTFSC STATUS, Z

CALL swtch ; Вызываем подпрограмму выполнения. RETURN

/Подпрограмма перевода адреса в символы, их храним в 21h, 22h.

Adrsim: CLRW ; Если адрес 1, запишем символы 01 (30h и 31h).

ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x31 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x1 BTFSC STATUS, Z RETURN

CLRW ; Если адрес 2, запишем символы 02 (3 Oh и

32h).

ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x32 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x2 BTFSC STATUS, Z

RETURN

CLRW ; Если адрес 3, запишем символы 03. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x33 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x3 BTFSC STATUS, Z RETURN

CLRW ; Если адрес 4, запишем символы 04. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x34 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x4 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 5, запишем символы 05. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x35 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x5 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 6, запишем символы 06. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x36

MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x6 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 7, запишем символы 07. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x37 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x7 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 8, запишем символы 08. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x38 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x8 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 9, запишем символы 09. ADDLW 0x30 MOVWF 0x21 CLRW

ADDLW 0x39 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW 0x9 BTFSS STATUS, Z RETURN

CLRW ; Если адрес 10 (А), запишем символы 10. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x30 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW OxA BTFSS STATUS, Z RETURN

CLRW ; Если адрес 11, запишем символы 11. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x31 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW OxB BTFSS STATUS, Z RETURN

CLRW ; Если адрес 12, запишем символы 12. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x32 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW OxC BTFSS STATUS, Z RETURN

CLRW ; Если адрес 13, запишем символы 13. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x33 MOVWF 0x22 MOVF 0x20, 0

BCF STATUS, Z XORLW OxD BTFSS STATUS, Z RETURN

CLRW ; Если адрес 14, запишем символы 14. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x34 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW OxE BTFSS STATUS, Z RETURN

CLRW ; Если адрес 15, запишем символы 15. ADDLW 0x31 MOVWF 0x21 CLRW

ADDLW 0x35 MOVWF 0x22 MOVF 0x20, 0 BCF STATUS, Z XORLW OxF BTFSS STATUS, Z RETURN

; Подпрограмма включение реле по номеру.

Cmdset: CLRW ; Запишем в 3Oh (установить бит).

ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x0 ; Реле 0. BTFSC STATUS, Z BSF 0x30, 0 CLRW

ADDWF 0x23, 0 BCF STATUS, Z XORLW 0x1 ; Реле 1. BTFSC STATUS, Z BSF 0x30, 1

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x2 ; Реле 2.

BTFSC STATUS, Z

BSF 0x30, 2

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x3 ; Реле 3.

BTFSC STATUS, Z

BSF 0x30, 3

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x4 ; Реле 4.

BTFSC STATUS, Z

BSF 0x30, 4

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x5 ; Реле 5.

BTFSC STATUS, Z

BSF 0x30, 5

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x6 ; Реле 6.

BTFSC STATUS, Z

BSF 0x30, 6

CLRW

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x7 ; Реле 7.

BTFSC STATUS, Z

BSF 0x30, 7

RETURN

; Подпрограмма выключения реле по номеру.

Cmdreset: CLRW ; Запишем в 3Oh (сбросить бит) .

ADDWF 0x23,0 BCF STATUS, Z

XORLW 0x0 ; Реле 0. BTFSC STATUS, Z BCF 0x30, 0 CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x1 ; Реле 1.

BTFSC STATUS, Z

BCF 0x30, 1

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x2 ; Реле 2.

BTFSC STATUS, Z

BCF 0x30, 2

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x3 ; Реле 3.

BTFSC STATUS, Z

BCF 0x30, 3

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x4 ; Реле 4.

BTFSC STATUS, Z

BCF 0x30, 4

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x5 ; Реле 5.

BTFSC STATUS, Z

BCF 0x30, 5

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x6 ; Реле 6.

BTFSC STATUS, Z

BCF 0x30, б

CLRW

ADDWF 0x23,0

BCF STATUS, Z

XORLW 0x7 ; Реле 7.

BTFSC STATUS, Z BCF 0x30, 7 RETURN

; Подпрограмма определения команды N (включить), F (выключить) ; или S (состояние).

Swtch: CLRW in4: BTFSS PIR1, GOTO in4 MOVF RCREG, 0 MOVWF 0x23 MOVLW 0x30 SUBWF 0x23, 0 MOVWF 0x23

Ждем прихода символа.

Прочитаем номер реле. Сохраним номер реле в 23h. Запишем 30h в аккумулятор.

RCIF

; Переведем символ в номер. Сохраним номер реле в 23h.

In5: BTFSS PIR1, RCIF ; Ждем прихода символа. GOTO in5

MOVF RCREG, 0 ; Прочитаєм команду N-включить F-выключить.

MOVWF 0x24 ; Сохраним команду в 24h. BCF STATUS, Z

XORLW 0x4E ; Включение N (4Eh) .

BTFSC STATUS, Z ; Если не включить, то пропустить.

CALL cmdset

MOVF 0x24, 0 ; Перепишем из 24h в аккумулятор. BCF STATUS, Z

XORLW 0x46 ; Выключение F (46h).

BTFSC STATUS, Z ; Если не выключить, то пропустить.

CALL cmdreset

MOVF 0x24, 0 ; Перепишем из 24h в аккумулятор. BCF STATUS, Z

XORLW 0x53 ; S (53h) запрос статуса.

BTFSC STATUS, Z ; Если не запрос статуса, то пропустить.

CALL stat

; Сохраним состояние всех реле в энергонезависимой памяти.

CLRW ; Запишем 30h - состояние реле в EEPROM.

BSF STATUS, RP0 ; Выбор банка 1. BCF STATUS, RPl

MOVLW 0x00 ; Запишем Oh в аккумулятор.

MOVWF EEADR ; Запишем адрес Oh в регистр адреса.

BCF STATUS, RP1 ; Выбор банка 0.

BCF STATUS, RPO

CLRW

ADDWF 0x30,0 ; Запишем содержимое 3Oh в аккумулятор.

COMF 0x30,0 ; Инвертируем перед сохранением.

BSF STATUS, RP0 ; Выбор банка 1.

BCF STATUS, RP1

MOVWF EEDATA

BSF EECONl, WREN ; Разрешить запись. BCF INTCON, GIE ; Запретить прерывания. MOVLW 0x55

MOVWF EECON2 ; Записать 55h. MOVLW OxAA

MOVWF EECON2 ; Записать AAh.

BSF EECONl, WR ; Установить флаг для начала запись.

BSF INTCON, GIE ; Разрешить прерывания.

BCF EECONl, WREN ; Запретить запись.

BCF STATUS, RPl ; Выбор банка 0.

BCF STATUS, RPO

Chkwr: BTFSS PIR1, EEIF ; Проверка завершения записи. GOTO chkwr CLRW

ADDWF 0x30, 0

MOVWF PORTA ; Перепишем 30h в порт. BCF PIR1, EEIF ; Сбросим флаг. RETURN

; Подпрограмма передачи статуса реле.

Stat: BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO

CLRW ; Проверим реле 0.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x0 ; Реле 0.

BTFSC STATUS, Z

CALL relO

CLRW ; Проверим реле 1.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x1 ; Реле 1.

BTFSC STATUS, Z

CALL rell

CLRW ; Проверим реле 2.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x2 ; Реле 2.

BTFSC STATUS, Z

CALL rel2

CLRW ; Проверим реле 3.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x3 ; Реле 3.

BTFSC STATUS, Z

CALL rel3

CLRW ; Проверим реле 4.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x4 ; Реле 4.

BTFSC STATUS, Z

CALL ГЄІ4

CLRW ; Проверим реле 5.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x5 ; Реле 5.

BTFSC STATUS, Z

CALL rel5

CLRW ; Проверим реле 6.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x6 ; Реле 6.

BTFSC STATUS, Z

CALL rel6

CLRW ; Проверим реле 7.

ADDWF 0x23, 0

BCF STATUS, Z

XORLW 0x7 ; Реле 7.

BTFSC STATUS, Z

CALL rel7

; Теперь это все отправим в передатчик.

BSF PORTB, 0 ; Переключим драйвер-RS485 на передачу. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RP0

BSF TXSTA, TXEN ; Разрешаем передачу. BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO MOVLW 0x52

MOVWF TXREG ; Отправим символ модуля. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

OutdatO: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdatO

BCF STATUS, RPl ; Выбор банка 0.

BCF STATUS, RPO

CLRW

ADDWF 0x21,0

MOVWF TXREG ; Отправим первый символ адреса. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

Outdatl: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdatl

BCF STATUS, RPl ; Выбор банка 0.

BCF STATUS, RPO

CLRW

ADDWF 0x22,0

MOVWF TXREG ; Отправим второй символ адреса. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

Outdat2: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdat2

BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO MOVLW 0x23

MOVWF TXREG ; Отправим символ статуса. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

Outdat3: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdat3

BCF STATUS, RPl ; Выбор банка 0.

BCF STATUS, RPO

CLRW

ADDWF 0x23,0

ADDLW 0x30

MOVWF TXREG ; Отправим символ номера реле. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

Outdat4: BTFSS TXSTA, TXIF ; Ждем отправки символа. GOTO outdat4

BCF STATUS, RPl ; Выбор банка 0.

BCF STATUS, RPO

CLRW

ADDWF 0x25,0

MOVWF TXREG ; Отправим символ состояния реле. BCF STATUS, RPl ; Выбор банка 1. BSF STATUS, RPO

Outdat5: BTFSS TXSTA, RCIF ; Ждем отправки символа. GOTO outdat5

BCF TXSTA, TXEN ; Запрещаем передачу. BCF STATUS, RPl ; Выбор банка 0. BCF STATUS, RPO

BCF PORTB, 0 ; Переключим драйвер RS485 на прием. RETURN

;Подпрограмма обработки статуса реле.

RelO: BTFSC 0x30, 0 CALL sostn

BTFSS 0x30, 0 CALL sostf RETURN cell: BTFSC 0x30, 1 CALL sostn BTFSS 0x30, 1 CALL sostf RETURN ГЄІ2: BTFSC 0x30, 2 CALL sostn BTFSS 0x30, 2 CALL sostf RETURN ГЄІЗ: BTFSC 0x30, 3 CALL sostn BTFSS 0x30, 3

CALL sostf RETURN rel4: BTFSC 0x30, 4 CALL sostn BTFSS 0x30, 4 CALL sostf RETURN rel5: BTFSC 0x30,"5 CALL sostn BTFSS 0x30, 5 CALL sostf RETURN rel6: BTFSC 0x30, б, CALL sostn BTFSS 0x30, 6 CALL sostf RETURN rel7: BTFSC 0x30, 7 CALL sostn BTFSS 0x30, 7 CALL sostf RETURN

; Подпрограммы образования символов состояний.

Sostn: MOVLW 0x4E ; Состояние - включено. MOVWF 0x25 RETURN

Sostf: MOVLW 0x46 ; Состояние - выключено. MOVWF 0x25 RETURN

END

Умный дом

Способы строительства частных домов

Строительство частных домов является одним из самых популярных направлений в строительной отрасли. Существует множество способов и технологий, которые можно использовать при строительстве дома. В этой статье мы рассмотрим наиболее распространенные …

Как построить современный умный дом?

Современные технологии позволяют людям построить умный дом, который может автоматически реагировать на изменения в окружающей среде, предоставляя максимальное комфортное проживание. Процесс построения такого дома начинается с проектирования и планирования. Важно …

5 советов, как правильно обустроить домашний офис

Домашний кабинет – пространство, в котором должны быть созданы все условия для комфортной работы. Основные атрибуты – это рабочий стол и стул, компьютер, наушники с микрофоном и другие важные мелочи. …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.