• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO





Ночник на AT89C2051



Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком  "Карта сайта"







Эта новая версия имеет внутреннюю резервную батарею Ni-MH, кнопку сброса и простую настройку времени.  Настроен на период с 18:00 до 22:00 каждый день. Период времени можно перепрограммировать на SDCC.

Схема использует бестрансформаторное питание,

необходимо соблюдать правила электробезопасности!

Описание аппаратного обеспечения 

Прибор защищен F1, 1А предохранителем.  R1 и С1 ограничение тока для стабилитрона D3 (+ 5V). R2 разряжает конденсатор С1, когда прибор подключен. Конденсатор С2, + 5В 0.01Fявляется фильтром питания постоянного тока. D4 действует как переключатель для однонаправленного тока, подаваемого на MCU. BT1 будет Ni-MH аккумулятор для резервного копирования MCU (+ 3В 60mAh), когда нет питания сети. Зарядный ток 2 мА.

 

Рисунок 1: Монтаж ночника

 

BT1 подводит 4 мА к MCU. При полной зарядке резервное время составит 15часов. MCU работает с + Vbackup. SW1 помогает сбросить MCU, в случае понижения напряжения на BT1. MCU (89C2051) работает с кварцем на 3.579MHz. SW2 для установки часов (когда нажата, время будет 18:00).  R5, 4.7K дает менее одного мА на D5. P3.0 обеспечивает 5 Гц тактовый сигнал для калибровки. Выходной бит P1.6,  приводит в действие PNP транзистор (Q1). R3 ограничивает ток базы. R4 ограничивает постоянный ток в Q2, MAC97 небольшой симистор. LP1 - лампа накаливания 25 Вт. Мощность лампы может быть до 40 Вт.

 

Рисунок 2: Полная схема ночника

 

Я собрал устройство на простой макетной плате и расположил ее под лампой прибора. SW1 и SW2 там же.

 

Рисунок 3: Вид снизу с Ni-MH аккумулятором

 

Программное обеспечение 

Для разных установок времени, вы можете редактировать исходный код или перекомпилировать в SDCC.

КОД

/*
   Lamp.c
   night light saver V6.0, 89C2051 runs with 3.579MHz xtal
   The source code was compiled with sdcc.
Copyright (C) 2004 Wichit Sirichote, kswichit@kmitl.ac.th, 20 December 2004
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

*/
#include <at89x051.h>
#define tick_test P3_0 // 10Hz/2 output for clock calibration
#define LED P3_7
#define output1 P1_6
char status;
int count, i;
char tick, flag1, temp, timer1, timer2;
char hour,min,sec,sec10;
// you may press set time button whenever you want the lamp turns on
// for winter season you may press ealier than local time
// for summer more late, time will shift relatively!
// period will be 22:00 - 18:00 = 4 hours
code char time_on1[] = {18,00};
code char time_off1[] = {22,00};
// another scheduler, the 3rd byte will write to P1
// you may replace control_output function by scan_pgm function
code char pgm1[]={18,00,0x80,19,00,0,20,0x80,1,21,00,0};
char _sdcc_external_startup()
{
return 1; // skip static and global variables initialization
}
scan_pgm()
{
char i;
for(i=0; i<4; i++)
{
if(hour == pgm1[i*3] && min == pgm1[i*3+1])
P1 = ~pgm1[i*3+2];
}
}
control_output()
{
if(hour == time_on1[0] && min == time_on1[1])
status = 0;
if(hour == time_off1[0] && min == time_off1[1])
status = 1;
}
blink_led()
{
if(flag1&1)
{
if(++timer1>1)
{
flag1 &= ~1; // clear flag1.0
timer1=0;
LED = 1; // turns off led
}
}
}
void time ()
/* update real-time clock */
{
if (++sec10 >= 10) /* 100ms * 10 = 1 s */
{
LED = 0;
control_output(); // control output every second
sec10 = 0;
flag1 |=1;
if (++sec >= 60)
{sec = 0;
if (++min >= 60)
{min = 0;
if (++hour >= 24)
{hour = 0;
}
}
}
}
}
set_time()
{
if((P3&4)==0)
{
status = 0;
hour = 18;
min = 0;
sec = 0;
timer2=0;
}
}
update_output()
{
if(status) output1 = 1;
else output1 =0; // update output bit
}
void timer_isr(void) interrupt 1 using 1
{
TH0 = 0x8b;
TL0 = 0x7f; // reload with 35711 for 10Hz
tick++;
tick_test ^= 1; // test tick for 10Hz/2 or 5Hz
time();
set_time();
blink_led();
update_output();
}
main()
{
TMOD = 0x01; // timer1 and timer0 = mode 1
EA = ET0 = TR0 = 1; // enable timer0 interrupt, start timer
PCON |= 1; // enable IDLE mode, to extend backup period
for(;;)
;
}

 

Рисунок 4 показывает время 18:00, когда была нажата SW2. Лампа не включится до 22:00 каждый день.  Если вы хотите изменить время на пример в летний сезон, просто нажмите SW2 и установите 19:00. Время выключения автоматически сдвинется к 23:00.

 

Рисунок 4: Предустановленное зимнее время

 

Рисунок 5: Ночник в сборе с 25W лампой и крышкой

 

Скачать

 

МАТЕРИАЛЫ К СТАТЬЕ

 







Просмотров: 2316 | Добавил: Chinas | Рейтинг: 0.0/0








Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 372



          

Радио для всех© 2024