Mündəricat:

Minidot 2 - Holoclock: 6 addım
Minidot 2 - Holoclock: 6 addım

Video: Minidot 2 - Holoclock: 6 addım

Video: Minidot 2 - Holoclock: 6 addım
Video: Arduino ilə Holo Clock hazırlanması | Making Holo Clock with Arduino 2024, Iyul
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Bəlkə də holoclock bir az qeyri -dəqiqdir …. bir az dərinlik vermək üçün ön tərəfdəki holografik dispersiya filmindən istifadə edir. Əsasən bu təlimat burada yerləşən əvvəlki Minidot -un bir yeniləməsidir: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/və burada yerləşən Microdot-dan bir çox kod və dövrə istifadə edərək: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD faylları və Sourceboost kodu əlavə edilmiş zip fayllarına daxil edilmişdir. Niyə? Əvvəlki Minidot həddindən artıq mürəkkəb idi, Microdotdan öyrəndim ki, yalnız 32.768 kristal istifadə edərək PIC üzərində RTC etməyi öyrəndim və xüsusi bir RTC çipindən istifadə etməyə ehtiyac yox idi. Həm də əvvəlki Minidotdakı ekran çiplərindən qurtulmaq istədim. Beləliklə, indi yalnız bir güc tənzimləyici çipi və bir PIC16F88 var … yalnız iki çip. Yeniləmənin digər səbəbləri, Minidot-un ayrı keçid lövhəsi səbəbindən bir az etibarsız olması və nöqtə nümunələri arasında yumşaq bir şəkildə solğunlaşmaq istəməyim idi. Gecələr ekranı söndürmək üçün bir növ ətraf işıq sensoru. Digər Minidot, parlaqlığı sabitləşdirdi və gecəni bir otağı işıqlandırdı. Cihaz EagleCad proqram paketi və Sourceboost kompilyatorunun köməyi ilə hazırlanmışdır. Bu layihəyə başlamaq üçün elektronika və proqramlaşdırma PIC nəzarətçiləri ilə müəyyən təcrübəyə malik olmalısınız. Nəzərə alın ki, bu nə elektronika, nə də PIC proqramlaşdırma ilə bağlı təlimat deyil, buna görə də Miniclock dizaynı ilə bağlı suallarınızı saxlayın. EagleCad və ya PIC proqramlaşdırma haqqında məsləhət almaq üçün yuxarıdakı təlimatlara və ya bu saytdakı bir çox digər təlimatlara baxın. Budur burada ….. Minidot 2, Holoclock …… və ya Minidot Nəsil ………….

Addım 1: Dövrə

Dövrə
Dövrə
Dövrə
Dövrə
Dövrə
Dövrə

Bu dövrə Microdot -a çox bənzəyir. Qeyd edək ki, charlieplex massivi demək olar ki, eynidir … yalnız bir neçə sancaq köçürülmüşdür.

PIC -ni daha sürətli ölçmək üçün Microdot sxeminə 20Mhz bir kristal əlavə edildi, bu, serialın daha sürətli skan edilməsinə və karartma alqoritminin tətbiqinə imkan verir. Qaranlıq alqoritm, çarpaz naxışın solması və ətraf işıq funksiyasının işləməsi üçün çox vacib idi. Bəzi tarama dövrlərinin qaralmasına sərf edilməsi lazım olduğu üçün daha yavaş saat sürəti səbəbindən Microdot ilə bu mümkün olmazdı. Karartma funksiyasının təsviri üçün növbəti hissəyə baxın. Diqqət etməli olduğunuz digər şeylər, hazırda ən çox sevdiyim çip olan 5V -u təchiz etmək üçün MCP1252 şarj nasos tənzimləyicisinin istifadəsidir. Dövrəni dəyişdirsəniz, düz bir köhnə 7805 istifadə edə bilərsiniz …… Ətrafımda asılmış bu lazımlı çiplərdən bir neçəsi var. İndi açarları ön tərəfə köçürdüm, enerjini kəsdikdən sonra vaxtı sıfırlamaq üçün saatın arxa hissəsində saxlayıram və indi hər şey yalnız bir PCB -dir … kabel problemi yoxdur. Bir LDR -nin daxil olması da diqqət çəkir. Bu, PIC üzərindəki A/D pimi ilə hiss edilən bir gərginlik bölücüdə istifadə olunur. PIC ətrafdakı işıq səviyyəsinin aşağı olduğunu hiss etdikdə (yəni gecə vaxtı) qaralma alqoritmi, charlieplex massivini işıq səviyyəsinin yüksək olduğu vaxtdan daha çox dövrə qaranlıq saxlayır. Eaglecad kitabxanasında bir LDR simvolu tapa bilmədim, buna görə sadəcə bir LED simvolu istifadə etdim…. LDR olduğuna aldanmayın. Aşağıdakı PCB şəklinə baxın. Bir charliplex massivində çox rəngli LED-lərdən istifadə edərkən diqqət etməli olduğunuz bir şey. LED -lərin irəli gərginliyinin az -çox eyni olduğundan əmin olmalısınız. Əks təqdirdə, cərəyan yolları yarana bilər və birdən çox LED yanacaq. Bu konfiqurasiya üçün 5 mm və ya daha yüksək gücə malik LED -lərin istifadəsi işləməyəcək, çünki adətən yaşıl/mavi LED -lərlə qırmızı/sarı LEDlər arasında kifayət qədər fərq var. Bu vəziyyətdə 1206 SMD LED və xüsusilə yüksək səmərəli yaşıl/mavi LEDlərdən istifadə etdim. İrəli gərginliklər burada bir problem deyildi. Bir charlieplex serialında yaşıl/mavi və qırmızı/sarı daha güclü LED -lərin qarışığından istifadə etmək istəsəniz, fərqli rəngləri iki charliplex massivinə ayırmaq lazımdır. Google -dan istifadə edilə bilən çoxlu charlieplexing izahatları var …. Burada detallara girməyəcəyəm. Bir az araşdırma aparmağı sizə buraxacağam. (Daha böyük bir versiyanı görmək üçün aşağıdakı şəklin küncündəki kiçik 'i' işarəsinə basın)

Addım 2: Qaranlıq Alqoritmi - Charliplexed Pulse Width Modulation

Qaranlıq Alqoritmi - Charliplexed Pulse Width Modulation
Qaranlıq Alqoritmi - Charliplexed Pulse Width Modulation

Daha əvvəl də qeyd edildiyi kimi, bir nöqtədən digərinə sarsılmaqdansa, zaman üçün fərqli nöqtə nümunələrinin hamar bir şəkildə sönməsini istəyirdim. Bir nümayiş üçün videoya baxın. Ortada yeni Minidot saatı, sağda köhnə Minidot var. Yenisinin nə qədər gözəl olduğuna diqqət yetirin. (Arxa plandakı digər ekranlar, Minicray superkompüter status ekranım və Minicray əleyhinə bir maqnit həbsxanasında güc verən Nebulon hissəciyimdir. Bura baxın: https://www.youtube.com/watch? V = bRupDulR4ME bir nümayiş üçün koda baxırsınızsa, display.c faylını açın. Qeyd edək ki, hər hansı bir konkret massivi işıqlandırmaq üçün tris/port dəyərlərinin xəritələndirilməsi üçün dörd sıra və hər hansı bir LEDs.eg modeli üçün hansı LED -lərin işıqlandırılması lazım olduğunu müəyyən etmək üçün iki sıra (Microdot kodundan çox) var:

// LED1 LED2 LED3… işarəsiz simvol LEDS_PORTA [31] = {0x10, 0x00, 0x00,… işarəsiz simvol LEDS_TRISA [31] = {0xef, 0xff, 0xff,… işarəsiz simvol LEDS_PORTB [31] = {0x00, 0x02, 0x04, … İmzasız char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… imzasız char nLedsA [30]; işarəsiz char nLedsB [30];Məsələn, LED1 -i yandırmaq üçün TRIS registrlərini təyin etməlisiniz: TRISA: B = 0xef: 0xfd və PORT registrləri PORTA: B = 0x10: 0x00 və s. Tris dəyərlərini ikili olaraq yazsanız, bir anda yalnız iki çıxışın aktiv olduğunu qeyd edəcəksiniz. Qalanların hamısı Tri-dövlətə qurulmuşdur (buna görə TRIS reyestri). Bu charlieplexing üçün əsasdır. Həm də qeyd edəcəksiniz ki, bir çıxış həmişə məntiqi '1', digəri isə hər zaman məntiqi '0'… arrays, heç bir LED açmamaq üçün sıfır dəyərdir. Microdot -da, xüsusi LED -in işıqlandırılıb -işıqlandırılmayacağını görmək üçün update_display funksiyası davamlı olaraq başqa bir massivdə (nLeds ) dövr edir. Belə olsaydı, müvafiq tris/port dəyərləri təyin olundu və LED bir müddət işıqlandı. Əks halda null dəyər PICs TRIS/PORT qeydlərinə göndərildi və bir müddət ərzində heç bir LED işıqlandırılmadı. Kifayət qədər tez edildikdə bu bir nümunə verdi. Proqramın qalan hissələri vaxtaşırı olaraq RTC dəyərlərini oxuyur və o cərgədə gözəl bir təsadüfi nümunə düzəldirdi …. yox) sonra ekranın qaralması üçün null dəyərlərin göndərilməsi üçün əlavə dövrlər xərclənəcəkdi …. tam parlaqlıq üçün heç bir əlavə müddət sərf edilməyəcəkdi. İşıqlandırılmış LED -lərdə çoxlu boş nöqtələr olsaydı, ekran zəif olardı. Əslində bu çoxlu impuls genişliyi modulyasiyadır …. və ya cihaz bir charlieplex aranjımanında qurulduğuna görə, sonra pulli genişlik modulyasiyasına charlieplexed. Aşağıdakı ikinci diaqram bunun üçün əsas quruluşu göstərir. Buna tarama çərçivəsi deyirəm. Çərçivənin ilk 30 dövrü LED -lərdən keçmək üçün istifadə olunur …. və dəyişkən sayda əlavə dövrlər ekranın nə qədər qaranlıq olacağını təyin edir. Bu dövr təkrarlanır. Daha çox sıfır dövrü, bir LED -in hər çərçivədə olması üçün daha az vaxt deməkdir (dövrlərin sayı artdığı üçün). Diqqət yetirin ki, şaquli ox gərginlik səviyyəsi demək deyil. LED -lərə gedən sancaqların həqiqi vəziyyəti, charlieplex sırasındakı mövqeyindən asılı olaraq dəyişir …… yalnız açmaq və ya söndürmək deməkdir. dərəcəsi. LEDlər söndükcə başqa sözlə yanıb -sönməyə başlayacaqlar. Beləliklə, bu üsul yalnız müəyyən dərəcədə faydalıdır. Saat üçün, OK idi. PIC -də A/D çeviricisini oxuyan və bu parlaqlıq səviyyəsini təyin edən bir funksiya aralıq olaraq çağırılır. Kodu oxuyursanız, LDR -yə ən yaxın olan LED -in yandığını yoxlayır və bu halda heç bir səviyyə ayarı etmirsə, bu model dəyişdikdə ekranın gözlənilmədən işıqlanmasını dayandırır.

Addım 3: Qaranlıq Alqoritmi - Çapraz Fade Təsiri və Cüt Buferləmə

Qaranlıq Alqoritmi - Çapraz Fade Təsiri və Cüt Buferləmə
Qaranlıq Alqoritmi - Çapraz Fade Təsiri və Cüt Buferləmə

Bir nümunə ilə digərinə keçid əvvəllər dərhal idi. Bu saat üçün bir modelin parlaqlığının tədricən azaldığını və sonrakı nümunənin tədricən artdığını göstərmək istədim … yəni çarpaz solğunluq.

Çarpaz solma etmək üçün ayrı -ayrı parlaqlıq səviyyələrində idarə olunmaq üçün fərdi LED -lərə ehtiyacım yox idi. Birinci modelə bir parlaqlıqda, ikincisi isə aşağı parlaqlığa ehtiyac var idi. Sonra qısa müddət ərzində birincinin parlaqlığını bir qədər azaldar, ikincisini isə artırardım ….. bu, ikinci modelə qədər davam edəcək. Sonra saat növbəti nümunənin göstərilməsini gözləyəcək və başqa bir keçid olacaq. Beləliklə, iki naxış saxlamalı oldum. Hal -hazırda nümayiş olunan və nümayiş olunmaq üzrə olan ikinci nümunə. Bunlar nLedsA və nLedsB dizilərindədir. (bu vəziyyətdə limanlar ilə heç bir əlaqəsi yoxdur). Bu ikiqat tampondur. Update_display () funksiyası səkkiz çərçivədən keçmək və əvvəlcə bir sıra, sonra digərində bir çox çərçivə göstərmək üçün dəyişdirildi. Səkkiz dövr ərzində hər bir tampona ayrılan çərçivə sayının dəyişdirilməsi, hər bir nümunənin nə qədər parlaq olacağını təyin etdi. Tamponlar arasında velosiped sürməyi bitirdikdən sonra 'ekran' və 'növbəti ekran' tamponlarını dəyişdirdik, buna görə nümunə yaradan funksiya yalnız 'növbəti ekran' tamponuna yazılacaqdır. Aşağıdakı diaqram bunu ümidlə göstərir. Keçidin 64 tarama çərçivəsi çəkəcəyini görə bilməlisiniz. Şəkildə, kiçik hissə, əvvəlki səhifənin bədii şəkildə kiçildilmiş tarama çərçivəsinin diaqramını göstərir. Yenidən təzələnmə dərəcəsi haqqında bir söz. Bütün bunları çox tez etmək lazımdır. İndi iki tampon arasında keçid etmək üçün xərclənən bir mühitin ekran qaranlığı və səkkiz çərçivə dövrü üçün iki əlavə hesablama səviyyəsinə sahibik. Beləliklə, bu kod montajda yazılmalıdır, ancaq 'C' hərfində kifayət qədər yaxşıdır.

Addım 4: Tikinti - PCB

Tikinti - PCB
Tikinti - PCB
Tikinti - PCB
Tikinti - PCB

Bu olduqca sadədir. Üst tərəfində bəzi SMD komponentləri olan yalnız iki tərəfli bir PCB. Üzr istəyiriksə, SMD layihələri etmək daha asandır …. İşinizi asanlaşdırmaq üçün sabit bir əliniz, temperatur nəzarətli bir lehimləmə stansiyası və bol işıq və böyüdücü olmalıdır.

PCB -nin qurulmasında diqqət çəkən yeganə şey, PIC -ni proqramlaşdırmaq üçün bir konnektorun daxil edilməsidir. Bu, PIC üzərindəki ICSP pinlərinə bağlanır və bir ICSP proqramçısına ehtiyacınız olacaq. Yenə junkbox bağlayıcım üçün lazımlı bir şey istifadə etdim. İstəmirsinizsə, bunu buraxa bilərsiniz və sadəcə telləri yastiqlərə lehimləyə bilərsiniz. Alternativ olaraq, yalnız yuvalı bir proqramçınız varsa, yuvanıza daxil olan bir başlıq düzəldə bilərsiniz və sonra onu ICSP yastiqlərinə lehimləyə bilərsiniz. Bunu etsəniz, Rx -i ayırın və sıfır ohm bağlantıları olan Ry -ni bağlayın (yalnız bir lehim çubuğu istifadə edirəm). Bu, dövrə gücünün qalan hissəsini PIC -dən ayıracaq, buna görə də proqramlaşdırmaya mane olmur. Yuvalı bir proqramçı, yalnız bir ICSP proqramçısı kimi ICSP pinlərindən istifadə edir, həqiqətən heç bir sehr yoxdur. Səhvən RTC başlamazdan əvvəl kodu gecikdirməyi unutmusunuzsa bunu da etməlisiniz. 16F88 üçün ICSP proqramlaşdırma pinləri, RTC üçün istifadə olunan 32.768kHz kristal üçün lazım olan sancaqlar ilə eynidir …… əgər T1 xarici osilator (yəni RTC) ICSP işə başlamazdan əvvəl işləyirsə, proqramlaşdırma uğursuz olacaq. Normalda MCLR pinində sıfırlama və gecikmə varsa, ICSP məlumatları bu pinlərə göndərilə bilər və proqramlaşdırma düzgün başlaya bilər. Bununla birlikdə, PIC -ə güc ayıraraq ICSP proqramçısı (və ya başlığı olan yuvalı proqramçı) cihazın gücünü idarə edə və proqramı məcbur edə bilər. Qeyd etmək lazım olan digər şeylər, PCB üzərindəki kristal yastiqciklərin əvvəlcə SMD kristalları üçün nəzərdə tutulmuş olmasıdır. Bəzilərinin çatdırılmasını gözləyə bilmədim, buna görə də 32.768kHz saat kristalının yuxarıda göstərildiyi kimi lehim olundu və 20MHz kristal yastiqciqlərdə bir neçə deşik açaraq kristalın altından içəri keçərək lehimlə bağlandı. üst PIC16F88 -in sağ tərəfindəki sancaqları görə bilərsiniz.

Addım 5: Holografik Film və Mənzil

Holografik Film və Mənzil
Holografik Film və Mənzil
Holografik Film və Mənzil
Holografik Film və Mənzil
Holografik Film və Mənzil
Holografik Film və Mənzil

Son tikinti, PCB -ni çantaya qoymaq və proqramlaşdırıldıqdan sonra onu isti yapışqan ilə yapışdırmaqdır. Üç deşik, mikro açarlara ön tərəfdən giriş imkanı verir.

Bu saatın diqqətəlayiq hissəsi holoqrafik diffuzor filmin istifadəsidir. Ətrafımda yatdığım, cihaza gözəl bir dərinlik verən xüsusi bir filmdir. Düz bir izləmə kağızı (PCB -ni önə yaxınlaşdıracağım) və ya floresan işıq qurğularında istifadə edilənlər kimi başqa bir yayıcı istifadə edə bilərsiniz. Təcrübə, etməli olduğu tək şey, işıqlı LEDlərin sayını fərqləndirməyə imkan verməkdir, yoxsa nöqtələrin sayılmasının çətin olacağını söyləməkdir. 30 dərəcə dairəvi dispersiyası olan Fiziki Optika Birliyindən (www.poc.com) holoqrafik dispersiya materialından istifadə etdim, 15x60 dərəcə elliptik dispersiyası olan başqa bir yerdə göstərilmiş super kompüterin vəziyyət göstəricisi. Daha əsrarəngiz bir görünüş əldə etmək üçün gündüz saatlarında parlaq daxili hissələri gizlətmək üçün bir az qaralma lentindən istifadə edə bilərsiniz. Hətta ekranı aydın buraxa və insanlara daxili hissələri mənim kimi görməsinə icazə verə bilərsiniz. Stend, əyilməyə icazə vermək üçün alt hissəsində bir qədər kəsilmiş iki bit alüminium 'L' çubuğu idi. Bu şəkillərə əlavə işıqlandırma əlavə olunduğunu görə bilərsiniz, belə ki, ekran örtüklərini və s. Görə bilərsiniz Normal qonaq otağının işıqlandırılmasında, LED -lər hətta gündüz işığında da daha çox üstünlük təşkil edir.

Addım 6: Proqram təminatı və istifadəçi interfeysi

Cihazın işləməsi çox sadədir, heç bir xüsusi naxış rejimi və ya parlaq əşyalar yoxdur. Etdiyi tək şey vaxtı göstərməkdir.

Vaxtı təyin etmək üçün əvvəlcə SW1 düyməsini basın. Cihaz bütün LED -ləri bir neçə dəfə yanıb -sönəcək və SW3 LED -lərin 10s saatlıq qrupu, seçilmiş qrup SW2 -ni artıraraq növbəti LED qrupuna keçəcək və hər dəfə qrupdakı bütün LEDləri qısa müddətə yanıb -sönəcək. Kod, Sourceboost 'C' kompilyatoru 6.70 versiyası üçün yazılmışdır. RTC kodu t1rtc.c/h fayllarındadır və PIC -in T1 taymerində kəsmə funksiyasına malikdir. T1 taymeri hər 1 saniyədə bir fasilə verməyə qurulmuşdur. Hər saniyədə, zamanın dəyişəni artırılır. Həm də vaxtla birlikdə hər saniyə geri sayılır. Bu, ekranın nə vaxt keçəcəyini təyin etmək üçün istifadə olunur. Kəsmə funksiyası eyni zamanda ekranı yeniləmək üçün T0 timer fasiləsindən istifadə edir, display.c faylları display.h/display.c faylları ekranı yeniləmək və vaxtı göstərmək funksiyalarını ehtiva edir. vaxtı təyin etmək və açarları oxumaq funksiyaları holoclock.c/h faylları əsas döngələr və başlanğıcdır.

Tövsiyə: