Меню сайта
Календарь
|
Устройство управления люстрой обычным выключателем на PIC12F629Устройство зделанно по аналогии с блоком управления люстрой (обычно китайского происхождения),где переключение обычным выключателем вызывает смену очередной группы ламп (или одной лампы). Cравниь также можно с управлением люстрой по двум проводам. Принцип работы. При первом включеннии загораются все три лампы.Если в течении 3-ох секунд выключить-включить выключатель произойдет включение 2-ух ламп. Если в течении следующих 3-ох секунд выключить-включить выключатель произойдет включение 1-ой лампы. Если же после включения пройдет больше 3-ох секунд,то следующий цикл включения-выключения запустит опять все 3-и лампы. Промежуточные данные при выключении сохраняются в EEPROM и определяют как будет вести себя устройство при следующем включении.Выносливость ячеек EEPROM cогласно документации MICROCHIP - 1 000 000 циклов стирания /записи В перспективе добавление дистанционного управления. Схема демонстрирующая принцип работы устройства: Схема всего лиш имитация, вместо светодиодов будут применятся оптопары в спарке с симисторами. Проект проверен на макетной плате с 3-мя светодиодами. Пока лишь исходник.Который проверен.Конечно все это добро будет совершенствоваться и естественно проверятся в "метале".О чем мы будем Вам писать. Но уже сейчас,судя по макетке устройство вполне работоспособное!!! ;*********************************************************************************************** ; Lustra.V2.asm ; Управление люстрой.Версия 2 для pic12f629. ;=============================================================================================== LIST p=12F629 ; Установка типа микроконтроллера. __CONFIG 01FE4h ; Бит защиты выключен, WDT выключен, ERRORLEVEL -302 ; внутр.генератор ;=============================================================================================== ; Определение положения регистров специального назначения. ;=============================================================================================== IntCon equ 0Bh ; Регистр IntCon Status equ 03h ; Регистр Status. EEData equ 9Ah ; EEPROM - данные EECon1 equ 9Ch ; EECON1 - банк1. EEAdr equ 9Bh ; EEPROM - адрес EECon2 equ 9Dh ; EECON2 - банк1. Cmcon equ 19h ; Регистр Cmcon - компаратора TrisiO equ 05h ; Регистр выбора направления работы выводов порта O. GPIO equ 05h ; Регистр управления защелками порта O. ;=============================================================================================== ; Определение названия и положения регистров общего назначения. ;=============================================================================================== SecH equ 2Dh ; Старший байт таймера. SecL equ 2Eh ; Младший байт таймера. SecF equ 2Fh ; Самый старший байт таймера. ;=============================================================================================== ; Определение места размещения результатов операций. ;=============================================================================================== W equ 0 ; Результат направить в аккумулятор. F equ 1 ; Результат направить в регистр. ;=============================================================================================== org 2100h ; Обращение к EEPROM памяти данных. DE 00h ; Записать в ячейки с адресами .0, .1, ; числа 03h, 0h, соответственно. ;=============================================================================================== org 0 ; Начать выполнение программы goto Start ; с подпрограммы START. ;*********************************************************************************************** ;*********************************************************************************************** ; РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ ;*********************************************************************************************** Start clrf IntCon ; Запретить все прерывания. bsf Status,5 ; Перейти в 1-й банк (установить в 1 5-й бит ; регистра Status). movlw .0 ; Записать константу .0 в аккумулятор (W). movwf TrisiO ; Скопировать .0 из W в регистр TrisB. ; Весь PortВ установлен на выход ;----------------------------------------------------------------------------------------------- bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит ; регистра Status). clrf GPIO ; инициализация защелок (нули на всех защелках) movlw .7 ; биты 0..2 поднять movwf Cmcon ; компаратор выключен, GP0, GP1, GP2 - цифровые вх/вых movlw 3Fh ; Записать в регистр W константу 06h movwf GPIO ; Скопировать 06h из W в регистр GPIO. ; Включаем HL1. ;=============================================================================================== ; Чтение данных из EEPROM ;=============================================================================================== ; Считывание содержимого байта с адресом 01h и запись его в акаммулятор W. ;----------------------------------------------------------------------------------------------- bsf Status,5 ; Переход в 1-ый банк. movlw 0 ; Записать в регистр W константу 00h. movwf EEAdr ; Скопировать 00h из регистра W в регистр EEAdr. bsf EECon1,0 ; Инициализировать чтение. movf EEData,W ; Скопировать число из ячейки EEPROM с адресом 01h в регистр W. bcf Status,5 ; Переход в нулевой банк. ;----------------------------------------------------------------------------------------------- bcf Status,2 ; опустим флаг Z в ноль XORLW 00h ; проводим сравнение btfsc Status,2 ; делаем бит-проверку Z-флага по условию ; если Z=1, то выполняется следующая инструкция, иначе пропускается goto Metka_1 ; переход на Metka_1 bcf Status,2 ; опустим флаг Z в ноль XORLW 04h ; проводим сравнение btfsc Status,2 ; делаем бит-проверку Z-флага по условию ; если Z=1, то выполняется следующая инструкция, иначе пропускается goto Metka_3 ; переход на Metka_3 ;=============================================================================================== ; Запись данных в EEPROM. ;=============================================================================================== bsf Status,5 ; Переход в первый банк. movlw 0 ; Записать в регистр W константу 00h. movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr. movlw 00h ; Записать в регистр W константу 00h. movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h. call Zapis ;-------------------------------------------------------------------------------------------- bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит ; регистра Status). movlw 06h ; Записать в регистр W константу 06h movwf GPIO ; Скопировать 06h из W в регистр GPIO. ; Включаем HL1. goto PP ;-------------------------------------------------------------------------------------------- Metka_1 ;=============================================================================================== ; Запись данных в EEPROM. ;=============================================================================================== bsf Status,5 ; Переход в первый банк. movlw 00h ; Записать в регистр W константу 00h. movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr. movlw 04h ; Записать в регистр W константу 04h movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h. call Zapis ;---------------------------------------------------------------------------------------------- bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит ; регистра Status). movlw 00h ; Записать в регистр W константу .7 movwf GPIO ; Скопировать константу .7 из регистра W в регистр GPIO. ; Включаем HL1,HL2,HL3. goto PP ;-------------------------------------------------------------------------------------------- Metka_3 ;=============================================================================================== ; Запись данных в EEPROM. ;=============================================================================================== bsf Status,5 ; Переход в первый банк. movlw 0 ; Записать в регистр W константу 00h. movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr. movlw 02h ; Записать в регистр W константу .1 movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 01h. call Zapis ;----------------------------------------------------------------------------------------------- bcf Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит ; регистра Status). movlw 04h ; Записать в регистр W константу .3 movwf GPIO ; Скопировать .3 из W в регистр GPIO. ; Включаем HL1,HL2. PP ;----------------------------------------------------------------------------------------------- ; Задержка. ;----------------------------------------------------------------------------------------------- movlw .254 ; Записать в регистр W константу .254 movwf SecH ; Скопировать .254 из W в регистр Sec. movlw .254 ; Записать в регистр W константу .254 movwf SecL ; Скопировать .100 из W в регистр Sec. movlw .15 ; Записать в регистр W константу .254 movwf SecF ; Скопировать .100 из W в регистр Sec Pause_1 decfsz SecL,F ; Декремент содержимого регистра Sec с помещением резуль- ; тата декремента в этот же регистр. goto Pause_1 ; Если этот результат не=0, то осуществляется переход ; в ПП Pause_1 ("закольцовка" в этой ПП). ; Если =0, то программа исполняется далее. decfsz SecH,F ; Декремент содержимого регистра Sec с помещением резуль- ; тата декремента в этот же регистр. goto Pause_1 ; Если этот результат не=0, то осуществляется переход ; в ПП Pause_1 ("закольцовка" в этой ПП). ; Если =0, то программа исполняется далее. decfsz SecF,F ; Декремент содержимого регистра Sec с помещением резуль- ; тата декремента в этот же регистр. goto Pause_1 ; Если этот результат не=0, то осуществляется переход ; в ПП Pause_1 ("закольцовка" в этой ПП). ; Если =0, то программа исполняется далее. ;=============================================================================================== ; Запись данных в EEPROM. ;=============================================================================================== bsf Status,5 ; Переход в первый банк. movlw 00h ; Записать в регистр W константу 00h. movwf EEAdr ; Скопировать константу 00h из регистра W в регистр EEAdr. movlw 00h ; Записать в регистр W константу 00h. movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 00h. call Zapis ;----------------------------------------------------------------------------------------------- ; "Вечное кольцо" ;----------------------------------------------------------------------------------------------- Stopor_1 goto Stopor_2 Stopor_2 goto Stopor_1 ;----------------------------------------------------------------------------------------------- Zapis bsf EECon1,2 ; Разрешить запись. movlw 055h ; Обязательная movwf EECon2 ; процедура movlw 0AAh ; при записи. movwf EECon2 ; ----"---- bsf EECon1,1 ; ----"---- bcf EECon1,2 ; Запретить запись. return ;-------------------------------------------------------------------------------------------- ;******************************************************************************************* end ; Конец программы. |
Архив записей
Друзья сайта
Статистика
Онлайн всього: 1 Гостей: 1 Користувачів: 0 |