- •Теоретическое обоснование темы работы
- •Обработка результатов
- •Программа мигания светодиодом на языке Assembler
- •Программа мигания светодиодом на языке с
- •Программа управления состоянием светодиода по нажатию кнопки на языке Assembler
- •Программа управления состоянием светодиода по нажатию кнопки на языке с
- •Программа управления состоянием светодиода по нажатию кнопки на языке Assembler (усложненная)
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра БТС
Отчет
по Лабораторной работе №1
Тема: Программирование МК для мигания светодиодом
Студент гр. 7503 _____________________ Марсаль Г. О.
Студент гр. 7503 _____________________ Роганов А. А.
Студентка гр. 7503 _____________________ Соболева Б. Д.
Преподаватель _____________________ Анисимов А. А.
Санкт-Петербург
2020
Цель работы: Исследование принципов работы микроконтроллера ATtiny104 на базе отладочной платы “ATtiny104 - Xplained Nano”. Получение начальных навыков программирования МК на языке Assembler и C, пользования средой разработки AVR Atmel Studio 7.
Используемые инструменты: Отладочная плата ATtiny104 - Xplained Nano; интегрированная среда разработки AVR Atmel Studio 7; методические указания к выполнению работы.
Теоретическое обоснование темы работы
Мигание светодиодом при помощи микроконтроллера подразумевает собой попеременную подачу на один из выходов МК сигналов разных логических уровней.
Логические элементы оперируют сигналами двух типов: "высокий логический уровень" (1) и "низкий логический уровень" (0), которые характеризуются различным уровнем напряжения: полное напряжение питания принимается в качестве уровня "логической единицы", а нулевое напряжение - в качестве уровня "логического нуля".
В идеальном случае все сигналы логических элементов существовали бы в виде этих двух предельных уровней напряжения, и никогда бы от них не отклонялись (например, ниже полного напряжения для "высокого уровня", или выше нуля для "низкого уровня".) Однако в реальности уровни напряжения цифровых сигналов не так часто достигают этих идеальных величин вследствие наличия паразитных падений напряжения в схемах на транзисторах, и поэтому логических схем интерпретируют сигналы как логическую единицу или логический нуль, даже в тех случаях, когда напряжение сигналов лежит в диапазоне между полным напряжением питания и нулём.
Элементы ТТЛ работают при номинальном напряжении питания 5 вольт, +/- 0,25 вольт. В идеале, сигнал высокого логического уровня должен быть равен ровно 5,00 В, а сигнал низкого уровня - ровно 0,00 вольт. Однако в реальных элементах ТТЛ не могут быть обеспечены подобные точные уровни напряжения, поэтому они могут принимать сигналы высокого и низкого уровней даже при значительном отклонении напряжения от идеальных величин. "Приемлемые" напряжения входного сигнала лежат в диапазоне от 0 до 0,8 вольт для низкого логического уровня, и от 2 до 5 вольт для высокого логического уровня. "Приемлемые" напряжения выходного сигнала (уровни напряжения, гарантируемые производителем элемента в указанных вариантах нагрузки) лежат в диапазоне от 0 до 0,5 вольт для низкого логического уровня, и от 2,7 до 5 вольт для высокого логического уровня.
Временные задержки в МК, программно, могут быть реализованы по-разному (например, с помощью счетчика, пропуском команды, библиотек задежрки, либо циклов вычисления). В данной работе был выбран наиболее простой тип задержки – при помощи цикла декрементирования переменных для Assembler и библиотека «delay» для языка С.
Вид используемой платы приведен на рисунке 1.
Рисунок 1 – Схема отладочной платы ATtiny104 Xplained Nano
Обработка результатов
Программа мигания светодиодом на языке Assembler
Код программы:
LDI r16, 0b00100000 ; запись 1 в 5 разр. в РОН r16
OUT DDRA, r16 ; перенос из РОН в DDRA
Main: ; начало главного цикла
LDI r16, 0b00100000 ; запись 1 в 5 разр. в РОН r16
OUT PORTA, r16 ; перенос из РОН в PORTA
RCALL Delay ; вызов метки задержки
LDI r16, 0b00000000 ; запись 0 в 5 разр. в РОН r16
OUT PORTA, r16 ; перенос из РОН в PORTA
RCALL Delay ; вызов метки задержки
RJMP Main ; возврат в начало главного цикла
.equ LowByte = 255 ; задаем переменные
.equ MedByte = 255
.equ HighByte = 4
Delay: ; начало метки задержки
LDI r16, LowByte ; записываем переменные в регистры ОН
LDI r17, MedByte
LDI r18, HighByte
loop: ; вызываем цикл
DEC r16 ; отнимаем единицу в r16
BRNE loop ; если не 0, возвращаемся к началу loop
DEC r17
BRNE loop
DEC r18
BRNE loop
RET ; возврат в место вызова метки Delay
Как можно понять из кода, задержка при мигании светодиодом в данном случае происходит из-за «подвисания» МК во время выполнения операций декрементирования DEC. Количество арифметических операций, для получения различимой глазом задержки должно быть велико, так как тактовая частота равна 1МГц. В данном случае это число равно 255 * 255 * 4 = 260100.
Вывод А5 был выбран потому, что именно к нему, как видно на рис. 1, подключен встроенный в плату светодиод.