Нічник на мікроконтролері

  • Час 30-01-2015, 14:26
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

Нещодавно мені батьки поставили завдання - зробити нічник (щось між настільною лампою і ліхтариком, якщо раптом хтось - то не знає що це). У зв'язку з тимчасовим переїздом з деталями поки що сутужно, так що збирав буквально з того що зміг знайти. У результаті вийшла така схема (проект створений в програмі Proteus 8.1):

Нічник на мікроконтролері
 
Рис. 1

Як бачите основа - мікроконтролер PIC12F629. Для управління світлодіодами довелося використовувати транзисторні ключі, а для стабільності генератора - кварцовий резонатор на 12 МГц.

Пристрій володіє наступними характеристиками:

  • Напруга живлення 5 В.
  • Струм споживання (не враховуючи світлодіоди) lt; 10мА
  • Для управління світлодіодами використовується ШІМ
  • Час повного відключення - 30 хвилин

Управління пристроєм гранично просте: подав харчування - світлодіоди плавно включилися. Причому світлодіоди (а їх, як ви помітили, 3) вимикаються по черзі. Відповідно спочатку плавно гасне перший, потім 2-й і 3-й, з інтервалом в 10 хвилин. Кнопка служить для програмного перезапуску (я порахував що використовувати апаратний «reset» буде не правильно, до того ж в майбутньому ще хочу додати на цю кнопку функцій).

Що стосується друкованої плати, то виявилося, що в даному випадку буде достатньо і односторонньої розводки. Ось що вийшло:

Нічник на мікроконтролері

Рис. 2

Розміри плати 40х45 мм. Якщо використовувати всі компоненти в smd виконанні, то можна значно скоротити розміри плати.

І нарешті «слово» про програму. Програма для мікроконтролера писалася в середовищі mikroPascal for PIC (версія 6.4).

Вихідний код:

program NightLamp; var count, systime, ctime: integer; tp1, tp2, tp3, e1, e2, e3, startup: byte; label but1; procedure Interrupt; begin inc (systime); ////////////////////////////////////////////////// ////////////////////////////// Ця частина програми відповідає за плавне запалювання світлодіодів при старті. if startup = 1 then begin if systime gt; = 1171 then begin systime: = 0; dec (tp1); dec (tp2); dec (tp3); if tp1 = 1 then startup: = 0; end; end else begin /////////////////////////////////////////////// ///////////////////////////////// Тут відбувається плавне гасіння світлодіодів if systime gt; = 11718 then begin systime: = 0; inc (ctime); if e1 = 1 then begin inc (tp1); if tp1 = 99 then e1: = 0; end; if e2 = 1 then begin inc (tp2); if tp2 = 99 then e2: = 0; end; if e3 = 1 then begin inc (tp3); if tp3 = 99 then e3: = 0; end; end; end; ////////////////////////////////////////////////// ////////////////////////////// Перевірка на предмет збігу минулого і установленноговремені, запуск циклу виключення світлодіодів. if ctime = 500 then e1: = 1 else if ctime = 1100 then e2: = 1 else if ctime = 1500 then e3: = 1; ////////////////////////////////////////////////// ////////////////////////////// Власне сам программні ШІМ. if count lt; = 100 - tp1 then GP0_bit: = 1 else GP0_bit: = 0; if count lt; = 100 - tp2 then GP1_bit: = 1 else GP1_bit: = 0; if count lt; = 100 - tp3 then GP2_bit: = 1 else GP2_bit: = 0; if count gt; = 100 then count: = 0; inc (count); ////////////////////////////////////////////////// ////////////////////////////// Скидаємо прапор переривання Т0. INTCON.T0IF: = 0; end; begin CMCON: = 0x7; // Відключаємо копаратор. OPTION_REG: = 0x8; // Конфігурація Т0. INTCON: = 0xA0; // Конфігурація переривань. TRISIO: = 0x8; // Конфігурація порту. GPIO: = 0x0; // INTCON.T0IE: = 1; startup: = 1; tp1: = 99; tp2: = 99; tp3: = 99; While TRUE do begin if Button (GPIO, 3, 10, 0) then begin // Перевірка, натиснута лікнопка. Якщо натиснута, то виконання дій з відпускання. but1: if Button (GPIO, 3, 10, 0) then goto but1 else begin tp1: = 99; tp2: = 99; tp3: = 99; ////////////////////////////////////////////////// ////////////////// count: = 0; ctime: = 0; systime: = 0; ////////////////////////////////////////////////// ////////////////// startup: = 1; end; end; end; end.

Практично всі дії в програмі «зав'язані» на таймері T0. Це пов'язано не стільки з «економією» енергії, скільки з тим, що мені було лінь возитися з таймером T1.

Так як мікроконтролер працює на частоті 12МГц, то при вимкненому переддільник Т0 (просто перемикаємо його від Т0 до WDT) і умови що таймер 8-ми бітний останній буде переповнюватися 12000000 / (4 * 256) = 11718 раз в секунду. За цим для відліку часу було використано 2 змінні типу «integer». У першу записується кількість переповнень Т0, а в другу - безпосередньо минулий час, в секундах.

Далі все просто - вважаємо потрібну кількість секунд і включаємо / вимикаємо світлодіод.

Що стосується Шиман - то він програмний. Частота імпульсів ~ 117 Гц (крок 0 - 100). Взагалі - то прямокутні імпульси, що генеруються мікроконтролером, слідують з частотою 11 кГц, але з урахуванням необхідності регулювання тривалості імпульсу і паузи, отримуємо всього 117 Гц. Але, на практиці і такої частоти достатньо. Мерехтіння світлодіодів не видно.

Так для мікроконтролерів PIC конфігурація (вибір генератора, WDT і т.п.) знаходиться в .hex файлі, то скріншот з виставленням фузов наводити не буду. До слова, для прошивки мікроконтролера використовував програму WinPic800 і програматор JDM.

Тепер коротко про можливу заміну деталей:
Транзистори можна використовувати будь-які малопотужні структури NPN. У мене крім КТ315 під рукою нічого не було, по-цьому «в бій пішли одні старики». Мікроконтролер замінити на більш «старший» 12F675 або 12F683 не можна. Світлодіоди можна використовувати будь-які (тільки не забувайте про струм).

Ну і наостанок порівняння очікуваного і дійсного.

Нічник на мікроконтролері

Рис. 4

Нічник на мікроконтролері

Рис. 5

Нічник на мікроконтролері

Рис. 6

Нічник на мікроконтролері

Рис. 7

Нічник на мікроконтролері

Рис. 8

А ось фотографія пристрою після заміни світлодіодів на білі.

Нічник на мікроконтролері

Рис. 9

І невелике відео, що демонструє роботу девайса.

Список радіоелементів

Позначення Тип Номінал Кількість U1 Q1-Q3 D1-D3 C1, C2 R1-R3 R4 PB1 X1
МК PIC 8-бітPIC12F6291 DIP8
Біполярний транзисторКТ315А3 Будь-який малопотужний
СвітлодіодLED3 Будь-який, відповідний по яскравості і току
Конденсатор33 пФ2 0805
Резистор220 Ом3 Потужність залежить від світлодіодів
Резистор2.2 кОм1 +/ - 20%
КнопкаPB11 Лобая, підходяща за габаритами
Кварцовий резонатор12 МГц1 Бажано низькопрофільний
Tags

Коментарі до новини