Автор работы: Пользователь скрыл имя, 22 Апреля 2013 в 18:53, курсовая работа
Мета роботи – розробити принципову схему гірлянди на мікроконтролері
У курсовому проекті розглядається схема гірлянди на мікроконтролері. В ході виконання курсового проекту було розглянуто технічні дані системи, розроблені режими роботи даної схеми також було докладно розглянуто принцип побудови та роботи електрично – принципових схем плат.
clr tmp2
ldi tmp2, $C8 ;АЦП дозволений, старт преобразовання
out ADCSR, tmp2 ;Одиночное преобразовання
;Збереження данних АЦП
in Axx, ADCL
in Ayy, ADCH ; віднімання значення АЦП від набраного значення
mov А1, Axx
mov Ah, Ayy
sub Al, Zl
sbc Ah, Zh
nop
brbs 2, SleepReset ;рівень АЦП досягнутий ;
сброс всех значень тимчасових регістрів
clr tmp
clr tmp2
clr tmp3
clr tmp4
clr Freqlndex
clr FreqDelay
; налаштування напрямків роботи ліній порту В
ldi tmp2, $04
out DDRB, tmp2
;режим работи таймера ТО з максимальним попереднім
;діленням для встановлення часу музичного супроводу
ldi tmp3, $05
out TCCR0, tmp3 ;максимальне ділення СК/1024
ldi tmp3, $02
out TIMSK, tmp3 ;дозволяємо преривання по переполненню
;від ТО і преривання від Т1
Sei
;настройка таймера Т1 для музыкального сопровождения ;
выбор коэффициента предварительного деления тактовой частоты
;1:64 и автоматический сброс таймера при совпадении
ldi tmp4, $9B ;настройка режима #10011011
;режим работы таймера 1 на переключение внешнего вывода,
;состояние вывода меняется на противоположное,
out TCCR1, tmp4 ;вывод ОС1А линия вывода (РВ1)
; установка номера шага на начало
clr Step
;начало воспроизведения мелодики
ReadNote: ;чтение длительности и номера одной ноты
wdr
ldi
r31,High(2*ProgramTab)
;ProgramTab[Step]
ldi r30,Low(2*ProgramTab) ;FreqDelay = Hi
;ProgramTab[Step]
mov
rO,Step
lsl r0
add r30,r0
inc Step
lpm
mov Freqlndex,r0
inc r30
lpm
cpi Step, $16
brne dal
rjmp SleepReset
;закончилась
;Если ноты не закончились, то продолжить
dal: nop
mov FreqDelay, r0
SetFreq: ; настройка Т1 на вывод частоты текущей ноты
ldi r31,High(2*SoundTab) ;0CR1A =
;SoundTab[Freqlndex]
ldi r30, Low(2*SoundTab)
lsl Freqlndex
add r30, Freqlndex
lpm
out OCR1A, r0
inc r30
lpm
out OCRlB, rO
;Установка длительности ноты
SetDalay: nop
ldi r31, High (2*NoteDelay)
ldi r30, Low (2*NoteDelay)
lpm
mov FreqDelay,r0
;Озвучивание ноты
Wait: tst FreqDelay ;Проверка на ноль длительности ноты
; Ожидаем заданное время, пока проигрывается
brne Wait ; текущая нота
;Если длительность ноты = 0, то переход к следующей ноте
Rjmp ReadNote
SleepReset:
ldi r30, $3F ; подготовка к переходу в
; режим "Power Down"
out MCUCR, rЗО
sleep
rjmp Reset ; эта команда в данной версии
;программы не должна исполняться никогда
;Прерывание от таймера 0, уменьшение шага длительности ноты
ТIМЕ_0: пор
dec FreqDelay
clr tmp4
out TCNT1, tmp4 ;обнуление таймера 1
reti
.ORG $100
SoundTab:
; Таблица констант, соответствующих нотам.
; Желательно выровнять таблицу по границе 256 байтов, чтобы
; упростить программу, отказавшись от 16-битовых операций.
.DW 32047,32106,32095,32089,32084,
.DW 32060,32053,32047,32045,32042,
.DW 32030,32027,32024,32022,32021,
; при необходимости таблицу можно продолжить.
.ORG $140
ProgramTab:
; Таблица последовательности нот,
; формат таблицы: байт длительности/кода операции, байт
; номера частоты.
; В этом примере записано проигрывание гаммы.
. DW $1000, $1002, $1003, $1004, $1005, $1006, $1007
.DW $1008, $1009, $100А, $100В, $100С, S100D, $100Е
.DW $200D, $200B, $2009, $2007, $2005, $2003, $2001
.DW $8000
.ORG $180
NoteDelay:
; Таблица длительности нот,
.DW $0064, $3200, $1003, $1004, $1005, $1006, $1007
.DW $1008, $1009, $100А, S100B, $100С, $100D, $100E
.DW $200D, $200B, $2009, $2007, $2005, $2003, $2001
.DW $8000
.EXIT
Лістинг 5.2. Шістнадцятирічний код програми для музичного дзвоника
020000020000FC
100000001ЗС0000000000000000055
1O002800000OEDE5F0E0AA27A1E8A7
10003800C8ECC6B974B185B1172F28
1000480000008AF1BB27CC27AA2799
10005800C4E0C7BBA5E0A3BFA2E0A9
1000680090BF4 427A895F2E0E0E804 2E00OCEO0DCC
100078004395C895502DE395C89546
100088000000602DF2EOEOE0550FE5
1OO0980OE395C895ODBC0O00F3E0EO
1000A8006623F1F7DFCFEFE3E5BF88
0800B8006A959927 9FBD189578
100200002F7D6A7D5F7D597D547D47
10021000357D2F7D2D7D2A7D247D20
0A022000187D167D157D127D107DFE
100280000010021003100410051006
1002900009100A100B100C100D100E
ОС02А0000920072005200320012000
100300006400003203100410051006
1003100009100A100B100C100D100E
ОС0320000920072005200320012000
00000001FF
Зверніть увагу на те, що таблицю тривалості нот і частоту ноти можна прочитати тільки за допомогою команди LPM мікроконтролера. Ця команда у версії ATtiny 15 по суті - єдина, вона виконує функції непрямого читання даних з пам'яті в регістр R0. Крім того, існує обмеження стека по нижньому рівню. Стек підтримує не більше трьох вкладень. Автор перевірив в симуляторі AVR Studio 4 вкладення стека на рівні 3, і виявив збій програми, оскільки команди умовного переходу теж використовують стек. Програма втрачає функціональність і послідовність. З огляду на ці зауваження, вихідна "прошивка" має невеликий обсяг (для мікроконтролера Tiny 15), але перевірена і цілком працездатна.
По закінченню програвання
мелодії мікроконтроллер
4 КОНСТРУКЦІЯ І РОБОТА ПРИСТРОЮ
Система команд мікроконтролера
Система команд представляється специфікацією відповідності (мікро) команд розділами кодів (мікро) операцій, які виконуються при виклику команди, що визначаються (мікро) архітектурою системи. (При цьому, на системах з різною (мікро) архітектурою може бути реалізована одна і та ж система команд.
Базовими командами є, як правило, такі:
- арифметичні, наприклад «додавання» і «вирахування»;
- бітові, наприклад «логічне і», «логічне або» і «логічне не»;
- присвоювання даних,
наприклад «перемістити», «
- введення-виведення, для обміну даними з зовнішніми пристроями;
- керуючі інструкції, наприклад «перехід», «умовний перехід», «виклик підпрограми», «повернення з підпрограми».
Система команд мікроконтролера ATtiny15 представлена в таблиці 4.1
Таблиця 4.1 Система команд мікроконтролера ATtiny15
Позначення |
Функція | |
ADC |
Зняти з перенесенням | |
ADD |
Скласти без переносу | |
ADIW |
Скласти безпосереднє значення зі словом | |
AND |
Виконати логічне AND | |
ANDI |
Виконати логічне AND c безпосереднім значенням | |
ASR |
Арифметично зрушити вправо | |
BCLR |
Очистити флаг | |
BLD |
Завантажити T флаг в біт регістра | |
BRBC |
Перейти якщо біт в регістрі статусу очищений | |
BRBS |
Перейти якщо біт в регістрі статусу встановлений | |
BRCC |
Перейти якщо флаг переносу очищений | |
BRCS |
Перейти якщо флаг переносу встановлений | |
BREQ |
Перейти якщо одно | |
BRGE |
Перейти якщо більше або дорівнює (з урахуванням знаку) | |
BRHC |
Перейти якщо флаг півпереноса очищений | |
BRHS |
Перейти якщо флаг півпереноса встановлений | |
BRID |
Перейти якщо глобальне переривання заборонено | |
BRIE |
Перейти якщо глобальне переривання дозволено | |
BRLO |
Перейти якщо менше (без знаку) | |
BRLT |
Перейти якщо менше ніж (зі знаком) | |
BRMI |
Перейти якщо мінус | |
BRNE |
Перейти якщо не дорівнює | |
BRPL |
Перейти якщо плюс | |
BRSH |
Перейти якщо дорівнює або більше (без знаку) | |
BRTC |
Перейти якщо флаг T очищений | |
BRTS |
Перейти якщо флаг T встановлений | |
BRVC |
Перейти якщо переповнення очищено | |
BRVS |
Перейти якщо переповнення встановлено | |
BSET |
Встановити флаг | |
BST |
Переписати біт з регістра в флаг T | |
CALL |
Виконати довгий виклик підпрограми | |
CBI - |
Очистити біт в регістрі I / O | |
CBR |
Очистити біти в регістрі | |
CLC |
Очистити флаг переносу | |
CLH |
Очистити флаг полупереноса | |
CLI |
Очистити флаг глобального переривання | |
CLN |
Очистити флаг від'ємного значення | |
CLR |
Очистити регістр | |
CLS |
Очистити флаг знака | |
CLT |
Очистити флаг T | |
CLV |
Очистити флаг переповнення | |
CLZ |
Очистити флаг нульового значення | |
COM |
Виконати доповнення до одиниці | |
CP |
Порівняти | |
CPC |
Порівняти з урахуванням перенесення | |
CPI |
Порівняти c константою | |
CPSE |
Порівняти й пропустити якщо одно | |
DEC |
Декрементіровать | |
EOR |
Виконати виключає OR | |
ICALL |
Викликати підпрограму побічно | |
IJMP |
Перейти побічно | |
IN |
Завантажити дані з порту I / O в регістр | |
INC |
Інкрементувати | |
FMUL |
Дробове незнакові множення | |
FMULS |
Дробове множення зі знаком | |
FMULSU |
Дробове множення знакового з незнакові | |
JMP |
Перейти | |
LD Rd, X |
Завантажити побічно | |
LD Rd, X + |
Завантажити побічно інкрементіровав згодом | |
LD Rd,-X |
Завантажити побічно декрементіровав попередньо | |
LDI |
Завантажити безпосереднє значення | |
LDS |
Завантажити безпосередньо з СОЗУ | |
LPM |
Завантажити байт пам'яті програм | |
LSL |
Логічно зрушити вліво | |
LSR |
Логічно зрушити вправо | |
MOV |
Копіювати регістр | |
MUL |
Перемножити | |
NEG |
Виконати додаток до двох | |
NOP |
Виконати холосту команду | |
OR |
Виконати логічне OR | |
ORI |
Виконати логічне OR з безпосереднім значенням | |
OUT |
Записати дані з регістра в порт I / O | |
POP |
Завантажити регістр з стека | |
PUSH |
Помістити регістр у стек | |
RCALL |
Викликати підпрограму щодо | |
RET |
Повернутися з підпрограми | |
RETI |
Повернутися з переривання | |
RJMP |
Перейти щодо | |
ROL |
Перемістити ліворуч через перенесення | |
ROR |
Зрушити вправо через перенесення | |
SBC |
Відняти з перенесенням | |
SBCI |
Відняти безпосереднє значення з перенесенням | |
SBI |
Встановити біт в регістр I / O | |
SBIC |
Пропустити якщо біт в регістрі I / O очищений | |
SBIS |
Пропустити якщо біт в регістрі I / O встановлений | |
SBIW |
Відняти безпосереднє значення зі слова | |
SBR |
Встановити біти в регістрі | |
SBRC |
Пропустити якщо біт в регістрі очищений | |
SBRS |
Пропустити якщо біт в регістрі встановлений | |
SEC |
Встановити прапор переносу | |
SEH |
Встановити прапор полу переносу | |
SEI |
Встановити прапор глобального переривання | |
SEN |
Встановити прапор від'ємного значення | |
SER |
Встановити всі біти регістра | |
SES |
Встановити прапор знака | |
SET |
Встановити флаг T | |
SEV |
Встановити флаг переповнення | |
SEZ |
Встановити флангу льового значення | |
SLEEP |
Встановити режим SLEEP | |
ST X, Rr |
Записати побічно | |
ST Y, Rr |
Записати побічно з регістра в СОЗУ з використанням індексу Y | |
ST Z, Rr |
Записати побічно з
регістра в СОЗУ з використанням | |
STS |
Завантажити безпосередньо в СОЗУ | |
SUB |
Відняти без переносу | |
SUBI |
Відняти безпосереднє значення | |
SWAP |
Поміняти ніббли місцями | |
TST |
Перевірити на нуль чи мінус | |
WDR |
Скинути сторожовий таймер |
ВИСНОВКИ
У даному курсовому проекті розглядалося питання розробки цифрового музичного дзвоника на мікроконтролері ATtiny15.
Процес розробки цифрового термометра був розбитий на ряд етапів:
- Вивчення теоретичних
основ процесу розробки
- Аналіз завдання і сімейства МК.
- Описанняелементної бази.
- Розробка структурної схеми пристрою;
- Розробка функціональної схеми пристрою;
- Складання алгоритму програми для мікроконтролера;
- Складання програми для
мікроконтролера, згідно
- Складання принципової схеми пристрою;
Цей пристрій може бути рекомендовано лише в радіоаматорській практиці.
ПЕРЕЛІК ПОСИЛАНЬ
1. "DimmableFluorescentBallast" –
UserGuide, 10/07, AtmelCorporation, http://www.atmel.com/dyn/
2. ГОСТ13109-97. Нормыкачестваэлектрическойэнер
3. G. Howell "Fivequestionsaboutresistors"
// EDN, 9/28/2006, http://www.edn.com/contents/
4. П. Хоровиц, У. Хилл "Искусствосхемотехники" – Изд. 6-е, М.: Мир, 2003.
5. "TheDo'sandDon'tsofUsing MOS-Gated Transistors"
– ApplicationNote AN-936, InternationalRectifier, http://www.irf.com/technical-
6. "
7."
16. Заец Н.И.
17. Заец Н.И.
18. Заец Н.И. , Сергеев В.С.
19. Белов А.В.
20. Кравченко А.В. 10 практическихустройств на микроконтроллерах. Книга 1 – М., Изд. Дом «Додэка-ХХ» , МК-ПРЕСС, 2008 – 224с.
|