Автор: Пользователь скрыл имя, 12 Января 2012 в 04:06, контрольная работа
Целью данного курсового проекта является создание системы, способной автоматически давать звонки по заданному расписанию.
Часть 1 – Теоретическая
Целью данного
курсового проекта является создание
системы, способной автоматически
давать звонки по заданному расписанию.
Часть 2 – Выбор элементов, расчет электрических соединений, разводка платы
Предполагается использовать:
Atmel AVR Mega48 P – 1 шт.
Кварцевый резонатор на 32768 гц – 1 шт.
Выходной каскад – твердотельное реле КП 17Р
Резистор – 1 шт.
Рисунок 1 – схема КП17Р
Входной ток Iвх 5-25 мА
Входное напряжение
Uвх 1.1 - 1.8 В
Параметры выходного каскада аврки:
Ic= -20mA, VCC = 5V
Зададимся напряжением включения в 1,5 В при токе 20 мА. Для того, чтобы не спалить оптопару последовательно к ней включим резистор номиналом
R=(5-1,5)В/0,02 A = 175 Ом
Сделаем разводку
платы в программе Sprint-
Рисунок 2 – Разводка платы в программе SL и распиновка нашего микроконтроллера
Размер
платы – 27x40 мм, дорожки толщиной по
0,65 мм – легко травить методом лазерного
утюга.
Часть 3 – Программная
Необходимо изменить Fuse биты МК, отвечающие за источник тактового сигнала. Согласно даташиту - CKSEL3..0 = 0100 для кварца в 32768 гц.
Это делается из любой подходящей среды (avrdude\avrstudio\etc).
Пин
PC0 подтягивается резистором на 400 Ом к
земле, так же он подключен к кнопке на
корпусе устройства, которая ведет к +5В.
Служит эта кнопка для сброса времени
на 8 часов 00 мин 00 сек.
Далее разработаем прошивку для нашего микроконтроллера:
#include "m48pdef.inc"
rjmp start ; Reset Handler
rjmp start ; IRQ0 Handler
rjmp start ; IRQ1 Handler
rjmp start ; PCINT0 Handler
rjmp start ; PCINT1 Handler
rjmp start ; PCINT2 Handler
rjmp start ; Watchdog Timer Handler
rjmp start ; Timer2 Compare A Handler
rjmp endl ; Timer2 Compare B Handler
rjmp endl
rjmp endl ; Watchdog Timer Handler
rjmp endl ; PCINT0 Handler
rjmp endl ; PCINT1 Handler
rjmp endl ; PCINT2 Handler
rjmp timer_sec ; Watchdog Timer Handler
rjmp timer_sec ; A
rjmp timer_sec; B
rjmp timer_sec; OF
//rjmp endl
timer_sec: // Это обработчик прерывания таймера, вызывается раз в секунду
in r22,sreg
push r22
mov r22, r1
inc r22
mov r1,r22
ldi r21,0xFF //был ли начат звонок?
cp r21,r24
brne nex1
ldi r23,0x03
cp r1,r23 // Прошло 3 секунды?
brne nex1
clr r24
out pind, r24 //Отключаем звонок
out portd, r24
nex1:
ldi r17, 0x3c //60 секунд?
cp r1,r17
brne n11
clr r1 //0 секунд +1 минута
inc r2
n11:
ldi r17, 0x3c //60 минут?
cp r2,r17
brne n22
clr r2 //0 минут +1 час
inc r3
n22:
ldi r17, 0x18 //24 часа?
cp r3,r17
brne r33
clr r3 // 00 часов
r33:
//Далее идет сравнение текущего времени с временем начала звонка, в случае совпадения вызывается ф-ция zvonokbeg1
ldi r17,0x08
cp r17,r3
brne not1
clr r17
cp r17,r2
brne not1
cp r17,r1
brne not1
rcall zvonokbeg1 // 8:00
not1:
ldi r17,0x08
cp r17,r3
brne not2
ldi r17,0x2D
cp r17,r2
brne not2
clr r17
cp r17,r1
brne not2
rcall zvonokbeg1 // 8:45
not2:
ldi r17,0x08
cp r17,r3
brne not3
ldi r17,0x32
cp r17,r2
brne not3
clr r17
cp r17,r1
brne not3
rcall zvonokbeg1 // 8:50
not3:
ldi r17,0x09
cp r17,r3
brne not4
ldi r17,0x23
cp r17,r2
brne not4
clr r17
cp r17,r1
brne not4
rcall zvonokbeg1 // 9:35
not4:
ldi r17,0x09
cp r17,r3
brne not5
ldi r17,0x2D
cp r17,r2
brne not5
clr r17
cp r17,r1
brne not5
rcall zvonokbeg1 // 9:45
not5:
ldi r17,0x0A
cp r17,r3
brne not6
ldi r17,0x1E
cp r17,r2
brne not6
clr r17
cp r17,r1
brne not6
rcall zvonokbeg1 // 10:30
not6:
ldi r17,0x0A
cp r17,r3
brne not7
ldi r17,0x23
cp r17,r2
brne not7
clr r17
cp r17,r1
brne not7
rcall zvonokbeg1 // 10:35
not7:
ldi r17,0x0B
cp r17,r3
brne not8
ldi r17,0x14
cp r17,r2
brne not8
clr r17
cp r17,r1
brne not8
rcall zvonokbeg1 // 11:20
not8:
ldi r17,0x0B
cp r17,r3
brne not9
ldi r17,0x1E
cp r17,r2
brne not9
clr r17
cp r17,r1
brne not9
rcall zvonokbeg1 // 11:30
not9:
ldi r17,0x0C
cp r17,r3
brne not10
ldi r17,0x0F
cp r17,r2
brne not10
clr r17
cp r17,r1
brne not10
rcall zvonokbeg1 // 12:15
not10:
ldi r17,0x0C
cp r17,r3
brne not11
ldi r17,0x14
cp r17,r2
brne not11
clr r17
cp r17,r1
brne not11
rcall zvonokbeg1 // 12:20
not11:
ldi r17,0x0D
cp r17,r3
brne not12
ldi r17,0x05
cp r17,r2
brne not12
clr r17
cp r17,r1
brne not12
rcall zvonokbeg1 // 13:05
not12:
ldi r17,0x0D
cp r17,r3
brne not13
ldi r17,0x1E
cp r17,r2
brne not13
clr r17
cp r17,r1
brne not13
rcall zvonokbeg1 // 13:30
not13:
ldi r17,0x0E
cp r17,r3
brne not14
ldi r17,0x0F
cp r17,r2
brne not14
clr r17
cp r17,r1
brne not14
rcall zvonokbeg1 // 14:15
not14:
ldi r17,0x0E
cp r17,r3
brne not15
ldi r17,0x14
cp r17,r2
brne not15
clr r17
cp r17,r1
brne not15
rcall zvonokbeg1 // 14:20
not15:
ldi r17,0x0F
cp r17,r3
brne not16
ldi r17,0x05
cp r17,r2
brne not16
clr r17
cp r17,r1
brne not16
rcall zvonokbeg1 // 15:05
not16:
ldi r17,0x0F
cp r17,r3
brne not17
ldi r17,0x0F
cp r17,r2
brne not17
clr r17
cp r17,r1
brne not17
rcall zvonokbeg1 // 15:15
not17:
ldi r17,0x10
cp r17,r3
brne not18
ldi r17,0x00
cp r17,r2
brne not18
clr r17
cp r17,r1
brne not18
rcall zvonokbeg1 // 16:00
not18:
ldi r17,0x10
cp r17,r3
brne not19
ldi r17,0x05
cp r17,r2
brne not19
clr r17
cp r17,r1
brne not19
rcall zvonokbeg // 16:05
not19:
ldi r17,0x10
cp r17,r3
brne not151
ldi r17,0x32
cp r17,r2
brne not151
clr r17
cp r17,r1
brne not151
rcall zvonokbeg // 16:50
not151:
ldi r17,0x11
cp r17,r3
brne not152
ldi r17,0x00
cp r17,r2
brne not152
clr r17
cp r17,r1
brne not152
rcall zvonokbeg // 17:00
not152:
ldi r17,0x11
cp r17,r3
brne not153
ldi r17,0x2D
cp r17,r2
brne not153
clr r17
cp r17,r1
brne not153
rcall zvonokbeg // 17:45
not153:
ldi r17,0x11
cp r17,r3
brne not154
ldi r17,0x32
cp r17,r2
brne not154
clr r17
cp r17,r1
brne not154
rcall zvonokbeg // 17:50
Информация о работе Расчет системы подачи звонков на основе МК AVR