ЛАБОРАТОРНАЯ РАБОТА №3 -...

13
ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА Цель: познакомиться с принципом работы портов ввода/вывода, научится управлять светодиодами и считывать сигнал с кнопок, начать изучение языка программирования ANSI-C (для микроконтроллеров семейства AVR). Задание: настроить отладочную плату согласно задания на программирование, разработать и отладить программу в среде программирования AVR Studio на языке ANSI-C. ОБЩАЯ ИНФОРМАЦИЯ Порт – физическое или логическое соединение, через которое принимаются и отправляются данные. Порт ввода-вывода – используется в микропроцессорах при обмене данными с аппаратным обеспечением. Порт ввода-вывода сопоставляется с тем или иным устройством и позволяет программам обращаться к нему для обмена данными. Применительно к микроконтроллерам, каждый порт ввода/вывода состоит из определенного числа выводов, через которые микроконтроллер может передавать или принимать цифровые сигналы. Микроконтроллер ATMega16 имеет 4 полноразмерных (8-битных) порта ввода/вывода именуемых «A», «B», «C» и «D». Задание направления передачи данных через любой контакт порта ввода/вывода может произведено программно в любой момент времени. ПОДКЛЮЧЕНИЕ СВЕТОДИОДОВ К МИКРОКОНТРОЛЛЕРУ Светодиод – это полупроводниковый прибор, излучающий некогерентный свет при пропускании через него электрического тока. При подключении светодиода к МК возможны два следующих случая: 1) светодиод подключен катодом к микроконтроллеру (Рис. 1); 2) светодиод подключен анодом к микроконтроллеру (Рис. 2). 1

Transcript of ЛАБОРАТОРНАЯ РАБОТА №3 -...

Page 1: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

ЛАБОРАТОРНАЯ РАБОТА №2

ПОРТЫ ВВОДА / ВЫВОДА

Цель: познакомиться с принципом работы портов ввода/вывода, научится управлять светодиодами и считывать сигнал с кнопок, начать изучение языка программирования ANSI-C (для микроконтроллеров семейства AVR).

Задание: настроить отладочную плату согласно задания на программирование, разработать и отладить программу в среде программирования AVR Studio на языке ANSI-C.

ОБЩАЯ ИНФОРМАЦИЯ

Порт – физическое или логическое соединение, через которое принимаются и отправляются данные.

Порт ввода-вывода – используется в микропроцессорах при обмене данными с аппаратным обеспечением. Порт ввода-вывода сопоставляется с тем или иным устройством и позволяет программам обращаться к нему для обмена данными.

Применительно к микроконтроллерам, каждый порт ввода/вывода состоит из определенного числа выводов, через которые микроконтроллер может передавать или принимать цифровые сигналы.

Микроконтроллер ATMega16 имеет 4 полноразмерных (8-битных) порта ввода/вывода именуемых «A», «B», «C» и «D».

Задание направления передачи данных через любой контакт порта ввода/вывода может произведено программно в любой момент времени.

ПОДКЛЮЧЕНИЕ СВЕТОДИОДОВ К МИКРОКОНТРОЛЛЕРУ

Светодиод – это полупроводниковый прибор, излучающий некогерентный свет при пропускании через него электрического тока.

При подключении светодиода к МК возможны два следующих случая:1) светодиод подключен катодом к микроконтроллеру (Рис. 1);2) светодиод подключен анодом к микроконтроллеру (Рис. 2).

1

Page 2: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

Рассмотрим вариант 1.

Рис. 1. Подключение светодиода к МК (вариант 1)

Для того чтобы светодиод начал излучать свет, необходимо создать разность потенциалов между анодом и катодом. Анод подключен к положительному выводу источника питания (VCC). Т.о. когда разряд PA7 сбрасывается в «0», на нем образуется нулевой потенциал (GND) и через светодиод начинает протекать ток. Если вывод PA7 = 1 (VCC), то разности потенциалов не будет – и светодиод не будет излучать свет.

Рассмотрим вариант 2.

Рис. 2. Подключение светодиода к МК (вариант 2)

Для того чтобы светодиод начал излучать свет, необходимо создать разность потенциалов между анодом и катодом. Катод подключен к отрицательному выводу источника питания (GND). При сравнении с предыдущей схемой становится ясно, что когда разряд PA7 сбрасывается в «0» – светодиод не будет излучать свет, а когда PA7 = 1 будет.

ПОДКЛЮЧЕНИЕ КНОПОК К МИКРОКОНТРОЛЛЕРУ

Аналогично подключению светодиода, для подключения кнопок к МК существуют две схемы:

1) схема с pull-up резистором (Рис. 3);2) схема с pull-down резистором (Рис. 4).

Подтягивающие резисторы (pull-up и pull-down) необходимы для того, чтобы вывод МК при разомкнутой кнопке имел строго определенный потенциал, а не «болтался в воздухе». Без этого резистора вывод МК будет находиться в

2

Page 3: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

третьем состоянии (потенциал на выводе не поределен), а при попытке определения состояния вывода, будет считана или «1», или «0» (зависит от внешних наводок на плате).

Рассмотрим схему с pull-up резистором более детально.

Рис. 3. Подключение кнопки к МК через pull-up резистор

Когда кнопка разомкнута вывод PB6, через подтягивающий резистор R1 имеет потенциал VCC (PB6 = 1). При замыкании кнопки на потенциал вывода МК будут оказывать влияние VCC (через R1 = 2.4k) и GND (сопротивления практически нет). Т.о. потенциал GND пересилит VCC и при чтении состояния вывода мы получим PB6 = 0.

Схема с pull-down резистором работает «зеркально» относительно схемы с pull-up резистором.

Рис. 4. Подключение кнопки к МК через pull-down резистор

РЕГИСТРЫ ДЛЯ УПРАВЛЕНИЯ ПОРТОМ

Обращение к порту ввода/вывода производится через регистры ввода/вывода (PORTx, DDRx, PINx, где “x” – имя порта). Каждый разряд регистров управления портом отвечает за соответствующий им вывод МК.

3

Page 4: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

Направление передачи данных определяется содержимым регистра направления данных DDRx (Data Direction Register x). Если разряд DDxn этого регистра установлен в «1», то соответствующий n-й вывод порта является выходом. Если же разряд сброшен в «0», соответствующий вывод порта является входом.

PORTx – регистр данных порта X. Значения его битов определяют: значение напряжения на соответствующих ножках микроконтроллера (если содержится «0» – на соответствующем выводе потенциал земли (0В) – логический ноль, если «1» – потенциал питания (+5В) – логическая единица).

Регистр PINx предоставляет доступ к физическим значениям сигналов на выводах порта.

Установка направления передачи данных

При включении МК все выводы портов МК настроены как входы.

Если мы хотим управлять компонентом подключенным к порту МК (посылать ему управляющие сигналы), соответствующие выводы МК настраиваются как выходы. Если мы хотим проанализировать состояние компонента (считать сигнал с устройства), то соответствующие выводы нужно настроить на вход.

Рассмотрим следующую схему (см. Рис. 5). К PORTD микроконтроллера MEGA16 подключены 5 светодиодов и кнопки. Светодиоды подключены к выводам PD0, PD1, PD2, PD6, PD7, а кнопки к PD3, PD4 и PD5.

Рис. 5 Назначение направления данных для выводов МК

Таким образом, выводы к которым подключены светодиоды, должны быть выходами, а те к которым подключены кнопки – входами.

4

Page 5: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

Настроим направление передачи данных для данного случая.

// Настройка портов ввода/вывода// 76543210 (нумерация разрядов порта)DDRD = 0b11000111;

Запись данных в порт

При включении МК, значение регистров PORTx = 0x00.

Для выводов настроенных как «выход», мы можем программно управлять его состоянием (будет ли там «1» или «0», что будет соответствовать изменению напряжения на соответствующих ножках микроконтроллера).

Если в разряде регистра PORTx записана «1», то на соответствующей ему ноге МК будет высокий потенциал (VCC), а если «0» – низкий (GND). Это справедливо, если данный вывод МК настроен как выход!!!

Для примера включим светодиоды LED2 и LED5, а остальные – выключим (см. Рис. 5)

// Настройка портов ввода/вывода// (нумерация разрядов порта)// 76543210DDRD = 0b11000111;

// Включаем LED2 и LED5PORTD = 0b01000001;

Для тех выводов порта, которые настроены как «входы», PORTx регистр позволяет включить/выключить внутренний подтягивающий резистор (величиной порядка 2…4 кОм). Для каждого разряда всех портов МК, внутри самого микроконтроллера, предусмотрены подтягивающие резисторы (подтягивают напряжение к VCC).

Если в разряде регистра PORTx записана «1», то на соответствующей ему ноге МК будет включен внутренний подтягивающий резистор, а если «0» – выключен. Это справедливо, если данный вывод МК настроен как вход!!!

Чтение данных с порта

Чтение состояния порта выполняется чтением регистра выводов порта (PINx) – реальное значение потенциалов на выводах МК, либо чтением регистра данных порта (PORTx) – значение, которое было выведено в порт.

5

Page 6: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

Рассмотрим процедуру чтения порта (см. Рис. 5). Если кнопки S1 и S2 нажаты, а S3 отпущена, то включим светодиод LED4 (остальные потушены), в противном случае – LED1 (остальные потушены).

// Данная переменная используется для чтения состояния кнопокunsigned char SwitchState;

// Настройка портов ввода/вывода// (нумерация разрядов порта)// 76543210DDRD = 0b11000111;

// Читаем состояние портаSwitchState = PIND;

// При чтении состояния порта вместе с интересующими нас// значениями кнопок мы считали и состояния светодиодов!// Чтобы светодиоды не мешали определить состояния кнопок – // обнулим состояния светодиодов в SwitchState.// Для этого наложим на SwitchState маску// После выполнения данной операции 7, 6, 2, 1 и 0 разряды в// SwitchState обнулятся, а 5, 4 и 3 своих значений не изменятSwitchState = SwitchState & 0b00111000;

// Анализируем состояния кнопокif (SwitchState == 0b00011000) // Если S1 и S2 замкнуты...{

// Включаем светодиод LED4PORTD = 0b00000010;

}else // В остальных случаях...{

// Включаем светодиод LED1PORTD = 0b10000000;

}

Дополнительная литература

Информацию по портам ввода/вывода можно найти в следующем источнике:• Евстифеев А.В. «Микроконтроллеры AVR семейств Tiny и Mega

фирмы Atmel» (глава 12).

ОПИСАНИЕ ПРИНЦИПИАЛЬНОЙ СХЕМЫ

Детальное описание принципиальной схемы можно найти в документации на отладочную плату EASYAVR5A. В данном разделе будут изложены лишь некоторые общие положения…

Светодиоды

6

Page 7: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

В основном светодиоды используются для отображения цифрового состояния выводов. EASYAVR5A имеет 32 светодиода для отображения состояния выводов портов МК (PORTA, PORTB, PORTC и PORTD).

Светодиоды разделены на 4 группы. Каждая группа состоит из 8-и светодиодов и может быть включена или выключена при помощи переключателя SW6.

Светодиоды включены, когда соответствующий ключ переключателя SW6 замкнут. Когда ключ замкнут – светодиоды отображают состояние соответствующего вывода МК. Иначе, светодиоды всегда выключены, независимо от состояния вывода порта, т.к. через них не протекает ток.

См. стр. 14-15 документации на EASYAVR5A.

Кнопки

EASYAVR5A имеет 32 кнопки, которые используются для изменения состояния цифровых входов портов МК. Схема подключения кнопок изображена на рис. 15 (стр. 16 EASYAVR5A UserManual). Джампер J6 определяет потенциал подаваемый на вывод МК при замыкании кнопки (логический ноль (0) или логическая единица (1)). При отпущенной кнопке состояние вывода определяется подтягивающим резистором.

Обратимся к рисунку 15 (стр. 17) документации. Джампер J1 подтягивает PA7 вывод МК через потягивающий резистор к напряжению питания (+5В). При замыкании кнопки, вывод PA7 подключен к земле через джампер J6.

Соответственно, если кнопка замкнута – микроконтроллер считывает логический ноль, иначе – логическую едниницу.

В противоположность изложенной выше схеме, на рисунке 16 (стр. 17) приведена другая схема включения кнопки. Джампер J1 подтягивает вывод PA7 к 0В. А при нажатии кнопки, вывод PA7 подключается к +5В через J6.

Соответственно, если кнопка замкнута – микроконтроллер считывает логическую единицу, иначе – логический ноль.

Подтягивающие резисторы можно включить или выключить для каждого вывода независимо, используя ключи SW1, SW2, SW3 и SW4 (см. рис. 34).

Нельзя допускать неоднозначности в состоянии вывода («третье состояние») при разомкнутой кнопке. Дело в том, что раз входы микросхем имеют огромное сопротивление, то на них наводится куча помех буквально из воздуха, а следовательно, значение на входе может принимать совершенно

7

Page 8: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

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

8

Page 9: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ

1. Набрать текст программы (приведен в приложении).2. Отладить ее и изучить на симуляторе принцип работы.3. Запрограммировать в МК и проверить работоспособность.4. Модифицировать программу согласно своему заданию (выдает

преподаватель).5. Отладить программу.6. Запрограммировать в МК и протестировать.

9

Page 10: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что такое порт ввода/вывода и зачем он нужен.2. Регистры управления портом ввода/вывода.3. Регистр DDRx.4. Регистр PORTx.5. Регистр PINx.6. Что такое подтягивающий резистор, зачем он нужен.7. Сконфигурировать порт… (задание от преподавателя).

10

Page 11: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

ПРИЛОЖЕНИЕ 1

Текст программы

/*----------------------------------------------------------------------------

Лабораторная работа №2----------------------------------------------------------------------------

Микроконтроллер: ATMEGA16

Отладочная плата: EASYAVR5A

Описание: Данная программа выводит изображение на светодиодный индикаторв зависимости от состояния кнопок.

Для светодиодного индикатора используются следующие выводы:- PA1...PA7 (1-ый столбец);- PB1...PB7 (2-ой столбец);- PC1...PC7 (3-ий столбец);- PD1...PD7 (4-ый столбец).

Для кнопок используются следующие выводы:- PA0, PB0, PC0, PD0.

При замыкании кнопки на вывод МК подается GND.

Схема работы: при замыкании кнопки на экране должно появитсясоответствующее изображение (см. ниже), если ни одна кнопкане замкнута - экран гаснет. "X" - соответствует включенномусветодиоду, "|" - выключенному.

PA0: XXXX PB0: XXXX PC0: X|X| PD0: X||| X||X |||| |X|X XX|| X||X XXXX X|X| XXX| X||X |||| |X|X XXXX X||X XXXX X|X| XXX| X||X |||| |X|X XX|| XXXX XXXX X|X| X|||

Настройка отладочной платы:

1. Включить индикацию состояния выводов портов A, B, C, D. (Ключ SW6 = 11110000; "1" - замкнут; "0" – разомкнут).

2. Кнопки замыкают выводы МК на GND. (Джампер J6 замкнуть на GND).

3. Т.к. при замыкании кнопки на вывод МК подается GND, то в разомкнутом состоянии выводы кнопок подтягиваем к VCC (напр. питания), для остальных выводов подтягивающие резисторы отключаем. (J1 = VCC; SW1 = 10000000; J2 = VCC; SW2 = 10000000; J3 = VCC; SW3 = 10000000; J4 = VCC; SW4 = 10000000).

*/

//// Подключаем внешние файлы//// Описание регистров для микроконтроллера

11

Page 12: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

#include <AVR/io.h>

//// Основная программа//int main (void){

// Настраиваем направление данных для портов МКDDRA = 0b11111110; // PA7...PA1 - выход; PA0 - входDDRB = 0b11111110; // PB7...PB1 - выход; PB0 - входDDRC = 0b11111110; // PC7...PC1 - выход; PC0 - входDDRD = 0b11111110; // PD7...PD1 - выход; PD0 - вход

// Вечный цикл// Основная программа для МК должна работать в таком циклеwhile (1){

// Если нажата кнопка PA0if ((PINA & 0b00000001) == 0b00000000){

// Выводим на экран соответствующее изображениеPORTA = 0b11111110;PORTB = 0b10000010;PORTC = 0b10000010;PORTD = 0b11111110;

}// иначе проверяем, если нажата кнопка PB0else if ((PINB & 0b00000001) == 0b00000000){

// Выводим на экран соответствующее изображениеPORTA = 0b10101010;PORTB = 0b10101010;PORTC = 0b10101010;PORTD = 0b10101010;

}// иначе проверяем, если нажата кнопка PC0else if ((PINC & 0b00000001) == 0b00000000){

// Выводим на экран соответствующее изображениеPORTA = 0b10101010;PORTB = 0b01010100;PORTC = 0b10101010;PORTD = 0b01010100;

}// иначе проверяем, если нажата кнопка PD0else if ((PIND & 0b00000001) == 0b00000000){

// Выводим на экран соответствующее изображениеPORTA = 0b11111110;PORTB = 0b01111100;PORTC = 0b00111000;PORTD = 0b00010000;

}// иначе выключаем все светодиодыelse{

PORTA = 0b00000000;PORTB = 0b00000000;PORTC = 0b00000000;PORTD = 0b00000000;

}}

}

12

Page 13: ЛАБОРАТОРНАЯ РАБОТА №3 - kpi.uaooep.kpi.ua/microcontrollers/rus/Downloads/LabWork_2.pdf · ЛАБОРАТОРНАЯ РАБОТА №2 ПОРТЫ ВВОДА / ВЫВОДА

ПРИЛОЖЕНИЕ 2

13