Передісторія (кому не цікаво, можна переходити до суті трошки нижче)

Одного сонячного ранку я прокинувся з відчуття, що цьому світу не вистачає ще трошки магії. Тому, після недовгих роздумів, було вирішено врівноважити первинний баланс сил за допомогою проекту, що носить горду назву – «3D куб».

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

Для початку, зі старих запасів було вийнято жменю світлодіодів. Після підрахунку виявилось, що їх було лише 80 штук. Наступним, що було піймано в загальному хаосі речей, була коробка з мікросхемами. Швидко їх посортувавши було обрано найкорисніші. Ними були декілька мікроконтролерів Attiny2313, два мк Attiny13, одна Atmega8 і пара регістрів зсуву 74HC595. Враховуючи кількість знайдених світлодіодів, максимальний розмір куба (якщо звісно це буде куб) складатиме 4х4х4, тобто 64 світлодіода. Тому я вирішив зупинити свій вибір на Attiny2313 і регістрах зсуву, через доступність і низьку вартість цих деталей, а також простоту повторення схеми.

А тепер по суті

3D куб працює за рахунок того, що людське око не правильно сприймає швидку зміну зображення, створюючи ілюзію рухомої картинки. Якщо бути більш точним, то все, що змінює свій вигляд частіше ніж 24 рази на секунду буде створювати таку ілюзію.

Отже, якщо зібрати куб, як показано на зображенні нижче, тобто 16 колонок по 4 світлодіоди, то отримаємо куб, в якому шари з’єднані горизонтально одним з виводів (наприклад анодом) кожного з 16 світлодіодів у шарі. Колонки, в свою чергу, з’єднані по 4 світлодіоди катодом. Кожна колонка підключена до одного з 16 виходів двох регістрів зсуву. Шари напряму з’єднані з портами мк. Перевагою такої схеми є отримання доступу одразу до всіх світлодіодів на одному шарі, тобто, щоб відобразити зображення необхідно відобразити результат почергово лише для 4 шарів.

 

Для захисту світлодіодів і для запобіганню падінню напруги на виходах регістрів, перед кожною колонкою було додано резистор опором 100 Ом. Резистор можна замінити на будь-який номіналом від 50 до 500 Ом.

Для забезпечення стабільності роботи від зовнішнього джерела живлення, до схеми було додано стабілізатор напругу зібраний на мікросхемі 7805L.

В результаті повний список елементів має вигляд:

  • Attiny2313
  • 74HC595
  • 64 світлодіода
  • 7805L
  • Конденсатор 100 pF
  • Конденсатор 300 pF

Загальна вартість всіх деталей склала близько 2-3$.

 

Зборка

Зборка розпочинається з перевірки кожного з 64 світлодіодів на працездатність.

Далі необхідно спаяти 4 шари по 16. Для полегшення цього процесу можна скачати макет звідси.

Всю зборку можна переглянути на відео внизу.

Потім спаюємо 4 шари один з одним. Повинен утворитись куб як на фото.

Наступним кроком є виготовлення друкованої плати. Плата була розроблена в програмі Proteus 8. PDF версію плати можна скачати за посиланням звідси, або разом з іншими файлами внизу сторінки.

Програмна частина

Програмна частина спочатку писалася на С, проте як виявилося після компіляції дана програма лише з одним ефектом зайняла >1700 байт з 2048 можливих. Тому довелось згадати основи темної магії, пригадати рухи у танці з бубоном і з допомогою якоїсь матері переписати програму на асемблер. Результатом цього стала програма з 2 ефектами і розміром вихідного коду приблизно у 700 байт. Вихідні коди доступні за посиланням в кінці. Принцип роботи програми на асемблері такий самий як і у програми на С.

Перед тим, як описати принцип роботи програми, необхідно зрозуміти як працює регістр зсуву.

На вхід даних DS регістру зсуву послідовно побітово подається 1 байт, починаючи з біта, що буде встановлено на останньому виводі. Початок передачі починається в момент коли на вхід ST_CP подається низький рівень. Дані повинні бути синхронізовані з синхроімпульсами що надходять на вхід SH_CP. Все це краще видно з осцилограми

Найвищий графік показує вхід синхроімпульсів. Середній графік – вхід даних. Як видно з графіку на регістр було передано число 63903, що в двійковій системі рівне значенню 1111100110011111. І на виходах двох послідовно з’єднаних регістрів зсуву встановилось таке значення

 

 

8+

Користувачі, що подякували за статтю:

  • avatar
  • avatar