Главная » Статьи » 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



Категория: Proton PICBasic | Добавил: Broka (22.04.2012)
Просмотров: 11858 | Комментарии: 2 | Теги: температура, освещение, PIC16F628, ds18B20, термометр, таймер, автомат, часы | Рейтинг: 4.3/3
Всего комментариев: 2
1 S_moke   (04.07.2013 14:56) [Материал]
Так здесь же многие/почти все выкладывают свои творения на всеобщее обозрение. Чем ты/вы от них отличаешься?

2 Broka   (12.07.2013 22:19) [Материал]
Да я и не хотел ничего скрывать........, оно мне это надо? Я многое почерпнул от других с этого сайта , да и Вы мне помогали , а когда надо и  я помогу., написаное раньше про личку  это видно по привычке написал ( я туда и не смотрю )

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]