Binary часовник на atmega32 - микроконтролери и технологии
Всичко започна с това, че съм искал да направя някои напълно завършено устройство на микроконтролер AVR. Изборът падна върху двоичен часовник, тъй като Те са лесно да се направи и доста впечатляващ външен вид. И тъй като винаги съм харесвал плазмоид от KDE двоичен часовник, който изглежда така:
Какво е двоичен часовник?
За тези, които не знаят какво двоичен часовник и как да ги идентифицират време да отделям. Binary Clock е часовник, който показва времето в двоичен (или двоичен) брой система, вместо обичайните ни десетична.
Binary часовник може да бъде различен (както, като цяло, и обичайните часове) - с различен брой и разположение на показатели, със или без секунди, с 24-битова или 12-часов формат, и т.н. Реших да се спре на опцията с най-подобен на гореспоменатия плазмоид от KDE:
Часовникът се състои от шест вертикални колони - две колони на часовника, два за минута, и две на втория (от ляво на дясно). Всяка колона е по същество една цифра (т.е. две цифри за часове, минути и секунди).
В четири часа хоризонталната линия, като трябва да бъде в състояние да покаже, числата от нула до девет (поне за най-маловажния бит) и двоичното представяне на девет - 1001 съдържа четири бита (бита). LSB е най-отдолу.
Така че, идеята е ясна, да пристъпи към изпълнение.
Ще започнем с индикатор ( "набиране") - което е набор от светодиоди.
Тъй като хоризонтална часовник 4 и 6, вертикални редове, общият брой на необходимите светодиода - 6 * 4 = 24. В действителност, това е възможно да се управлява по-малък брой светодиоди, тъй като не всички бита ще бъдат използвани - например, значителна цифра от време (най-лявата колона) може да покаже броя на не повече от два дни (най двадесет часов формат), а след това можете да запишете колкото два светодиода. Но аз не съм направил и да поставите всички 24 светодиода, като Исках (в бъдеще) използвайте този часовник за показване на текстови съобщения.
необходими бутони за регулиране на времето. Три от тях: първия бутон превръща режим на настройка и обратно по време на часовника. Вторият бутон, изберете цифра превключва на колоната, в която понастоящем е конфигурирана време. Накрая, трети увеличава времето в избраната колона по един.
Микроконтролерът се използва като ATMega32. Разбира се, не е необходимо да се използва като мощен микроконтролер за такава проста задача, но той вече беше в ръката ми, така че аз го използва.
Схемата и платката
Схемата е съвсем стандартна: микроконтролер, сила, нулиране, конектор за програмист. Чрез TOSC1 и TOSC2 свързан кварцов часовник, от който ще бъде тиктака часовник. Бутони за регулиране на времето спря до захранващото напрежение. Десет изходи светодиоди (колони 6 + 4 линия). На всяка хоризонтална линия е свързан резистор за ограничаване на ток през светодиода.
Печатната платка е превърнал едностранно, но все пак с два джъмпера от другата страна (маркирани в червено), които правят точно достатъчно тънка медна жица.
Това е може би най-безинтересна част. Но, в същото време, тя е тази, която взе най-много време.
Самият случай е направена от дървени дъски, държани заедно с гвоздеи и лепило. След монтажа, на борда е внимателно шлифован, оцветени и открил няколко слоя лак мебели.
Светодиодите са инсталирани в решетка с прегради, изработени от дърво линии чрез използване на мозайката. Във всяка клетка с LED за разсейване на светлината се вкарва парче конвенционален проследяване хартия (който се използва за чертежи или модели).
Към предната част на часове залепени двустранно матирано стъкло. На обратната страна на капака се затваря на винтовете, които се подават от бутона настройка на времето.
Реших да се напише програма на асемблер. Не, защото това е развитието на най-удобен език, но само за образователни цели. Изходният код може да бъде намерен по-долу в архива.
Сканиране се извършва на колоните, т.е. първи път Светодиодите са само първата колона и след второто, и т.н. Това се случва много бързо и окото не разполага с време, за да го забележи, така че изглежда, че всички светодиоди светят едновременно. За да се покаже времеви стойности в колона използва макро DISPLAY_COLUMN. Превключването се извършва от колона Timer0 таймер.
промяна на времето се осъществява веднъж на второ прекъсване таймер / Counter2 таймер преливник а. Тъй като честотата равна на кварцови 32768Gts на делител, и таймер е настроен на 128, ще се случи преливане байт таймер веднъж в секунда (32768 / (128 * 256) = 1). което е много удобно.
Обработка клавиши се случва в процедурите за трансфер button_stop_pressed часа в режим на настройка и бутони на button_set_pressed за бутона за настройка на време и button_switch_pressed за бутон превключване колона. Моля, имайте предвид, че процедурата button_stop_pressed текущото време се съхранява в EEPROM. Това се прави, така че най-малко време не се нулира, ако искате да, например, за да превключите на часовника към друг контакт (когато часът се чете от EEPROM).
Всички по-големи "работа", като например - проучване състоянието на бутоните, изключете време на активната колона сканиране и изход се появява в основния. Инициализация се извършва при рестартирането.