INHOUDSOPGAWE:

Minidot 2 - die Holoclock: 6 stappe
Minidot 2 - die Holoclock: 6 stappe
Anonim
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock
Minidot 2 - die Holoclock

Wel, miskien is holoclock 'n bietjie onakkuraat … dit gebruik wel holografiese verspreidingsfilm aan die voorkant om 'n bietjie diepte te gee. In beginsel is hierdie instruksie 'n opdatering van my vorige Minidot hier: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/en hergebruik baie kode en stroombane van my Microdot hier: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD-lêers en Sourceboost-kode is ingesluit in die zip-lêers wat aangeheg is. Hoekom? Die vorige Minidot was te kompleks, van die Microdot het ek geleer hoe om 'n RTC op 'n PIC te doen met slegs 'n 32.768 kristal en hoef nie 'n spesiale RTC -chip te gebruik nie. Ek wou ook ontslae raak van die skermskyfies van die vorige Minidot. Nou is daar net 'n kragreguleerder-chip en 'n PIC16F88 …. net twee skyfies. sowel as 'n soort sensor vir omringende lig om die skerm snags te verdof. Die ander Minidot het 'n vaste helderheid en 'n kamer in die nag verlig. Die toestel is gebou met behulp van die EagleCad -sagtewarepakket en Sourceboost -samesteller. U moet 'n bietjie ervaring hê met elektronika en programmering van PIC -beheerders om hierdie projek te begin. Let daarop dat dit nie 'n instruksie is vir elektronika of PIC -programmering nie, dus hou vrae wat relevant is vir die Miniclock -ontwerp. Raadpleeg die instruksies hierbo of baie ander instruksies op hierdie webwerf vir advies oor die gebruik van EagleCad of die programmering van PIC's. So hier is dit….. Minidot 2, The Holoclock …… of Minidot The Next Generation ………….

Stap 1: Die stroombaan

Die stroombaan
Die stroombaan
Die stroombaan
Die stroombaan
Die stroombaan
Die stroombaan

Hierdie kring is baie soortgelyk aan die Microdot. Let op dat die charlieplex -skikking feitlik identies is … slegs 'n paar penne is verskuif.

'N 20Mhz kristal is by die Microdot -kring gevoeg om die PIC baie vinniger te klok; dit laat toe dat die skikking vinniger geskandeer word en 'n dimmeralgoritme geïmplementeer kan word. Die dimmeralgoritme was baie belangrik om 'n kruispatroon -vervaag- en omgevingsligfunksie te laat werk. Dit sou onmoontlik gewees het met die Microdot, as gevolg van die stadiger kloksnelheid, aangesien sommige skansiklusse aan verduistering bestee moes word. Sien die volgende afdeling vir 'n beskrywing van die dimfunksie. Die ander dinge om op te let is die gebruik van 'n MCP1252 laaipompreguleerder om 5V te voorsien, my gunsteling chip op die oomblik. As u die stroombaan verander het, kan u 'n gewone ou 7805 gebruik …… Ek het net 'n aantal van hierdie handige skyfies. Ek het nou die skakelaars na die voorkant geskuif, en ek spaar my aan die agterkant van die klok na kragonderbrekings om die tyd terug te stel, en nou is alles net een PCB …. geen probleme met kabels nie. Let ook op die insluiting van 'n LDR. Dit word gebruik in 'n spanningsverdeler wat deur die A/D -pen op die PIC waargeneem word. As die PIC voel dat die omringende ligvlak laag is (dws nag), hou die dimmeralgoritme die charlieplex -skikking donkerder vir meer siklusse as wanneer die ligvlak hoog is. Ek kon nie 'n LDR -simbool in die Eaglecad -biblioteek vind nie, so ek het net 'n LED -simbool gebruik … moenie mislei word nie, dit is 'n LDR. Sien die werklike prentjie van die PCB hieronder. Een ding om op te let by die gebruik van veelkleurige LED's in 'n charliplex-skikking. U moet seker maak dat die voorspanning van die LED's min of meer dieselfde is. As dit nie die geval is nie, kan daar verdwaalde stroompaaie voorkom en verskeie LED's sal brand. Die gebruik van 5 mm of hoër krag -LED's vir hierdie konfigurasie sal dus nie werk nie, aangesien daar gewoonlik 'n groot verskil is tussen die groen/blou LED's en die rooi/geel LED's. In hierdie geval het ek 1206 SMD -leds en veral groen/blou LED's met 'n hoë doeltreffendheid gebruik. Die voorspannings was hier egter nie 'n probleem nie. As u 'n mengsel van groen/blou en rooi/geel LED's met hoër krag in 'n charlieplex -reeks wil gebruik, moet u die verskillende kleure in twee charliplex -skikkings skei. Daar is talle verklarings van charlieplexing wat gegoogle kan word … Ek sal nie hier op die besonderhede ingaan nie. Ek sal dit aan u oorlaat om ondersoek in te stel. (Druk die klein 'i' -ikoon in die hoek van die foto hieronder om 'n groter weergawe te sien)

Stap 2: Die dimmeralgoritme - Charliplexed Pulse Width Modulation

Die dimmeralgoritme - Charliplexed Pulse Width Modulation
Die dimmeralgoritme - Charliplexed Pulse Width Modulation

Soos vroeër genoem, wou ek hê dat die verskillende puntpatrone vir die tyd glad vervaag eerder as om van die een patroon na die ander te ruk. Sien die video vir 'n demonstrasie. In die middel is die nuwe Minidot -klok, aan die regterkant, die ouer Minidot. Let op hoeveel mooier die nuwe een is. (Terloops, die ander skerms op die agtergrond is my Minicray -superrekenaarstatusskerm en my vasgevangde Nebulon -deeltjie wat die Minicray in 'n magnetiese inperkingveld van antimaterie aandryf. Sien hier: https://www.youtube.com/watch? V = bRupDulR4ME vir 'n demonstrasie van die nebulon -opsluitingskamer) As u die kode inskakel, maak die display.c -lêer oop. Let op: daar is vier skikkings vir die kartering van die tris/poortwaardes om 'n spesifieke skikking te verlig en twee skikkings (een meer as die Microdot -kode) om te bepaal watter LED's vir 'n spesifieke patroon van LED's verlig moet word: bv:

// LED1 LED2 LED3… ongetekende char LEDS_PORTA [31] = {0x10, 0x00, 0x00,… ongetekende char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… ongetekende char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Ongetekende char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; ongetekende char nLedsB [30];Om byvoorbeeld LED1 aan te steek, moet u die TRIS -registers stel TRISA: B = 0xef: 0xfd en PORT -registers PORTA: B = 0x10: 0x00 ensovoorts. As u die tris -waardes in binêre uitskryf, sal u daarop let dat daar slegs twee uitsette te eniger tyd aangeskakel is. Die ander is ingestel op Tri-state (vandaar TRIS-register). Dit is sentraal in charlieplexing. U sal ook opmerk dat die een uitset altyd 'n logiese '1' is en die ander altyd 'n '0' … waarvan die rigting aangaan watter LED tussen hierdie twee uitvoerlyne is. Die laaste waarde in die poort/tris arrays is 'n nulwaarde om glad nie 'n LED aan te skakel nie. In die Microdot het die update_display -funksie deurlopend deur 'n ander skikking (nLeds ) gery om te sien of die spesifieke LED verlig sou word. As dit die geval was, is die ooreenstemmende tris/port -waardes ingestel en die LED brand vir 'n tydperk. Andersins is die nulwaarde na die PICs TRIS/PORT -registers gestuur, en geen LED is vir 'n tydperk aangesteek nie. As dit vinnig genoeg gedoen is, het dit 'n patroon gegee. Die res van die program sou gereeld die RTC -waardes lees en 'n goeie ewekansige patroon in die skikking uitmaak …. nie), dan word ekstra periodes bestee aan die stuur van nulwaardes as die vertoning verdof sou word ….. vir volle helderheid word daar geen ekstra periodes bestee nie. As dit herhaal word as daar baie tydperke vir die verligte LED's is, sal die skerm swak wees. In werklikheid is dit gemultipuleerde polswydte -modulasie…..of omdat die hardeware in 'n charlieplex -samestelling gekonfigureer is, dan die modulasie van die pulswydte met charleplexing. Die tweede diagram hieronder toon die basiese opset hiervoor. Ek noem dit 'n scan raam. Die eerste 30 periodes van die raam word gebruik om deur die LED's te gaan … en 'n veranderlike aantal ekstra periodes definieer hoe dowwe die skerm sal wees. Hierdie siklus word herhaal. Meer nulperiodes beteken minder tyd om 'n LED per raam aan te skakel (omdat die aantal periodes toegeneem het). Let daarop dat die vertikale as nie die spanningsvlak beteken nie. Die werklike toestand van die penne wat na die LED's gaan, wissel na gelang van die posisie in die charlieplex -skikking ….. in die diagram beteken dit net aan of uit. koers. Namate die LED's dowwer word, begin dit met ander woorde flikker. Hierdie metode is dus slegs in 'n mate nuttig. Vir die klok was dit OK. 'N Funksie word kort -kort genoem wat die A/D -omskakelaar op die PIC lees en hierdie helderheidsvlak bepaal. As u die kode lees, kyk dit ook of die LED die naaste aan die LDR aan is, en as dit nie so is nie, kan dit nie onverwags helder word as die patroon verander nie.

Stap 3: dimmeralgoritme - die kruisvervaag -effek en dubbele buffering

Dim -algoritme - die kruisvervaag -effek en dubbele buffering
Dim -algoritme - die kruisvervaag -effek en dubbele buffering

Die oorgang tussen een patroon en die volgende was voorheen onmiddellik. Vir hierdie horlosie wou ek die een patroon wys wat geleidelik afneem in helderheid en die volgende patroon geleidelik toeneem … dws 'n kruisverf.

Ek hoef nie individuele LED's te hê om op verskillende helderheidsvlakke te beheer om 'n kruisverf te maak nie. Ek benodig net die eerste patroon met een helderheid en die tweede met 'n lae helderheid. Dan sou ek oor 'n kort tydperk die helderheid van die eerste 'n bietjie verminder en die tweede verhoog … dit sal aanhou totdat die tweede patroon volledig is. Dan sou die horlosie wag totdat die volgende patroon verskyn, en daar sou 'n ander oorgang wees. Ek moes dus twee patrone stoor. Die een wat tans vertoon word en die tweede patroon wat op die punt was om te vertoon. Dit is in skikkings nLedsA en nLedsB. (let op niks in hierdie geval met hawens te doen nie). Dit is die dubbele buffer. Die funksie update_display () is aangepas om deur agt rame te gaan en 'n aantal rame van die eerste een skikking, dan die ander, te wys. Deur die aantal rame wat gedurende elke agt siklusse aan elke buffer toegeken is, te verander, word bepaal hoe helder elke patroon sal wees. Toe ons klaar was tussen buffers, het ons die 'display' en 'next display' buffers omgeskakel, sodat die patroonopwekkingsfunksie dan slegs na die 'volgende vertoning' buffer sou skryf. Die diagram hieronder toon dit hopelik aan. U behoort te sien dat die oorgang 64 skanderingsrame sal neem. In die prentjie toon die klein insetsel die skanderingraamdiagram van die vorige bladsy, kunstig afgeskaal. 'N Woord oor herfris-tarief. Dit alles moet baie vinnig gedoen word. Ons het nou twee vlakke van ekstra berekening, een vir die dimensie van die skerm en een vir die agt raamsiklusse wat oorgebring word tussen 'n oorgang tussen twee buffers. Hierdie kode moet dus saamgestel word, maar is goed genoeg in 'C'.

Stap 4: Konstruksie - die PCB

Konstruksie - die PCB
Konstruksie - die PCB
Konstruksie - die PCB
Konstruksie - die PCB

Dit is redelik eenvoudig. Net 'n dubbelzijdige PCB met 'n paar SMD -komponente aan die bokant. Jammer as jy 'n deurlopende persoon is, maar dit is baie makliker om SMD -projekte te maak …. sonder gate om te boor. U moet 'n stewige hand hê, 'n temperatuurstuurde soldeerstasie en baie lig en vergroting om dinge makliker te maak.

Die enigste opmerking by die konstruksie van die PCB is die insluiting van 'n aansluiting vir die programmering van die PIC. Dit sluit aan by die ICSP -penne op die PIC en u benodig 'n ICSP -programmeerder. Ek het weer 'n handige na my junkbox -aansluiting gebruik. U kan dit weglaat en net drade aan die pads soldeer as u wil. As alternatief, as u slegs 'n programmeerder het, kan u 'n kopstuk maak wat by u aansluiting aansluit en dit aan die ICSP -pads soldeer. As u dit doen, ontkoppel dan Rx en koppel Ry aan, wat slegs nul -ohm -skakels is (ek gebruik net 'n soldeerblok). Dit sal die res van die stroomkrag van die PIC ontkoppel, sodat dit nie die programmering belemmer nie. 'N Programmeerder met 'n aansluiting gebruik net die ICSP -penne soos 'n ICSP -programmeerder; daar is eintlik geen magie betrokke nie. U moet dit ook doen as u per ongeluk vergeet het om die kode te vertraag voordat die RTC begin. Vir die 16F88 is die ICSP -programmeringspenne dieselfde as die penne wat benodig word vir die kristal van 32.768 kHz wat vir die RTC gebruik word …. as die eksterne ossillator T1 (dws die RTC) loop voordat die ICSP kan begin, sal die programmering misluk. As die MCLR -pen teruggestel word en daar 'n vertraging is, kan ICSP -data gewoonlik na hierdie penne gestuur word en kan die programmering behoorlik begin. Deur die krag na die PIC te isoleer, kan die ICSP -programmeerder (of 'n programmeerder met 'n kop) die krag van die toestel beheer en 'n program dwing. Die ander dinge om op te let, is dat die kristalblokkies op die PCB oorspronklik ontwerp is vir SMD -kristalle. Ek kon nie wag dat 'n paar afgelewer word nie, sodat die 32.768kHz horlosiekristal aan die bokant is gesoldeer, en die 20MHz kristal is vasgemaak deur 'n paar gate in die pads te boor, die kristal deur die bodem te steek en aan die soldeer te soldeer. Top. U kan die penne regs van die PIC16F88 sien.

Stap 5: Die holografiese film en behuising

Die holografiese film en behuising
Die holografiese film en behuising
Die holografiese film en behuising
Die holografiese film en behuising
Die holografiese film en behuising
Die holografiese film en behuising

Die finale konstruksie is om die printplaat in die kas te plaas en dit na die programmering met 'n bietjie warm gom vas te plak. Drie gate bied toegang tot die mikroskakelaars van voor.

Die opvallende deel van hierdie horlosie is die gebruik van 'n holografiese verspreiderfilm. Dit is 'n spesiale film wat ek laat lê het, wat die toestel 'n goeie diepte bied. U kan gewone naspeurpapier gebruik (waarin ek die PCB nader aan die voorkant skuif), of enige ander diffuser soos dié wat in fluorescerende lampe gebruik word. Ervaring oor die enigste ding wat u hoef te doen, is om u te laat onderskei tussen die aantal verligte LED's, anders kan dit nie moeilik wees om die punte te tel nie. Ek gebruik holografiese verspreidingsmateriaal van die Physical Optics Coorporation (www.poc.com) met 'n sirkelvormige verspreiding van 30 grade; die status van die superrekenaar wat elders in die instruksies verskyn, het 'n film met 'n 15x60 grade elliptiese dispersie gebruik. U kan bedags die blink binneste verberg om 'n meer geheimsinnige voorkoms te kry. U kan selfs die skerm duidelik laat en mense die binneste laat sien soos ek. Die staander was twee stukkies aluminium 'L' staaf met 'n bietjie aan die onderkant gekap om te buig. Let op dat hierdie foto's ekstra beligting bygevoeg is sodat u die skerms, ens. By die gewone beligting in die woonkamer kan sien, die LED's meer prominent, selfs in daglig.

Stap 6: Sagteware en gebruikerskoppelvlak

Die werking van die toestel is baie eenvoudig, geen spesiale patroonmodusse of spoggerige goed nie. Die enigste ding wat dit doen, is om die tyd te wys.

Druk eers SW1 om die tyd in te stel. Die toestel flits alle LED's 'n paar keer, en dan verhoog die groep 10's van die LED's SW3 die geselekteerde groep SW2 na die volgende groep LED's, elke keer dat die LED's in die groep kortliks flikker. Die kode is geskryf vir Sourceboost 'C' samesteller weergawe 6.70. Die RTC -kode is in die t1rtc.c/h -lêers en het 'n onderbrekingsfunksie op die T1 -timer van die PIC. Die T1 -timer moet elke 1 sekonde onderbreek word. Op elke sekonde word die veranderlike vir die tyd verhoog. 'N Bosluister word ook elke sekonde saam met die tyd afgetel. Dit word gebruik om te bepaal wanneer die skerm oorgedra moet word. Die onderbrekingsfunksie gebruik ook die T0 -tydsonderbreker om die skerm te verfris, en noem 'n funksie in die skerm. C Die lêers vertoon.h/vertoon. C bevat die funksies om die skerm op te dateer en die tyd aan te toon Die lêers beheer. C/h bevat die funksies om die tyd in te stel en die skakelaars te lees Die lêers holoclock.c/h is die belangrikste lusse en initialisering.

Aanbeveel: