Съдържание:

Minidot 2 - холографският часовник: 6 стъпки
Minidot 2 - холографският часовник: 6 стъпки

Видео: Minidot 2 - холографският часовник: 6 стъпки

Видео: Minidot 2 - холографският часовник: 6 стъпки
Видео: Работя в Частния музей на богатите и известните. Истории на ужасите. Ужас. 2024, Юли
Anonim
Minidot 2 - Холо часовникът
Minidot 2 - Холо часовникът
Minidot 2 - холочасовникът
Minidot 2 - холочасовникът

Е, може би holoclock е малко неточен …. Той използва холографски дисперсионен филм отпред, за да придаде малко дълбочина. По принцип тази инструкция е актуализация на моя предишен Minidot, намиращ се тук: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/и повторно използване на много код и схема от моя Microdot, разположен тук: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD файлове и кодът Sourceboost е включен в прикачените zip файлове. Защо? Предишният Minidot беше прекалено сложен, от Microdot научих как да правя RTC на PIC, използвайки само 32.768 кристал и не трябваше да използвам специален RTC чип. Също така исках да се отърва от чиповете на дисплея от предишния Minidot. Така че сега има само чип за регулатор на мощността и PIC16F88 … само два чипа. Другите причини за актуализация бяха, че Minidot става малко ненадежден поради отделната платка за превключване и исках меко избледняване между моделите на точки като както и някакъв сензор за околна светлина за затъмняване на дисплея през нощта. Другият Minidot беше с фиксирана яркост и осветяваше стая през нощта. Устройството е конструирано с помощта на софтуерния пакет EagleCad и компилатора Sourceboost. Ще трябва да имате известен опит с електрониката и програмирането на PIC контролери, за да започнете този проект. Моля, обърнете внимание, че това не е инструкция нито за електрониката, нито за PIC програмирането, така че моля, поддържайте въпроси, свързани с дизайна на Miniclock. Вижте инструкциите по -горе или много други инструкции на този сайт за съвети относно използването на EagleCad или програмирането на PIC. Ето го … Minidot 2, The Holoclock …… или Minidot The Next Generation ………….

Стъпка 1: Веригата

Веригата
Веригата
Веригата
Веригата
Веригата
Веригата

Тази схема е много подобна на Microdot. Обърнете внимание, че масивът charlieplex е практически идентичен … само няколко щифта са преместени.

Към схемата Microdot е добавен кристал от 20 Mhz, който ускорява PIC много по -бързо, което позволява сканирането на масива по -бързо и позволява прилагането на алгоритъм за затъмняване. Алгоритъмът за затъмняване беше много важен за задействане на функцията за избледняване на кръстосания модел и околната светлина. Това би било невъзможно с Microdot поради по -бавната тактова честота, тъй като някои цикли на сканиране трябваше да се изразходват за затъмняване. Вижте следващия раздел за описание на функцията за затъмняване. Другите неща, които трябва да се отбележат, са използването на регулатор на зареждаща помпа MCP1252 за захранване на 5V, любимият ми чип в момента. Ако сте модифицирали веригата, можете да използвате обикновен стар 7805 …… Просто имам няколко от тези удобни чипове. Сега преместих превключвателите в предната част, спестявайки свирене в задната част на часовника след прекъсване на захранването, за да нулирате времето и сега всичко е само една печатна платка … няма проблеми с кабелите. Също така трябва да се отбележи включването на LDR. Това се използва в делител на напрежение, който се засича от A/D щифта на PIC. Когато PIC усети, че нивото на околната светлина е ниско (т.е. през нощта), алгоритъмът за затъмняване поддържа масивът charlieplex тъмен за повече цикли, отколкото когато нивото на светлината е високо. Не можах да намеря LDR символ в библиотеката на Eaglecad, затова просто използвах LED символ…..не се заблуждавайте, това е LDR. Вижте действителната картина на печатната платка по -долу. Едно нещо, което трябва да се отбележи, когато използвате многоцветни светодиоди в масив charliplex. Трябва да се уверите, че напрежението на светодиодите е горе -долу същото. Ако не, тогава може да възникнат разсеяни токови пътища и ще светнат множество светодиоди. По този начин използването на светодиоди с 5 мм или по -висока мощност за тази конфигурация няма да работи, тъй като обикновено има голяма разлика между зелените/сините светодиоди и червените/жълтите светодиоди. В този случай използвах 1206 SMD светодиоди и по -специално високоефективни зелено/сини светодиоди. Напреженията напред не бяха проблем тук. Ако искате да използвате комбинация от зелени/сини и червени/жълти светодиоди с по -висока мощност в масив от charlieplex, ще трябва да разделите различните цветове в два charliplex масива. Има многобройни обяснения за charlieplexing, които могат да бъдат потърсени в Гугъл … … Няма да навлизам в подробности тук. Оставям на вас да направите малко проучване. (Натиснете малката икона в ъгъла на снимката по -долу, за да видите по -голяма версия)

Стъпка 2: Алгоритъмът на затъмняване - Чарлиплексирана импулсна широчина на модулация

Алгоритъмът на затъмняване - Чарлиплексирана импулсна широчина на модулация
Алгоритъмът на затъмняване - Чарлиплексирана импулсна широчина на модулация

Както бе споменато по -рано, исках различните шаблони на точки за времето да избледняват гладко, вместо да се прехвърлят от един модел в друг. Вижте видеото за демонстрация. В средата е новият часовник Minidot, вдясно е по -старият Minidot. Забележете колко по -хубав е новият. (Другите дисплеи във фонов режим са моят дисплей за състоянието на суперкомпютъра на Minicray и моята заснета частица Nebulon, която захранва Minicray в магнитно ограничено поле против материя. Вижте тук: https://www.youtube.com/watch? V = bRupDulR4ME за демонстрация на камерата за задържане на мъглявини) Ако погледнете кода, отворете файла display.c. Обърнете внимание, че има четири масива за картографиране на стойностите tris/port за осветяване на всеки конкретен масив и два масива (един повече от кода на Microdot) за определяне кои светодиоди трябва да бъдат осветени за всеки конкретен модел от светодиоди, например:

// LED1 LED2 LED3… unsigned char LEDS_PORTA [31] = {0x10, 0x00, 0x00,… unsigned char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… unsigned char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Unsigned char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];За да светнете LED1 например, трябва да настроите регистрите TRIS TRISA: B = 0xef: 0xfd и регистрите PORT PORTA: B = 0x10: 0x00 и така нататък. Ако изпишете стойностите на трис в двоичен код, ще забележите, че по всяко време има разрешени само два изхода. Всички останали са настроени на Tri-state (оттук регистър TRIS). Това е от основно значение за charlieplexing. Ще забележите също, че единият изход винаги е логичен „1“, а другият винаги е логически „0“….посоката на която се включва в зависимост от това кой светодиод е между тези две изходни линии. Последната стойност в порта/триса arrays е нулева стойност, която изобщо не включва светодиод. В Microdot функцията update_display циклично преминава през друг масив (nLeds ), за да види дали този светодиод трябва да свети. Ако е така, тогава са зададени съответните стойности на трис/порт и светодиодът свети за период от време. В противен случай нулевата стойност беше изпратена до регистрите TRIC/PORT на PIC и никой светодиод не светеше за определен период от време. Когато се направи достатъчно бързо, това даде модел. Останалата част от програмата периодично ще чете стойностите на RTC и ще прави хубав случаен модел в този масив … и така дисплеят се променя. За да се направи функция за затъмняване, това беше леко удължено, така че след като 30 -те светодиода бяха или осветени (или не), тогава допълнителни периоди ще бъдат изразходвани за изпращане на нулеви стойности, ако дисплеят трябваше да бъде затъмнен …..за пълна яркост няма да се изразходват допълнителни периоди. Когато се повтаря, ако има много нулеви периоди на светещите светодиоди, дисплеят ще бъде затъмнен. На практика това е мултиплексирана модулация на импулсната ширина … … или защото хардуерът е конфигуриран в charlieplex arragement, след това charlieplexed pulse width modulation. Втората диаграма по -долу показва основната настройка за това. Наричам това рамка за сканиране. Първите 30 периода до кадъра се използват за преминаване през светодиодите …..и променлив брой допълнителни периоди определят колко ще е тъмен дисплеят. Този цикъл се повтаря. Повече нулеви периоди означава по -малко време за включване на светодиод на кадър (тъй като броят на периодите се увеличава). Обърнете внимание, че вертикалната ос не означава ниво на напрежение. Действителното състояние на щифтовете, преминаващи към светодиодите, варира в зависимост от позицията му в масива charlieplex …..в диаграмата това означава само включване или изключване. Това също означава, че общата дължина на кадъра във времето също се увеличава, като по този начин намалява опресняването процент. Тъй като светодиодите потъмняха, те ще започнат да трептят с други думи. Така че този метод е полезен само до известна степен. За часовника всичко беше наред. Извиква се периодично функция, която чете A/D конвертора на PIC и задава това ниво на яркост. Ако прочетете кода, той също така проверява дали светодиодът, който е най -близкият до LDR, е включен и не прави никаква настройка на нивото, ако е така, това спира дисплея неочаквано да светне при промяна на шаблона. След това функцията за кръстосано избледняване.

Стъпка 3: Алгоритъм на затъмняване - ефект на кръстосано затихване и двойно буфериране

Алгоритъм за затъмняване - ефект на кръстосано затихване и двойно буфериране
Алгоритъм за затъмняване - ефект на кръстосано затихване и двойно буфериране

Преди това преходът между един модел и следващия беше непосредствен. За този часовник исках да покажа един модел, който постепенно намалява яркостта, а следващият модел постепенно се увеличава … т.е. кръстосано избледняване.

Нямаше нужда да имам отделни светодиоди, които да се контролират при отделни нива на яркост, за да направя кръстосано избледняване. Трябваше само първият модел с една яркост, а вторият с ниска яркост. След това за кратък период бих намалил яркостта на първия малко и бих увеличил втория ….. това ще продължи до втория модел като напълно. След това часовникът ще изчака, докато следващият модел трябва да се покаже и ще има друг преход. Затова трябваше да съхраня два модела. Този, който се показва в момента, и вторият модел, който предстои да бъде показан. Те са в масиви nLedsA и nLedsB. (обърнете внимание, че в този случай няма нищо общо с портовете). Това е двойният буфер. Функцията update_display () беше променена, за да премине през осем кадъра и да покаже определен брой кадри от първия масив, след това от другия. Промяната на броя рамки, разпределени за всеки буфер през осемте цикъла, определи колко ярък би бил всеки модел. Когато приключихме с циклирането между буферите, сменихме буферите „дисплей“и „следващ дисплей“, така че функцията за генериране на шаблони след това щеше да пише само в буфера „следващ дисплей“. Диаграмата по -долу показва това с надежда. Трябва да можете да видите, че преходът ще отнеме 64 рамки за сканиране. На снимката малката вложка показва диаграма на рамката за сканиране от предишната страница, умело намалена. Няколко думи за скоростта на повторно обновяване. Всичко това трябва да се направи много бързо. Вече имаме две нива на допълнителни изчисления, едно за затъмняване на околния дисплей и едно за осемте цикъла на кадрите, прекарани в преход между два буфера. По този начин този код трябва да бъде написан в асемблиране, но е достатъчно добър в "C".

Стъпка 4: Конструкция - печатната платка

Конструкция - печатната платка
Конструкция - печатната платка
Конструкция - печатната платка
Конструкция - печатната платка

Това е доста ясно. Само двустранна платка с някои SMD компоненти отгоре. Съжалявам, ако сте човек с дупка, но е много по -лесно да правите SMD проекти … без дупки за пробиване. Трябва да имате стабилна ръка, терморегулираща станция за запояване и много светлина и увеличение, за да улесните нещата.

Единственото нещо, което трябва да се отбележи при изграждането на печатната платка, е включването на конектор за програмиране на PIC. Това се свързва с пиновете на ICSP на PIC и ще ви е необходим ICSP програмист. Отново използвах удобен към моя конектор за боклук. Можете да пропуснете това и просто да запоите проводници към подложките, ако желаете. Като алтернатива, ако имате само програмиран програмист, можете да направите заглавка, която да се включи в гнездото ви и след това да запоите това към ICSP подложките. Ако направите това, изключете Rx и свържете Ry, които са само нулеви омови връзки (използвам само спойка). Това ще изключи останалата част от захранването на веригата от PIC, така че да не пречи на програмирането. Програмист с гнездо просто използва ICSP щифтовете като ICSP програмист, всъщност няма магия. Трябва също да направите това, ако по грешка сте забравили да поставите забавяне в кода преди стартирането на RTC. За 16F88 програмните щифтове на ICSP са същите като пиновете, необходими за кристала 32.768kHz, използван за RTC …… ако външният осцилатор T1 (т.е. RTC) работи, преди ICSP да започне да работи, програмирането ще се провали. Обикновено, ако има нулиране на щифта MCLR и има забавяне, тогава ICSP данните могат да бъдат изпратени до тези пинове и програмирането може да започне правилно. Въпреки това, като изолира захранването към PIC, ICSP програмистът (или сокетираният програмист с заглавка) може да контролира захранването на устройството и да наложи програма. Другите неща, които трябва да се отбележат, са, че кристалните подложки на платката са първоначално проектирани за SMD кристали. Нямах търпение да бъдат доставени, така че кристалът на часовника 32.768kHz беше запоен отгоре, както е показано, а кристалът 20MHz беше прикрепен чрез пробиване на няколко дупки в подложките, пробиване на кристала през дъното и запояване върху Горна част. Можете да видите щифтовете вдясно от PIC16F88.

Стъпка 5: Холографският филм и жилищата

Холографският филм и жилищата
Холографският филм и жилищата
Холографският филм и жилищата
Холографският филм и жилищата
Холографският филм и жилищата
Холографският филм и жилищата

Крайната конструкция е просто поставяне на печатната платка в кутията и след програмиране, залепването й с топло лепило. Три отвора позволяват достъп до микропревключвателите отпред.

Забележителната част от този часовник е използването на холографски дифузьорен филм. Това е специален филм, който имах да лежа, който осигурява приятна дълбочина на устройството. Можете да използвате обикновена проследяваща хартия (в която щях да преместя печатната платка по -близо до предната част) или друг дифузер като тези, използвани в луминесцентни осветителни тела. За да се опитате, единственото нещо, което трябва да направите, е да ви позволи да правите разлика между броя на светещите светодиоди или иначе броенето на точките, за да се определи времето, ще бъде трудно. Използвах холографски дисперсионен материал от Physical Optics Coorporation (www.poc.com) с 30 -градусова кръгова дисперсия, дисплеят за състоянието на суперкомпютъра, показан на друго място в инструкцията, използва филм с елиптична дисперсия 15x60 градуса. Можете да използвате някаква затъмняваща лента, за да скриете лъскавите вътрешности през деня, за да получите по -мистериозен вид. Можете дори да оставите дисплея чист и да оставите хората да видят вътрешностите, както аз. Стойката представляваше два парчета алуминиева „L“шина с малко нарязано отдолу, за да се позволи огъване. Забележка на тези снимки е добавено допълнително осветление, за да можете да видите капаците на дисплея и т.н.

Стъпка 6: Софтуер и потребителски интерфейс

Работата с устройството е много проста, без специални режими на рисуване или крещящи неща. Единственото нещо, което прави, е да показва часа.

За да настроите часа, първо натиснете SW1. Устройството ще мига няколко светодиода няколко пъти и след това 10 -часовата група светодиоди SW3 ще увеличи избраната група SW2 ще премине към следващата група светодиоди, като всеки път мига за кратко всички светодиоди в групата. Кодът е написан за компилатора на Sourceboost 'C' версия 6.70. RTC кодът е във файловете t1rtc.c/h и има функция за прекъсване на таймера T1 на PIC. Таймерът Т1 е настроен да прекъсва на всеки 1 секунда. На всяка секунда променливата за времето се увеличава. Също така таймерът за отметки се отброява всяка секунда заедно с времето. Това се използва за определяне кога да преминете към дисплея. Функцията за прекъсване също използва прекъсването на таймера T0 за опресняване на дисплея, извиквайки функция в display.c Файловете display.h/display.c съдържат функциите за актуализиране на дисплея и показване на времето Файловете control.c/h съдържат функции за задаване на часа и четене на превключвателите Файловете holoclock.c/h са основните контури и инициализация.

Препоръчано: