Сьогодні ми вивчимо, яким чином за допомогою мікроконтролера Atmega8a можна управляти семісегментним світлодіодним індикатором. Проект створимо також, як і зазвичай, назвемо його Test05, видалимо все з main.c і скопіюємо туди вміст однойменного файлу з проекту минулого заняття, також налаштуємо симулятор як програматора. Щоб перевірити, що в проекті все нормально, спробуємо його зібрати. Також як і в минулих заняттях, скопіюємо і перейменуємо файл протеуса, у властивостях контролера там покажемо шлях до прошивці.
Видалимо всі світлодіоди, так як вони будуть нам не потрібні і знайдемо в бібліотеці семисегментний світлодіодний індикатор із загальним анаодом. А з загальним анодом ми візьмемо через те, що вони частіше зустрічаються, а також тому, що він у мене є
Загальний анод ми підключимо до шини харчування. І у нас сегменти будуть світитися тому в тому випадку, коли на відповідній ніжці порту буде низька напруга, а коли високе - не будуть. Ось на цій основі ми і будемо писати наш код. Підключаємо ось так
Ну і перш, ніж писати якийсь код, давайте подивимося, що з себе цей індикатор являє і де і який у нього сегмент знаходиться (прийнято позначати сегменти латинськими літерами)
Тому, для того щоб було легше даними сегментами управляти і виводити за допомогою їх світіння певні цифри або символи, то ми з'єднаємо їх по порядку - a з ніжкою D0. b - з D1 і так далі по порядку і будемо в розумі постійно собі уявляти ось таке ось двійковечисло
PORTD = 0b00000000; // 1 2 3 4 5 6 7 8
Оброблювач кнопки ми чіпати поки не будемо, вона нам можливо ще стане в нагоді і не будемо тому псувати проект.
Додамо наступний код в нескінченний цикл, зробивши можливим відображення нової цифри через 500 мілісекунд, використовуючи функцію затримки
У коді ми бачимо що кожен раз ми заносимо в порт нові значення, відповідні певної комбінації світяться сегментів. Де нуль - там сегмент світиться, де одиниця - немає.
А у нас навпаки - будуть світитися одиниці. Все це досягається зарахунок операції інверсії. З точки зору оптимізації краще зробити все-таки за першим варіантом, але так як нам тут поспішати нікуди, то ми трохи заодно повторимо зайвий раз пройдений матеріал по логічним операціям бо вони нам постійно будуть потрібні.
Зберемо код і перевіримо його спочатку в протеус
Код наш відмінно працює. Давайте тепер подивимося на живому контролері і індикаторі. Для цього я взяв ту ж макетніцу і зібрав все на ній, з'єднавши налагоджування платою. У кожному відділі-взятого індикатора схема терморегулятори своя. У мого вона ось така:
Програматор і індикатори можна придбати тут:
Програматор (продавець надійний) USBASP USBISP 2.0
Семисегментний однорозрядних індикатор червоний із загальним анодом 10 шт