Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 1 / ИДЗ_1

.pdf
Скачиваний:
8
Добавлен:
08.04.2022
Размер:
430.09 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС

ИДЗ №1

ТЕМА: Программирование портов ввода-вывода

Студент гр. 7501

 

Исаков А.О.

Преподаватель

 

Анисимов А.А.

 

 

 

 

 

Санкт-Петербург

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) для ATTINY104

LDI R16,0b00100000

OUT DDRA,R16

OUT PORTA,R16

MAIN:

LDI R16, 0b11011111 OUT PORTA,R16 RCALL Delay

LDI R16,0b00100000 OUT PORTA,R16 RCALL Delay

rjmp MAIN

.equ Lowbyle=255

.equ Medbyte=255

.equ Hightbyte=2

Delay:

LDI R16,Lowbyte

LDI R17,Medbyte

LDI R18,Hightbyte

loop:

DEC R16 BRNE loop DEC R17 BRNE loop DEC R18 BRNE loop RET

Рисунок 2 – Светодиод горит

Рисунок 3 – Светодиод погас

Как можно понять из кода, задержка при мигании светодиодом в данном случае происходит из-за лагов МК во время выполнения операций декрементирования DEC. Количество арифметических операций, для получения различимой глазом задержки должно быть велико, так как тактовая частота равна 1МГц. В данном случае это число равно 255 * 255 * 2 = 130050.

Мигание светодиодом по нажатию на кнопку (Assembler) для ATTINY104

LDI r16, 0b00000000

; устанавливаем все нули в РОН r16

 

 

 

OUT DDRB, r16

 

; присваем регистру DDRB значение r16

 

 

 

LDI r16, 0b00000010

; устанавливаем 1 во 1 разр. в РОН r16

 

 

 

OUT PUEB, r16

 

; присваем регистру PUEB значение r16 (вкл. подтяжку)

 

 

LDI r16, 0b00100000 ; устанавливаем 1 во 5 разр. в РОН r16

 

 

 

OUT DDRA, r16

 

; присваем регистру DDRA значение r16

 

 

 

Main:

 

 

; начало главного цикла

 

 

 

IN r16, PINB

 

; считываем значения с PINB в r16

 

 

SBRC r16, 1

 

; если в 1 разр. в r16 единица

 

 

LDI r17, 0b00100000

; присваеваем r17 единицу в 5 разр.

 

 

SBRC r16, 1

 

; если в 1 разр. в r16 единица

 

 

OUT PORTA, r17

; присваем регистру PORTA значение r17

 

 

SBRS r16, 1

 

; если в 1 разр. в r16 ноль

 

 

LDI r17, 0b00000000

; присваеваем r17 нули во всех разр.

 

 

SBRS r16, 1

 

; сли в 1 разр. в r16 ноль

 

 

 

OUT PORTA, r17

; присваем регистру PORTA значение r17

 

 

RJMP Main

 

 

 

 

 

 

 

 

Во

избежание

того,

чтобы

вывод

находился

в

режиме

высокоимпедансного входа Hi-Z, мы включаем подтяжку для используемой

кнопки «OUT PUEB, r16»

Мигание светодиодом по нажатию на кнопку (C) для ATTINY2313

#include <avr/io.h>

int main(void)

 

 

{

 

 

DDRB |= (1<<DDB5);

// PORTA, 5 вывод на

выход

DDRB &=~ (1<<DDB1);

// PORTB, вывод 1 на

выход

PORTB |= (1<<PB1);

// активируем подтяжку по питанию

while (1)

{

if (!(PINB & (1<<PINB1))) { PORTB &=~ (1<<PB5); } else {

PORTB |= (1<<PB5);

}

}

}

Рисунок 4 – Кнопка не нажата, диод погас

Рисунок 5 – Кнопка нажата, диод загорелся

Преимущество данного кода заключается в его компактности, простоте написания и легкой читаемости, по сравнению с кодом на Assembler, хотя по

выполняемым функциям она идентичная предыдущей программе, за

исключением появившихся здесь логических побитовых операций.

Выводы

В ходе выполнения работы мы познакомились с таким приемом как включение подтяжки Pull UP – PUE для используемой кнопки, во избежание попадания данного вывода в режим Hi-Z. Состояние высокого импеданса или

Z – состояние ( в англоязычной литературе Hi-Z ) – это такое состояние контакта логической схемы, при котором сопротивление между этим контактом и остальной схемой очень велико. Физически данный режим реализуется закрытым полевым транзистором, работающем в ключевом режиме.

Вывод, переведенный в состояние Hi-Z, ведет себя как оторванный от схемы. Внешние устройства, подключенные к этому выводу, могут изменять напряжение на нем по своему усмотрению ( в некоторых пределах ), не влияя на работу остальной схемы. Этот режим в большинстве МК включен по умолчанию, после сброса по питанию. Все переключатели разомкнуты, а

сопротивление порта очень велико, т.е. электрически вывод как будто вообще никуда не подключён и ни на что не влияет. Но при этом он постоянно считывает свое состояние в регистр PINxn, и мы всегда можем узнать, что находится на входе – логическая единица или ноль.

Соседние файлы в папке Лаба 1