Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 1 / ИДЗ_1 (Глеб М).docx
Скачиваний:
5
Добавлен:
08.04.2022
Размер:
563.64 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

Отчет

по Лабораторной работе №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

Обработка результатов

  1. Программа мигания светодиодом на языке 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, подключен встроенный в плату светодиод.

Соседние файлы в папке Лаба 1
  • #
    08.04.202250.62 Кб3AssemblerApplication1.lss
  • #
    08.04.202212.43 Кб3AssemblerApplication1.map
  • #
    08.04.2022425 б3AssemblerApplication1.obj
  • #
    08.04.20221.69 Кб3AssemblerApplication1.tmp
  • #
    08.04.2022383 б3main.asm
  • #
    08.04.2022563.64 Кб5ИДЗ_1 (Глеб М).docx
  • #
    08.04.2022791.83 Кб6ИДЗ_1.docx
  • #
    08.04.2022430.09 Кб8ИДЗ_1.pdf
  • #
    08.04.202214.55 Кб5Схема с кнопкой.pdsprj