Теми от: Януари '12
Цветарство по програмистски, v. 2.0
След като предходният опит да накараме коледната звезда да цъфне (с груба сила) завърши с неуспех, този път ще опитаме по-нежничко.
Самото цвете бе обект на непрекъснат тормоз (както се вижда), но не само от мен, а и от майка ми, която де що види, че гадинката малко от малко е пуснала листенце/филизче над 20 сантиметра височина от дъното на саксията, го минаваше набързо с ножицата. Така де, бунтовете трябва да се потушават в зародиш.
Това лято, обаче, оставих цветето да си расте без ограничения, то се разлисти, разхубави, набъбна, с една дума - красавица :)
Респективно, за Нещото тази година щеше да е необходим значително по-голям кашон. Сменях и квартири, а в новата нямаше къде да закача кранчето.
Последва реализация на една друга идея: да държим цветето на тъмно, и да му светим по 10 часа на денонощие.
1. Първо изследвах как е най-подходящо да се осветява фотосинтезираща гад. НАСА са правили подробни изследвания за това (примерно), като тяхната идея да ползват LED-ове е основно откъм ефективност и ресурси. LED-овете не греят, респективно растението не изпарява много вода така, отдено са с високо КПД.
В този патент пък хората са изследвали, и препоръчват да се ползват червени, оранжеви и сини диоди, в отношение 12:6:1.
2. Накупих си голямо количесто ultra-bright LED-ове. Сметката колко диода ми трябват се оказа учудващо тежка и е удоволствие да си изпържиш мозъка със всичките фотометрични единици: лумени, луксове, кандели, ватове на стерадиан. В крайна сметка на платката разположих 17 червени, 8 жълти и два сини. Целта беше да докарам около 2000 лукса пиково осветление, което се получи (за фотоизмервател ползвах dSLR :D)
3. Задължителният breadboard, по време на прототипирането:
.
4. И вече прехвърлено върху реална платка:
5. От различни графики с измерена яркост на слънцето по денонощие се ориентирах, че светлината по време на изгрев се увеличава над 1000 пъти (по-скоро към 10000). Чрез ШИМ докарах гладко "изгряване" на светилото ми (вижте клипчето долу). В крайна сметка, докарвам контраст 1000:1, като началото на изгрева е малко бъгаво. Освен това, жълтите диоди ги паля 20 минути след червените, сините - час по-късно, уж там да се симулира различния цвят на слънцето по изгрев/залез.
6. Канибализирах една стара лампа:
малко болтчета и пластинки от Meccano:
И така имаме тестов блинк върху моята странна "лампа"
.
7. Отчитането на времето се прави с един часовникарски чип - DS1302 - и кварцов резонатор. Времената на изгрев и залез са коректни за цялата година, и отговарят на истинските изгрев/залез в Сан Антонио, Тексас (ето един целогодишен калкулатор). Тъй като PIC-а малко трудно се оправя с floating point, синуси, косинуси и т.н., времената просто съм ги забил в статичен масив, в делта-компресиран вид.
DS1302 поддържа времето даже и след изгасване на тока, като поддържането на CMOS-а в тея случаи принципно се прави с батерия, но аз избрах просто да ръгна един голям електролитен кондензатор, който DS1302-то да пълни при наличие на ток:
Учудващо, оказва се, че с 4700µF държи точно време повече от денонощие.
8. Сложих коледната звезда на относително тъмничко място, "лампата" на 30 сантиметра отгоре й (за да имаме достатъчно разпръскване на снопа светлина - тези диоди са доста тесен лъч). Ръгаме в контакта и си имаме целодневно зарево в стаята :)
.
.
Ето го и на клипче: Youtube.
Цялото нещо харчи около ват. Диодите не греят въобще (тествано с пръстомер).
Това вече върви около месец и половина. Коледната звезда все още не почервенява.
Ако растенията можеха да се самоубиват, това отдавна да си е направило харакири :)
Някои неща, които научих:
• Цял embedded проект на C. За този проект не написах нито ред асемблер, всичко на C, ползвайки Hi-tech компилатора. Вече не мога да кажа за какво е отишъл всеки отделен байт от паметта, но след като паметта стига - проблем няма¹.
• Комуникация с външен хардуер, в случая DS1302-ката. Може да се каже, че за пръв път съм написал собствен драйвер. Нищо особено, но доста неща, свързани с комуникацията между чипове, ми се изясниха.
• Всичко, свързано с осветлението: луксове, лумени, кандели и имат ли те почва у нас.
• Постоянна памет (EEPROM) в такива проекти. Благодарение на нея реализирах 0-бутонен потребителски интерфейс. Исках уредът да има два режима - стандартен и тестов, като в последния да мига със всичките диоди, малко като коледни лампички. Това, обаче, би изисквало или DIP switch, или някакъв бутон на платката. Е, има и по-хитър начин да предадем нашето желание на уреда, боравейки с ключа On/Off:
1. Уредът се включва (On)
2. Веднага се изключва обратно (Off)
3. Включва се наново. Ако времето между 1) и 2) е под секунда, влизаме в тестов режим, иначе - в нормален. Тук ни върши работа постоянната памет. Първата работа на софтуера, при пускане, е да вдигне един флаг (в EEPROM-а), а секунда по-късно (ако все още не са ни изключили), флагът се сваля обратно. При следващото пускане можем да видим какво е състоянието на флага, и така да определим в кой режим да работим.
• Компилаторът е там, за да се ползва. Преди бях голям фен на пълненето на сорс-файловете със симпатични масивчета от магически числа, хитроумно пресметнати отвънка с някакво скриптче. Hardcoding на макс. Постепенно се преориентирах към вкарване на повече от работата вътре в C/C++ кода, когато е възможно, тъй като компилаторът все пак може да сметне доста неща сам. И вместо магически числа - код, макроси или подобни, които стигат до същите магически числа. Например: DS1302-ката се нуждае от ток, за да си помни датата и часа. При първоначално пускане, или след преместване между платките, тя е "неинициализирана" и си мисли, че е първи Януари, 2000г. Е, бих могъл просто да си направя отделен билд за тези случаи, и да въведа в C кода текущата дата и час, и след като ги налея веднъж в DS1302, да си продължа, разчитайки на нея. Е, вместо хардкоднати дата/час, тези неща могат да се вземат от "променливите" __DATE__ и __TIME__, които компилаторът любезно ни предоставя.
• MPLabX под Linux. Не е най-великото IDE на земята, но върши работа.
---
¹ Това мислене, разбира се, е много, много, *много* грешно. Като нищо утре ще пропиша на C#
Публикувано в категория Hardware -- 30 Jan 2012, 03:53, 1 коментар -- View in English
Познай рендера
Покрай курса по 3Д графика, изпитвам рядкото щастие/проклятие да пиша цял проект наново от нулата. Познато ли ви е? Много програмисти, в даден момент от живота си, са искали да зарежат бозата, с която се мъчат в момента, и да пренапишат начисто цялото проклето нещо, този път "както трябва". Някои даже го и правят. Макар че, според признатите гурута на софтуерния мениджмънт, това е най-голямата стратегическа грешка, която можеш да направиш в един голям проект.
Е, за малки проекти със сигурност не е така, и този път учебния рейтрейсър се получи осезаемо по-добре. Днеска рекох даже да сверя резултатите от глобално осветление с path tracing спрямо V-Ray. Сцената е взета от SmallPT.
Едното е с V-Ray, другото е с учебния рейтрейсър. Можете ли да познаете кое кое е?
Покрай smallpt попаднах и на нещо интересно, което ме накара да се замисля, колко яка сфера е графичното програмиране.
Да речем, пишеш файлови системи, и си бъгнал нещо. Системата замира с kernel panic, следва reset и се надяваш да си оправиш данните, да не се налага пълен реформат на тестовия дял. А, и все още имаш да фиксваш бъг.
Или, пишеш web софтуер, и си бъгнал нещо. 3 месеца по-късно успяват да намерят експлойт заради бъга ти, сайтът ти е станал розов и мигащ, затрити са десетки часове въведени данни, за които няма бекъп. А, и все още имаш да фиксваш бъг.
Или, (очакваше го, нали?), пишеш графичен софтуер, и правиш някакъв рендер, който просто ренди горните картинки, само че по-бързо. И си бъгнал нещо. В резултат, се получило нещо такова:
Яко, а? И даже можеш да го публикуваш така. Както си е с бъговете.
Какво друго: тия дни довършвам AGG 0.3.0, надявам се до месец да пусна нова версия. След това подхващам ucbench, на който планирам да вкарам OpenCL поддръжка (и явно ще има доста пипане по сайта).
Публикувано в категория Програмиране -- 7 Jan 2012, 02:20, 0 коментара -- View in English
AGG и GPL
Както се оказа, на нечия умна глава й дошла идеята да си присвои кода на AGG-то, да му турне copy-protection код и да го продава по $30 парчето. GPL е за загубеняците, които си нямат друга работа. Дами и господа, представям ви: SoftOrbits's Html Web Gallery Creator.
За пример: Галерийка с моята програма, и с "техния" продукт.
Фирмата е изключително потайна, не пише никакви контакти и детайли къде се помещават и оперират. С помощта на един добър човек вече пратих Cease and Desist писмо на руснака, сега чакаме развитие.
Публикувано в категория Open source -- 7 Jan 2012, 01:05, 0 коментара -- View in English