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

МК / ЛР 4

.pdf
Скачиваний:
17
Добавлен:
05.03.2016
Размер:
500.41 Кб
Скачать

Лабораторна робота №4

Тема: Підключення семи сегментного індикатору до МК AVR

ATmega128

Мета: ознайомитись з особливостями керування групою виходів МК на прикладі семи сегментного індикатора, навчитися виводити інформацію на семисегментний світлодіодний індикатор у динамічному режимі.

1. Короткі теоретичні відомості

Для відображення цифрової інформації найчастіше застосовують семи сегментні індикатори, в яких цифра складається з семи лінійних світлодіодних сегментів розташованих у вигляді цифри 8. (рис. 1) На основі світлодіодів та семисегментних індикаторів будуються підсистеми відображення інформації.

Семисегментні індикатори являють собою збірки світлодіодів. Існують два варіанти збірок. Схема с загальним анодом, та схема с загальним катодом. Якщо використано схему с загальним катодом, то світлодіоди сегментів цифр з’єднано катодами. Для того, щоб отримати зображення на такому індикаторі, необхідно на загальний катод цифри подати рівень напруги логічного нуля, а на ті сегменти, які беруть участь у формуванні цифри – подати високий рівень напруги (логічна „1”). Наприклад, для формування цифри “2” на виводи A, B, G, E, D потрібно подати логічну одиницю.

При побудові підсистем відображення інформації розрізняють два підходи – динамічна і статична схема побудови підсистеми індикації. Статична індикація полягає в постійному підсвічуванні індикаторів від одного джерела інформації. Сутність динамічної індикації полягає в почерговому циклічному підключенні кожного індикатора до джерела інформації через загальну шину даних. При такому включенні значно зменшуються апаратні витрати. Але необхідно забезпечити достатній час світіння одного індикатора, для того щоб не зменшувалась яскравість. Також необхідно забезпечити таку частоту перебору індикаторів, щоб не було помітно мерехтіння.

Рис.1. позначення сегментів в 7-сегментному індикаторі

 

 

 

 

12

 

 

 

 

9

8

6

 

 

 

 

 

 

DIG.1

 

DIG.2

DIG.3

DIG.4

A B C D E

 

F G DP

A B C D E F G DP

A B C D E F G DP

A B C D E F G DP

11

7

4

2

 

1

10

5

3

 

 

 

 

 

 

Рис.2. Схема семисигментного чотирьохрозрядного індикатора

Рис.3. Процес активації першої цифри індикатора

Під час роботи із набором індикаторів необхідно враховувати обмежену кількість портів мікроконтроллера. Тому для відтворення даних на різних 7SEG необхідним є почергове включення цих індикаторів. Період включення слід обрати так, щоб для людського сприйняття усі індикатори здавались увімкненими. Крім того, включення 7SEG може виконуватись одним з двох способів: подачею на загальний провід логічної одинці (високого рівня) або логічного нуля (низького рівня).

2. Приклад виконання завдання

До МК ATmega128 підключено 4 семисегментних індикатора. Вони з’єднані із портами у відповідності до таблиці 1. До мікроконтролера підключено кнопку 1 (до виводу Е7). Необхідно щоб при утриманні кнопки 1 на двох молодших 7SEG індикаторах висвічувалось число 15.

Таблиця 1. Підключення групи з 4-х 7SEG до портів МК ATMega128

Призначення

Порт

Функція

виводу

 

 

A

PORTD0

Сегмент A

B

PORTD1

Сегмент B

C

PORTD2

Сегмент C

D

PORTD3

Сегмент D

E

PORTD4

Сегмент E

F

PORTD5

Сегмент F

G

PORTD6

Сегмент G

DP

PORTD7

Сегмент DP

7SEG-1

PORTE0

Включення 7SEG-1

7SEG-2

PORTE1

Включення 7SEG-2

7SEG-3

PORTE2

Включення 7SEG-3

7SEG-4

PORTE3

Включення 7SEG-4

З метою вирішення поставленого завдання необхідно скласти алгоритм роботи програми.

Опис алгоритму:

1.Ініціалізація робочих змінних та налаштування виводів портів. Необхідно налаштувати PORTD (0-7) та PORTE (0-3) як цифрові виходи, а PORTE7 – як цифровий вхід.

2.З метою уникнення помилок при роботі програми необхідно здійснити скидання в «0» усіх портів керування групою.

3.Спочатку потрібно сформувати цифру «5» на молодшому індикаторі. Встановлюємо «1» на відповідних портах: A, C, D, F, G (див. рис.1 та табл.1).

4.Здійснюємо вмикання тільки 7SEG-4: встановлюємо «1» на PORTE3.

5.Виконуємо затримку 10мс (один з найкращих варіантів – 20мс).

6.Вимикаємо 7SEG-4. В результаті виконання операцій 3 – 6 на молодшому семисегментному індикаторі здійснюється одиночне світіння цифри «5».

7.Формування цифри «1» на 7SEG-3. Встановлюємо «1» на відповідних портах: B, C (див. рис.1 та табл.1).

8.Здійснюємо вмикання тільки 7SEG-3: встановлюємо «1» на PORTE2.

9.Виконуємо затримку 10мс (один з найкращих варіантів – 20мс).

10.Вимикаємо 7SEG-3. В результаті виконання операцій 7 – 10 на 3-му семи сегментному індикаторі здійснюється одиночне світіння цифри «1».

11.Циклічне виконання пунктів 3-10.

Примітка. Побітне встановлення виводів портів можна замінити введенням масивів байт. Тобто двійковий код кожного байту масиву дає комбінацію сегментів 7SEG, що відповідає десятковій цифрі (або будь-якому іншому символу). За необхідності виводу цифри достатньо подати відповідний байт масиву на порт. Така заміна виконується швидше, ніж побітне встановлення виводів портів.

Лістинг програми

/*

*AS6_ATMega128.c

*Created: 12.09.2014 16:06:39

*Author: Адміністратор

*/

#define F_CPU 1000000UL

#include <avr/io.h> #include <avr/iom128.h> #include <util/delay.h>

int main(void)

{

char c[2] = { // об’ява масиву з двійковими кодами, що відповідають цифрам на індикаторі //

0b00000110,

0b01101101,

};

//запис логічної «1» в другий біт регістра SFIOR // SFIOR &= ~(1 << 2);

SFIOR &= ~(1 << PUD);

//скидання всіх значень порту Е //

PORTE = 0b00000000;

PORTE = 0x00;

PORTE |= (1 << 7)|(1 << 6);

PORTE |= (1 << PE7)|(1 << PE6);

// налаштування відповідних портів на вхід та вихід // DDRE = 0b00111111;

DDRE = 0x3F;

DDRE |= (1 << 5)|(1 << 4)|(1 << 3)|(1 << 2)|(1 << 1)|(1 << 0);

DDRE |= (1 << DDE5)|(1 << DDE4)|(1 << DDE3)|(1 << DDE2)|(1 << DDE1)|(1 << DDE0);

DDRE &= ~((1 << 7)|(1 << 6));

DDRE &= ~((1 << DDE7)|(1 << DDE6));

PORTD = 0b00000000;

PORTD = 0x00;

DDRD = 0b11111111;

DDRD = 0xFF;

// вимкнення усіх семи сегментних індикаторів //

PORTE |= (1 << DDE3)|(1 << DDE2)|(1 << DDE1)|(1 << DDE0);

//реалізація світіння цифр «5» та «1» на відповідних індикаторах при натисканні кнопки//

while(1)

{

if(!(PINE & (1 << PINE7))){

PORTD = c[1];

PORTE &= ~(1 << PE3); _delay_ms(10);

PORTE |= (1 << PE3); PORTD = c[0];

PORTE &= ~(1 << PE2); _delay_ms(10);

PORTE |= (1 << PE2);

}

}

}

Примітка: рядки програмного коду дубльовані, з метою демонстрації різних способів подання інформації в програмі. Під час написання програми можна обрати будь-який спосіб представлення даних та запису операцій.

Рис.4. Результат симуляції коду програми в середовищі PROTEUS

3.Порядок виконання роботи

1.Створити папку Прізвище_група_ЛР_, в ній:

-створити папку Student_name_LR4 з проектом Atmel Studio 6;

-розмістити звіт.doc.

2.Розробити блок-схему алгоритму виконання програми у відповідності до варіанту (табл.2).

3.Створити новий AVR GCC С++ Executable Project в Atmel Studio 6.

Вибрати мікроконтролер ATmega128.

4.Створити лістинг коду для свого варіанту (табл. 2).

5.Відкомпілювати проект, та виправити помилки, якщо такі

виникнуть.

6.Зібрати відповідну схему в ISIS PROTEUS.

7.Задати програму для виконання мікроконтролерові.

8.Перевірити працездатність проекту, та зробити висновки.

9.Оформити звіт.

Примітка: у звіті повинні бути: тема, мета виконання роботи, індивідуальне завдання, блок-схема алгоритму виконання програми та її

словесний опис, лістинг програми із коментарями, скріншот із результатами симуляції коду програми, висновки.

Таблиця 2. Варіанти виконання завдання

№ Варіанту

Стан кнопки під час

Число, яке необхідно

 

виведення числа

вивести на індикатори

1

Нажата

145

2

Віджата

68

3

Нажата

132

4

Віджата

185

5

Нажата

0.36

6

Віджата

1.253

7

Нажата

1820

8

Віджата

39

9

Нажата

5.62

10

Віджата

3.21

11

Нажата

172

12

Віджата

568

13

Нажата

1594

14

Віджата

1992

15

Нажата

20.03

4. Контрольні питання

1.Як здійснюється ініціалізація робочих змінних та налаштування виводів портів.

2.Як здійснити скидання в «0» усіх портів керування групою?

3.Як в програмному коді реалізуються операції зсуву?

4.Як в програмному коді реалізуються логічні операції?

5.Принцип роботи динамічної схеми підсистеми індикації.

6.Принцип роботи статичної схеми підсистеми індикації.

7.Як встановили логічну «1» на визначених портах мікрокнтролера?

Соседние файлы в папке МК