Cuprins:

Minidot 2 - Holoclock: 6 pași
Minidot 2 - Holoclock: 6 pași

Video: Minidot 2 - Holoclock: 6 pași

Video: Minidot 2 - Holoclock: 6 pași
Video: Видео-обзор коллиматорных прицелов Delta Optical MiniDot HD 24 и HD 26 2024, Noiembrie
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Ei bine, poate holoclock-ul este puțin inexact … folosește o peliculă de dispersie holografică pe partea din față pentru a oferi un pic de adâncime. / EEGLXQCSKIEP2876EE / și reutilizarea multor coduri și circuite din microdotul meu aflat aici: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD și codul Sourceboost sunt incluse în fișierele zip atașate. De ce? Anterior Minidot a fost prea complex, de la Microdot am învățat cum să fac un RTC pe un PIC folosind doar un cristal 32.768 și nu a trebuit să folosesc un cip RTC special. De asemenea, am vrut să scap de cipurile de afișare de la Minidotul anterior. Deci, acum există doar un cip regulator de putere și un PIC16F88 …. doar două cipuri. Celelalte motive pentru o actualizare au fost Minidot-ul meu devenea puțin fiabil din cauza plăcii de comutare separate și am vrut o estompare ușoară între modelele de puncte ca precum și un fel de senzor de lumină ambientală pentru a estompa afișajul pe timp de noapte. Celălalt Minidot avea luminozitate fixă și lumina o cameră pe timp de noapte. Dispozitivul a fost construit cu ajutorul pachetului software EagleCad și al compilatorului Sourceboost. Va trebui să aveți o anumită experiență cu electronica și programarea controlerelor PIC pentru a începe acest proiect. Vă rugăm să rețineți că acest lucru nu este instructiv nici pentru programarea electronică, nici pentru programarea PIC, așa că vă rugăm să păstrați întrebările relevante pentru designul Miniclock. Consultați instrucțiunile de mai sus sau multe alte instructabile de pe acest site pentru sfaturi despre utilizarea EagleCad sau programarea PIC-urilor. Deci, iată-l … Minidot 2, Holoclock …… sau Minidot Următoarea generație ………….

Pasul 1: Circuitul

Circuitul
Circuitul
Circuitul
Circuitul
Circuitul
Circuitul

Acest circuit este foarte similar cu Microdot. Rețineți că matricea charlieplex este practic identică … doar câțiva pini au fost mutați.

Un circuit de 20Mhz a fost adăugat la circuitul Microdot pentru a urmări PIC mult mai repede, acest lucru permite scanarea mai rapidă a matricei și permite implementarea unui algoritm de estompare. Algoritmul de estompare a fost foarte important pentru a funcționa o decolorare a modelului încrucișat și funcția de lumină ambientală. Acest lucru ar fi fost imposibil cu Microdot, din cauza vitezei mai mici a ceasului, deoarece unele cicluri de scanare trebuiau cheltuite pentru diminuare. Consultați secțiunea următoare pentru o descriere a funcționalității Dimming. Celelalte lucruri de menționat sunt utilizarea unui regulator de pompă de încărcare MCP1252 pentru a furniza 5V, cipul meu preferat în acest moment. Dacă ai modifica circuitul, ai putea folosi un 7805 vechi simplu … Am doar câteva dintre aceste jetoane la îndemână. Am mutat întrerupătoarele în față, salvează lăutări în spatele ceasului după întreruperi de curent pentru a reseta ora și acum totul este doar un PCB … nu există probleme de cablare. De asemenea, este de remarcat includerea unui LDR. Acesta este utilizat într-un divizor de tensiune care este detectat de pinul A / D de pe PIC. Atunci când PIC detectează că nivelul de lumină ambientală este scăzut (adică noaptea) algoritmul de estompare menține matricea charlieplex întunecată pentru mai multe cicluri decât atunci când nivelul de lumină este ridicat. Nu am putut găsi un simbol LDR în biblioteca Eaglecad, așa că tocmai am folosit un simbol LED … nu vă lăsați păcăliți este un LDR. Vezi mai jos imaginea reală a PCB-ului. Un lucru de remarcat atunci când utilizați LED-uri multicolore într-o matrice charliplex. Trebuie să vă asigurați că tensiunea directă a LED-urilor este mai mult sau mai puțin aceeași. Dacă nu, atunci pot apărea căi de curent rătăcite și se vor aprinde mai multe LED-uri. Astfel, utilizarea LED-urilor de 5 mm sau mai mari pentru această configurație nu va funcționa, deoarece există, de obicei, o diferență destul de mare între LED-urile verde / albastru și LED-urile roșu / galben. În acest caz, am folosit 1206 de leduri SMD și LED-uri verde / albastre de înaltă eficiență, în special. Tensiunile directe nu au fost însă o problemă aici. Dacă doriți să utilizați un amestec de LED-uri de putere mai mare verde / albastru și roșu / galben într-o matrice charlieplex, ar trebui să separați diferitele culori în două tablouri charliplex. Există numeroase explicații despre charlieplexing care pot fi googled …… Nu voi intra în detalii aici. Vă voi lăsa să faceți niște cercetări. (Apăsați pictograma mică „i” din colțul imaginii de mai jos pentru a vedea o versiune mai mare)

Pasul 2: Algoritmul de estompare - Modulația lățimii impulsului Charliplexed

Algoritmul de estompare - Modulația lățimii impulsurilor charliplexate
Algoritmul de estompare - Modulația lățimii impulsurilor charliplexate

Așa cum am menționat mai devreme, am vrut ca diferitele tipare de puncte pentru timpul să se estompeze ușor, mai degrabă decât să treacă de la un model la altul. Vedeți videoclipul pentru o demonstrație. În mijloc este noul ceas Minidot, în dreapta este Minidotul mai vechi. Observați cât de frumos este noul. (FYI, celelalte afișaje din fundal sunt afișarea stării supercomputerului Minicray și particula Nebulon capturată care alimentează Minicray într-un câmp de confinare magnetică antimaterie. A se vedea aici: https://www.youtube.com/watch? V = bRupDulR4MEpentru o demonstrație a camerei de confinare a nebulonilor) Dacă căutați codul, deschideți fișierul display.c. Rețineți că există patru matrice pentru maparea valorilor tris / port pentru a ilumina orice matrice particulară și două matrice (una mai mult decât codul Microdot) pentru a defini care LED-uri ar trebui să fie iluminate pentru orice model particular de LED-uri.

// 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];Pentru a aprinde LED1, de exemplu, trebuie să setați registrele TRIS TRISA: B = 0xef: 0xfd și registrele PORT PORTA: B = 0x10: 0x00 și așa mai departe. Dacă scrieți valorile tris în binar, veți observa că, la un moment dat, există doar două ieșiri activate. Celelalte sunt setate la Tri-state (deci registrul TRIS). Acest lucru este esențial pentru reflecție. Veți observa, de asemenea, că o ieșire este întotdeauna un „1” logic, iar cealaltă este întotdeauna un „0” logic … a cărui direcție se aprinde indiferent de LED-ul dintre aceste două linii de ieșire. Ultima valoare din port / tris matricea este o valoare nulă pentru a porni fără LED-uri deloc. În Microdot, funcția update_display a circulat continuu printr-o altă matrice (nLeds ) pentru a vedea dacă respectivul LED va fi iluminat. Dacă a fost, atunci valorile tris / port corespunzătoare au fost setate și LED-ul luminat pentru o perioadă de timp. În caz contrar, valoarea nulă a fost trimisă către registrele PIC TRIS / PORT și nu s-a aprins niciun LED pentru o perioadă de timp. Când a fost făcut suficient de repede, acest lucru a dat un model. Restul programului citea periodic valorile RTC și alcătuia un model aleatoriu frumos în acea matrice … și astfel afișajul s-a schimbat. Pentru a face o funcție de estompare, aceasta a fost ușor extinsă, astfel încât după ce cele 30 de LED-uri au fost fie aprinse (fie nu) atunci perioadele suplimentare ar fi cheltuite pentru trimiterea valorilor nule dacă afișajul ar trebui să fie estompat …..pentru o luminozitate maximă, atunci nu s-ar petrece perioade suplimentare. Când se repetă dacă există o mulțime de perioade nule la LED-urile iluminate, afișajul va fi slab. De fapt, aceasta este modularea lățimii impulsurilor multiplexate … sau pentru că hardware-ul este configurat într-o aranjare charlieplex, apoi modularea lățimii impulsului charlieplexată. A doua diagramă de mai jos prezintă configurarea de bază pentru aceasta. Numesc asta un cadru de scanare. Primele 30 de perioade până la cadru sunt folosite pentru a trece prin LED-uri … și un număr variabil de perioade suplimentare definesc cât de slab va fi afișajul. Acest ciclu se repetă. Mai multe perioade nule înseamnă mai puțin timp pentru un LED pentru fiecare cadru (deoarece numărul de perioade a crescut). Rețineți că axa verticală nu înseamnă nivelul de tensiune. Starea reală a pinilor care merg la LED-uri variază în funcție de poziția sa în matricea charlieplex … în diagramă înseamnă doar pornit sau oprit. Aceasta a însemnat și lungimea totală a cadrului în timp a crescut, reducând astfel actualizarea rată. Pe măsură ce LED-urile devin mai slabe, ar începe să pâlpâie cu alte cuvinte. Deci, această metodă este utilă doar într-o anumită măsură. Pentru ceas, a fost OK. O funcție este numită intermitent care citește convertorul A / D de pe PIC și setează acest nivel de luminozitate. Dacă citiți codul, acesta verifică, de asemenea, dacă LED-ul cel mai apropiat de LDR este aprins și nu face nicio setare de nivel, dacă este așa, acest lucru oprește afișajul care se aprinde neașteptat atunci când modelul s-a schimbat.

Pasul 3: Algoritm de estompare - Efectul de estompare încrucișată și tamponarea dublă

Algoritm de estompare - Efect de estompare încrucișată și tamponare dublă
Algoritm de estompare - Efect de estompare încrucișată și tamponare dublă

Tranziția dintre un model și următorul a fost anterior imediată. Pentru acest ceas am vrut să arăt un model scăzând treptat în luminozitate și următorul model crescând treptat … adică o decolorare încrucișată.

Nu trebuia să am LED-uri individuale pentru a fi controlate la niveluri de luminozitate separate pentru a face o decolorare încrucișată. Aveam nevoie doar de primul model la o luminozitate și de al doilea la o luminozitate scăzută. Apoi, într-o perioadă scurtă, aș scădea puțin luminozitatea primului și l-aș crește pe al doilea … asta ar continua până la al doilea model, ca pe deplin. Apoi, ceasul va aștepta până când următorul model ar trebui să apară și va exista o altă tranziție. Astfel, am avut nevoie să stochez două modele. Cel care se afișează în prezent și al doilea model care urma să fie afișat. Acestea sunt în matrici nLedsA și nLedsB. (nu notați nimic în legătură cu porturile în acest caz). Acesta este bufferul dublu. Funcția update_display () a fost modificată pentru a parcurge opt cadre și pentru a afișa un număr de cadre din prima matrice, apoi din cealaltă. Modificarea numărului de cadre alocate fiecărui buffer pe parcursul celor opt cicluri a definit cât de luminos ar fi fiecare model. Când am terminat ciclul între buffere, am schimbat bufferele „afișare” și „afișare următoare”, astfel încât funcția de generare a modelului să scrie apoi doar în bufferul „următorul afișaj”. Diagrama de mai jos arată acest lucru, sperăm. Ar trebui să puteți vedea că tranziția va dura 64 de cadre de scanare. În imagine, mica inserție arată diagrama fram de scanare din pagina anterioară, redusă cu măiestrie. Un cuvânt despre rata re-fresh. Toate acestea trebuie făcute foarte repede. Avem acum două niveluri de calcul suplimentar, unul pentru luminozitatea afișajului ambiental și unul pentru cele opt cicluri de cadre petrecute făcând o tranziție între două buffere. Astfel, acest cod ar trebui să fie scris în asamblare, dar este suficient de bun în „C”.

Pasul 4: Construcție - PCB

Construcție - PCB
Construcție - PCB
Construcție - PCB
Construcție - PCB

Acest lucru este destul de simplu. Doar un PCB cu două fețe, cu câteva componente SMD în partea de sus. Îmi pare rău dacă sunteți o persoană prin găuri, dar este mult mai ușor să faceți proiecte SMD … fără găuri de forat. Ar trebui să aveți o mână constantă, o stație de lipit cu temperatură controlată și multă lumină și mărire pentru a ușura lucrurile.

Singurul lucru de remarcat în construcția PCB este includerea unui conector pentru programarea PIC. Acest lucru se conectează la pinii ICSP de pe PIC și veți avea nevoie de un programator ICSP. Din nou am folosit un conector la îndemână pentru junkbox. Puteți să omiteți acest lucru și să lipiți firele de pe tampoane, dacă doriți. Alternativ, dacă aveți doar un programator cu soclu, puteți crea un antet care se conectează la soclu și apoi îl puteți lipi pe tampoanele ICSP. Dacă faceți acest lucru, deconectați Rx și conectați Ry, care sunt doar legături zero ohm (folosesc doar un blob de lipit). Acest lucru va deconecta restul puterii circuitului de la PIC, astfel încât să nu interfereze cu programarea. Un programator cu socket utilizează doar pinii ICSP ca un programator ICSP, nu există nici o magie implicată. De asemenea, trebuie să faceți acest lucru dacă din greșeală ați uitat să puneți o întârziere în cod înainte de începerea RTC. Pentru 16F88 pinii de programare ICSP sunt aceiași cu pinii necesari pentru cristalul de 32,768kHz utilizat pentru RTC … dacă oscilatorul extern T1 (adică RTC) rulează înainte ca ICSP să poată începe să funcționeze, atunci programarea va eșua. În mod normal, dacă există o resetare a pinului MCLR și există o întârziere, atunci datele ICSP pot fi trimise către acești pin și programarea poate începe corect. Totuși, izolând puterea la PIC, programatorul ICSP (sau programatorul conectat cu un antet) poate controla puterea dispozitivului și forța un program. Celelalte lucruri de menționat sunt că tampoanele de cristal de pe PCB au fost inițial concepute pentru cristale SMD. Abia așteptam ca unii să fie livrați, astfel încât cristalul de ceas de 32,768 kHz a fost lipit în partea de sus așa cum se arată, iar cristalul de 20 MHz a fost atașat prin găurirea a două găuri în tampoane, introducerea cristalului în partea inferioară și lipirea pe top. Puteți vedea pinii chiar în dreapta PIC16F88.

Pasul 5: Filmul holografic și carcasa

Filmul și locuințele holografice
Filmul și locuințele holografice
Filmul și locuințele holografice
Filmul și locuințele holografice
Filmul și locuințele holografice
Filmul și locuințele holografice

Construcția finală este pur și simplu introducerea PCB-ului în carcasă și, după programare, fixarea acestuia cu un adeziv fierbinte. Trei găuri permit accesul la microîntrerupătoare din față.

Partea notabilă a acestui ceas este utilizarea unui film difuzor holografic. Acesta este un film special pe care l-am întins, care oferă o adâncime frumoasă dispozitivului. Ați putea folosi hârtie de urmărire simplă (în care aș muta PCB-ul mai aproape de față) sau orice alt difuzor de genul celor utilizate în corpurile de iluminat fluorescente. Experiența despre, singurul lucru pe care trebuie să-l faceți este să vă permiteți să faceți diferența între numărul de LED-uri iluminate sau altfel numără punctele pentru a spune ora va fi dificil. Am folosit material de dispersie holografică de la Physical Optics Coorporation (www.poc.com) cu o dispersie circulară de 30 de grade, afișajul stării supercomputerului prezentat în altă parte în instructabil a folosit un film cu o dispersie eliptică de 15x60 grade. Ați putea folosi niște benzi opace pentru a ascunde interiorul strălucitor în timpul zilei pentru a obține un aspect mai misterios. Puteți chiar să lăsați ecranul liber și să lăsați oamenii să vadă interiorele așa cum am făcut-o și eu. Suportul era de doi biți de bare „L” din aluminiu cu un pic tocat în partea de jos pentru a permite o îndoire. Notă în aceste imagini a fost adăugată o iluminare suplimentară, astfel încât să puteți vedea coperțile afișajului etc. În iluminatul normal al camerei de zi, LED-urile sunt mai proeminente, chiar și în lumina zilei.

Pasul 6: Software și interfață utilizator

Funcționarea dispozitivului este foarte simplă, fără moduri speciale de model sau lucruri strălucitoare. Singurul lucru pe care îl face este să afișeze ora.

Pentru a seta ora, apăsați mai întâi SW1. Dispozitivul va lumina intermitent toate LED-urile de câteva ori și apoi grupul de LED-uri de 10 ore SW3 va crește grupul selectat SW2 va trece la următorul grup de LED-uri, de fiecare dată intermitând pe scurt toate LED-urile din grup. Codul este scris pentru versiunea 6.70 a compilatorului Sourceboost "C". Codul RTC se află în fișierele t1rtc.c / h și are o funcție de întrerupere pe temporizatorul T1 al PIC. Cronometrul T1 este setat să întrerupă la fiecare 1 secundă. În fiecare secundă, variabila pentru timp este incrementată. De asemenea, un temporizator de căpușe este numărat în jos în fiecare secundă, împreună cu timpul. Aceasta este utilizată pentru a determina când treceți ecranul. Funcția de întrerupere folosește, de asemenea, întreruperea temporizatorului T0 pentru a reîmprospăta afișajul, apelând o funcție în display.c Fișierele display.h / display.c conțin funcțiile de actualizare a afișajului și arată ora Controlul fișierelor.c / h conține funcții pentru setarea orei și citirea comutatoarelor Fișierele holoclock.c / h sunt principalele bucle și inițializare.

Recomandat: