Главная » Статьи » Proton PICBasic |
Бытовой прибор! (4В1)
Часы,таймер,свет-автомат,регулятор температуры. ( 4В1 ) Данное устройство разработано на базе PIC16F628A . Регулятор температуры поддерживает температуру зоны, где находится датчик, с точностью в 1°С. Диапазон работы регулятора 1 - 100°С,минимальный гистерезис срабатывания 1°С. При аварийном уходе температуры за пределы диапазона или, неисправности датчика DS18B20, на LCD выводится соответствующая надпись Есть часы, которые показывают текущие на данный момент время. Установка часов , температуры , таймера , производится всего 3 кнопками На дисплее в рабочем режиме выводится показ часов, максимальная и минимальная установленная температура регулирования. Реальная измеренная температура объекта. Программный таймер суточный, минимальное время включения и отключения нагрузки 1 минута ( в пределах от 00:00 до 23.59 ). В микроконтроллере используется 1 канал программного таймера. Канал включения освещения задан программно ( прописан в программе ), Лично у меня : время включения 07:00 и время отключения 23:00. ВХОД В МЕНЮ! Как Вы уже догадались главная кнопка здесь , кнопка «МЕНЮ». С помощью её, заходим в нужный нам раздел и ставим нужные нам установки с помощью кнопок «ЧАСЫ» и «МИНУТЫ». Кнопка «ЧАСЫ» увеличивает значение установки максимальной температуры, увеличивает значение часов при установки «Таймера» ( ВКЛ и ВЫКЛ ) Кнопка « МИНУТЫ» увеличивает значение установки минимальной температуры, увеличивает значение минут при установки «Таймера» ( ВКЛ и ВЫКЛ ) Конструктивно устройство состоит из 2 блоков , блок управления и индикации ( сокращёно БУИ ) и блок коммутации нагрузки ( сокращёно БКН ). Блок БУИ содержит контроллер PIC16F628A , стабилизатор питания ( КР142ЕН5А ) Кнопки управления ( КН1 – «МЕНЮ» , КН2 – «ЧАСЫ» , КН3 – «МИНУТЫ» ) LCD дисплей типа « МЭЛТ» - или ему подобный «Winstar». Клемные зажимы для подключения к блоку БКН. Блок БКН предназначен для коммутации нагрузки ( включение и выключение коммутационных реле ( Р1..Р2..Р3 ) , и управляется от основного блока БУИ. В блоке смонтирован блок питания +12V от которого питаются реле и блок БУИ При применении SMD транзисторов типа BCR 533 базовые цепи от микроконтроллера следует подключать без дополнительных резисторов , то есть не посредственно к выходам Микроконтроллера 2 , 7 , 9 , при установке отечественных транзисторов типа КТ815 – КТ817 , в базовые цепи следует установить резисторы номиналом 2.2кОм Трансформатор питания любой с током вторичной обмотки не менее 500ma, я применил ТП – 13 Клемные соединения обозначенные цифрами 1 , 2 , 3 , 4 , 5 , 6 на принципиальной схеме находятся в блоке БУИ. В качестве резервного источника питания использовал аккумулятор с «Китайского фонарика», так что при пропадании общей сети ~ 220V все данные настроек не сбиваются, часы также работают. Нет подсветки LCD (экономия энергии аккумулятора) Примеры программ взяты с данного сайта..., ничего нового не придумал.., просто идея объединить приборы в кучу возникла давно.., вот и решил всё это воплотить в жизнь! Схема прибора: Полный текст программы: Код
'**************************************************************** ' Проект Часы и таймер (с показом температуры, датчик DS18B20 ) ' Дополнительный выход на включение и выключение устройств ( Выход таймера ) ' Независимое регулирование температуры (минимальный гистерезис 1*С ) ' Автоматическое включение освещения в заданный интервал времени ' Автор идеи и воплощения в реальное устройство Бросалин Ф А '**************************************************************** Declare Optimiser_Level 1 ' Включить оптимизацию программы Device 16F628A Declare Xtal=4 Config BODEN_OFF, BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_ON, XT_OSC TRISA = %11110111 TRISB = %00000000 PORTB = %00000000 Declare All_Digital = On ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Declare LCD_Type ALPHA ' Тип ЖКИ - буквенно -цифровой Declare LCD_DTPin PORTB.4 ' Порт данных ЖКИ Declare LCD_ENPin PORTB.0 ' Управление линией E Declare LCD_RSPin PORTB.2 ' Управление линией RS Declare LCD_Interface 4 ' Разрядность шины данных Declare LCD_CommandUs 200 ' Задержка перед посылкой команды Declare LCD_DataUs 50 ' Задержка перед посылкой данных Declare LCD_Lines 2 ' Количество строк ЖКИ Declare CCP1_Pin PORTB.3 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Symbol T0IF = INTCON.2 ; TMR0 Overflow Interrupt Flag Symbol T0IE = INTCON.5 ; TMR0 Overflow Interrupt Enable Symbol GIE = INTCON.7 ; Global Interrupt Enable Symbol MENU = PORTA.0 Symbol PLUS = PORTA.1 Symbol MINUS = PORTA.2 Symbol DQ = PORTA.4 OPTION_REG = %00000111 INTCON = %10100000 Dim BIG As Dword 'переменная для счета секунд Dim BIG1 As BIG.HighWord Dim R_Temp As Word ' Переменная для получения значения температуры ' отдельными двумя байтами Dim Temp As Float ' Переменная для преобразования значения ' температуры в данные с плавающей запятой Dim TempIND As Float ' Переменная для вывода на индикацию значени ' температуры Dim C As Bit ' Переменная для хранения бита сигнализации ' окончания преобразования Dim SECONDS As Byte ; переменная для счета секунд Dim MINUTES As Byte ; для счета минут ' Dim HOUR As Byte ; для счета часов ' Dim TEXT As Word Dim J As Byte Dim M As Byte Dim A As Byte Dim B As Byte Dim R As Byte Dim D As Byte Dim N As Byte Dim U As Byte Dim W As Byte Dim XM As Byte Dim XL As Byte Dim t As Bit Cls Clear TempIND = 24 M = 0 XM = 24 XL = 23 N = 7 U = 8 W = 23 TEXT = $3A BIG = 1000000 On_Interrupt GoTo MYINT GoTo main MYINT: big1 = big1-1 ' If BIG < 0 Then BIG = BIG + 1000000 Inc SECONDS t=~t EndIf T0IF = 0 Context Restore main: If SECONDS >= 60 Then SECONDS = 0:Inc MINUTES If MINUTES >= 60 Then MINUTES = 0:Inc HOUR If HOUR > 23 Then HOUR = 0 If MENU = 0 Then DelayMS 500:Inc M If M > 4 Then M = 0 Branch M,[Izm,U_hour,U1_Tim_Vkl,U1_Tim_Vikl,U_Tem] DelayMS 1 GoTo main Izm: If TempIND >= 4095.9 Then TempIND = 1000 Print At 1 ,1,Dec2 SECONDS,$20,"MAX",Dec3 XM,$20,"MIN",Dec2 XL Print At 2 ,1,Dec2 HOUR,TEXT,Dec2 MINUTES,$20,$20,$20,Dec1 TempIND,$20,$99,"C",$20,$20 DelayMS 50 If HOUR = N Then PORTB.3 = 1 ' При включении ШИМ регулирования ( строку отключить ) If HOUR = W Then PORTB.3 = 0 ' При включении ШИМ регулирования ( строку отключить ) 'If HOUR = N Then HPWM PORTB.3,U,600:If SECONDS = 0 Or SECONDS = 10 Or SECONDS = 20 Or SECONDS = 30 Or SECONDS = 40 Or SECONDS = 50 Then Inc U 'If U >= 254 Then U = 254 'If HOUR = W Then HPWM PORTB.3,U,600:If SECONDS = 0 Or SECONDS = 10 Or SECONDS = 20 Or SECONDS = 30 Or SECONDS = 40 Or SECONDS = 50 Then Dec U 'If U >= 255 Then U = 0 If t=0 Then OWrite DQ, 1, [$CC,$44] ' Послать датчику DS18S20 команду старта измерения температуры TEXT = $20 Else OWrite DQ, 1, [$CC,$BE] ' Послать команду чтения из ОЗУ датчика DS18S20 значения температуры DelayMS 25 ORead DQ, 2, [R_Temp.LowByte, R_Temp.HighByte] ' Прочитать значение температуры и записать полученные два байта данных в переменную R_Temp типа Dword, младщий байт в R_Temp.LowByte и старший байт в R_Temp.HighByte Temp = R_Temp TempIND = Temp /16 'If R_Temp > 64654 Then TempIND = Temp / 16 - 4095.93 Если температура - TEXT = $3A EndIf If TempIND >= 102 Or TempIND < 0 Then GoSub Er1 'If TempIND >= 4095 Then TempIND = 100 GoSub Prov GoTo main U_hour: Cls If PLUS = 0 Then DelayMS 20:Inc HOUR If HOUR > 23 Then HOUR = 0 If MINUS = 0 Then DelayMS 20:Inc MINUTES If MINUTES >= 60 Then MINUTES = 0 Print At 1 ,1,$AB,$41,$43,$AE Print At 2 ,1,Dec2 HOUR,":",Dec2 MINUTES If MENU = 0 Then DelayMS 300:Cls:M = 2:GoTo main DelayMS 300 GoTo U_hour U1_Tim_Vkl: If PLUS = 0 Then DelayMS 20:Inc A If A > 23 Then A = 0 If MINUS = 0 Then DelayMS 20:Inc B If B >= 60 Then B = 0 Print At 1 ,1,$31,$20,$A8,$50,$20,$20,$20,$20,$20,$20,$20,$42,$4B,$A7 Print At 2 ,6,Dec2 A,":",Dec2 B DelayMS 300 If MENU = 0 Then DelayMS 300:Cls:M = 3:GoTo main GoTo U1_Tim_Vkl U1_Tim_Vikl: If PLUS = 0 Then DelayMS 20:Inc R If R > 23 Then R = 0 If MINUS = 0 Then DelayMS 20:Inc D If D >= 60 Then D = 0 Print At 1 ,1,$31,$20,$A8,$50,$20,$20,$20,$20,$20,$20,$20,$42,$AE,$4B,$A7 Print At 2 ,6,Dec2 R,":",Dec2 D DelayMS 300 If MENU = 0 Then DelayMS 300:Cls:M = 4:GoTo main GoTo U1_Tim_Vikl Prov: If HOUR = A And MINUTES = B Then PORTA.3 = 1 If HOUR = R And MINUTES = D Then PORTA.3 = 0 If TempIND <= XL Then PORTB.1 = 1 If TempIND >= XM Then PORTB.1 = 0 Return U_Tem: Print At 1 ,1,$A9,$63,$BF,$61,$BD,$6F,$B3,$BA,$61,$20,$20,"t",$20,$99,"C" Print At 2 ,1,$20,$4D,$61,$78,$20,Dec3 XM,$20,$4D,$69,$6E,$20,Dec2 XL,$20,$20 DelayMS 200 If PLUS = 0 Then DelayMS 20:Inc XM If XM >= 101 Then XM = 1 If MINUS = 0 Then DelayMS 20:Inc XL If XL >= XM Then XL = XM - 1 If MENU = 0 Then DelayMS 300:Cls:M = 0:GoTo main GoTo U_Tem Er1: DelayMS 300 Cls Print At 1 ,1,$54,$45,$4D,$A8,$45,$50,$41,$54,$A9,$50,$41 Print At 2 ,1,$48,$45,$20,$42,$20,$E0,$A5,$41,$A8,$41,$A4,$4F,$48,$45 DelayMS 1000 Cls Print At 1 ,1,$A5,$A7,$A5,$20,$48,$45,$A5,$43,$A8,$50,$41,$42,$48,$AE,$A6 Print At 2 ,1,$20,$E0,$41,$54,$AB,$A5,$4B,$20,$44,$53,$31,$38,$42,$32,$30 DelayMS 1000 Cls Return End | |
Просмотров: 12154 | Комментарии: 2 | | |
Всего комментариев: 2 | |
| |