Innholdsfortegnelse:

Minidot 2 - Holoclock: 6 trinn
Minidot 2 - Holoclock: 6 trinn

Video: Minidot 2 - Holoclock: 6 trinn

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

Kanskje holoclock er litt unøyaktig…. Det bruker holografisk spredningsfilm på forsiden for å gi litt dybde. I utgangspunktet er denne instruksjonsbasen en oppdatering til min forrige Minidot som ligger her: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/og gjenbruk av mye kode og kretser fra min Microdot som ligger her: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD-filer og Sourceboost-kode er inkludert i zip-filene som er vedlagt. Hvorfor? Den forrige Minidot var altfor kompleks, fra Microdot lærte jeg å gjøre en RTC på en PIC ved hjelp av bare en 32.768 krystall og trengte ikke å bruke en spesiell RTC -brikke. Jeg ønsket også å bli kvitt skjermbrikkene fra forrige Minidot. Så nå er det bare en effektregulatorbrikke og en PIC16F88 …. bare to sjetonger. De andre årsakene til en oppdatering var at Minidot ble litt upålitelig på grunn av det separate bryterbordet, og jeg ønsket en myk fade mellom prikkmønstre som samt en slags sensor for omgivelseslys for å dempe skjermen om natten. Den andre Minidot var fast lysstyrke og belyste et rom om natten. Enheten ble konstruert ved hjelp av EagleCad -programvarepakken og Sourceboost -kompilatoren. Du må ha litt erfaring med elektronikk og programmering av PIC -kontrollere for å starte dette prosjektet. Vær oppmerksom på at dette ikke kan instrueres om elektronikk eller PIC -programmering, så vær så snill å ha spørsmål som er relevante for Miniclock -designet. Se instruksjonene ovenfor eller mange andre instrukser på dette nettstedet for å få råd om bruk av EagleCad eller programmering av PIC -er. Så her er det….. Minidot 2, The Holoclock …… eller Minidot The Next Generation ………….

Trinn 1: Kretsen

Kretsen
Kretsen
Kretsen
Kretsen
Kretsen
Kretsen

Denne kretsen er veldig lik Microdot. Vær oppmerksom på at charlieplex -matrisen er praktisk talt identisk … bare noen få pinner har blitt flyttet.

En 20Mhz krystall er lagt til Microdot -kretsen for å klokke PIC mye raskere, dette gjør at matrisen kan skannes raskere og muliggjør implementering av en dimmingsalgoritme. Dimmingsalgoritmen var veldig viktig for å få en kryssmønsterfade og funksjon for omgivelseslys til å fungere. Dette ville ha vært umulig med Microdot, på grunn av den lavere klokkehastigheten, da noen skanningssykluser måtte brukes på dimming. Se neste avsnitt for en beskrivelse av dimmefunksjonaliteten. De andre tingene å merke seg er bruken av en MCP1252 ladepumpe regulator for å levere 5V, min favorittbrikke for øyeblikket. Hvis du endret kretsen, kunne du bruke en vanlig gammel 7805 …… Jeg har bare en rekke av disse praktiske chipsene som henger rundt. Jeg har nå flyttet bryterne til fronten, sparer fikling rundt baksiden av klokken etter strømbrudd for å tilbakestille klokkeslettet, og nå er alt bare ett kretskort …. ingen problemer med kabling. Merk også at inkluderingen av en LDR. Dette brukes i en spenningsdeler som registreres av A/D -pinnen på PIC. Når PIC oppdager at det omgivende lysnivået er lavt (dvs. nattetid), holder dimmealgoritmen charlieplex -arrayet mørkt i flere sykluser enn når lysnivået er høyt. Jeg kunne ikke finne et LDR -symbol i Eaglecad -biblioteket, så jeg brukte bare et LED -symbol … ikke bli lurt, det er en LDR. Se det faktiske bildet av kretskortet nedenfor. En ting å merke seg når du bruker flerfargede lysdioder i en charliplex-matrise. Du må sørge for at fremspenningen til lysdiodene er mer eller mindre den samme. Hvis ikke, kan det forekomme svarte strømbaner, og flere lysdioder vil lyse. Derfor vil ikke bruk av lysdioder på 5 mm eller høyere for denne konfigurasjonen fungere, da det vanligvis er ganske stor forskjell mellom de grønne/blå lysdiodene og de røde/gule lysdiodene. I dette tilfellet brukte jeg 1206 SMD -lysdioder og spesielt høyeffektive grønne/blå lysdioder. Fremoverspenningene var imidlertid ikke et problem her. Hvis du ønsket å bruke en blanding av grønne/blå og røde/gule lysdioder med høyere effekt i et charlieplex -array, må du skille de forskjellige fargene i to charliplex -matriser. Det er mange forklaringer på charlieplexing som kan googles …… Jeg skal ikke gå inn på detaljer her. Jeg overlater til deg å gjøre noen undersøkelser. (Trykk på det lille 'i' -ikonet i hjørnet av bildet nedenfor for å se en større versjon)

Trinn 2: Dimmingsalgoritmen - Charliplexed pulsbreddemodulasjon

Dimmealgoritmen - Charliplexed pulsbreddemodulasjon
Dimmealgoritmen - Charliplexed pulsbreddemodulasjon

Som nevnt tidligere, ønsket jeg å få de forskjellige prikkmønstrene for tiden til å falme jevnt fremfor å rykke fra et mønster til et annet. Se videoen for en demonstrasjon. I midten er den nye Minidot -klokken, til høyre er den eldre Minidot. Legg merke til hvor mye bedre den nye er. (FYI de andre skjermene i bakgrunnen er min Minicray superdatamaskin statusvisning og min fangede Nebulon -partikkel som driver Minicray i et antimateriale magnetisk innesperringsfelt. Se her: https://www.youtube.com/watch? V = bRupDulR4ME for en demonstrasjon av nebulon innesperringskammeret) Hvis du ser i koden, åpner du filen display.c. Vær oppmerksom på at det er fire matriser for å kartlegge tris/port -verdiene for å belyse en bestemt matrise og to matriser (en mer enn Microdot -koden) for å definere hvilke lysdioder som skal belyses for et bestemt mønster av LEDs.eg:

// LED1 LED2 LED3… usignert røye LEDS_PORTA [31] = {0x10, 0x00, 0x00,… usignert røye LEDS_TRISA [31] = {0xef, 0xff, 0xff,… usignert char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Usignert char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];For å lyse opp LED1, må du for eksempel sette TRIS -registrene TRISA: B = 0xef: 0xfd og PORT -registerene PORTA: B = 0x10: 0x00 og så videre. Hvis du skriver ut tris -verdiene i binær, vil du merke at det til enhver tid bare er to utganger aktivert. De andre er alle satt til Tri-state (derav TRIS-register). Dette er sentralt i charlieplexing. Du vil også merke at den ene utgangen alltid er en logisk '1' og den andre alltid er en logisk '0'. Retningen på hvilken lysdioden er mellom disse to utgangslinjene. Den siste verdien i porten/tris arrays er en nullverdi for å slå på ingen LED i det hele tatt. I Microdot syklet oppdateringsdisplayfunksjonen kontinuerlig gjennom en annen matrise (nLeds ) for å se om den aktuelle LED -en skulle lyse. Hvis det var det, ble de tilsvarende tris/port -verdiene angitt og LED -lampen lyser i en periode. Ellers ble nullverdien sendt til PICs TRIS/PORT -registre og ingen LED ble tent på en periode. Når det er gjort raskt nok ga dette et mønster. Resten av programmet ville med jevne mellomrom lese RTC -verdiene og utgjøre et fint tilfeldig mønster i den serien …. not) da ville ekstra perioder bli brukt på å sende nullverdier hvis displayet skulle dempes …. for full lysstyrke ville det ikke blitt brukt noen ekstra perioder. Når det gjentas hvis det var mange nullperioder for de opplyste lysdiodene, ville displayet være svakt. I virkeligheten er dette multiplexert pulsbreddemodulering…..eller fordi maskinvaren er konfigurert i et charlieplex -arrangement, deretter moduloppbygget pulsbredde. Det andre diagrammet nedenfor viser det grunnleggende oppsettet for dette. Jeg kaller dette en skanneramme. De første 30 periodene til rammen brukes til å gå gjennom lysdiodene …. og et variabelt antall ekstra perioder definerer hvor svak displayet vil være. Denne syklusen gjentas. Flere nullperioder betyr mindre tid for en LED å lyse per ramme (fordi antallet perioder økte). Vær oppmerksom på at den vertikale aksen ikke betyr spenningsnivå. Den faktiske tilstanden til pinnene som går til lysdiodene varierer avhengig av posisjonen i charlieplex -arrayet ….. i diagrammet betyr det bare på eller av. Dette betydde også at den totale lengden på rammen i tid også økte, og dermed reduserte oppdateringen vurdere. Etter hvert som lysdiodene ble svakere, begynte de å flimre med andre ord. Så denne metoden er bare nyttig til en viss grad. For klokken var det OK. En funksjon kalles periodisk som leser A/D -omformeren på PIC og setter dette lysstyrkenivået. Hvis du leser koden, kontrollerer den også om LED -en som er nærmest LDR er på, og ikke gjør noen nivåinnstilling i så fall, dette stopper at displayet uventet lyser når mønsteret endres. Neste kryssfade -funksjonen.

Trinn 3: Dimmingsalgoritme - Cross Fade -effekten og dobbel buffering

Dimmingsalgoritme - Cross Fade -effekten og dobbel buffering
Dimmingsalgoritme - Cross Fade -effekten og dobbel buffering

Overgangen mellom det ene mønsteret og det neste var tidligere umiddelbar. For denne klokken ønsket jeg å vise et mønster som gradvis avtar i lysstyrke og det neste mønsteret øker gradvis … dvs. et kryssfading.

Jeg trengte ikke å ha individuelle lysdioder for å kunne kontrolleres ved separate lysstyrkenivåer for å krysse. Bare trengte det første mønsteret med en lysstyrke og det andre med lav lysstyrke. Så over en kort periode ville jeg redusere lysstyrken til den første litt, og øke den andre ….. Dette ville fortsette til det andre mønsteret var fullt. Så ville klokken vente til neste mønster skulle vises, og det ville bli en ny overgang. Derfor trengte jeg å lagre to mønstre. Den som vises nå og det andre mønsteret som skulle vises. Disse er i matriser nLedsA og nLedsB. (merk ingenting å gjøre med porter i dette tilfellet). Dette er den doble bufferen. Update_display () -funksjonen ble endret for å bla gjennom åtte rammer og vise et antall rammer fra først en matrise, deretter den andre. Endring av antall rammer tildelt hver buffer gjennom de åtte syklusene definerte hvor lyst hvert mønster ville være. Da vi var ferdig med å sykle mellom buffere, byttet vi "display" og "next display" buffere rundt, så mønstergenereringsfunksjonen ville da bare skrive til "neste display" buffer. Diagrammet nedenfor viser dette forhåpentligvis. Du bør kunne se at overgangen vil ta 64 skanningsrammer. På bildet viser det lille innlegget skanningsrammediagrammet fra forrige side kunstig nedskalert. Et ord om re-fresh rate. Alt dette må gjøres veldig raskt. Vi har nå to nivåer med ekstra beregning, ett for omgivelsesdisplayets dimmhet og ett for de åtte rammesyklusene som brukes på å gjøre en overgang mellom to buffere. Dermed skulle denne koden skrives sammen, men den er god nok i 'C'.

Trinn 4: Konstruksjon - PCB

Konstruksjon - kretskortet
Konstruksjon - kretskortet
Konstruksjon - kretskortet
Konstruksjon - kretskortet

Dette er ganske greit. Bare en dobbeltsidig PCB med noen SMD -komponenter på toppen. Beklager hvis du er en gjennomgående hullperson, men det er mye lettere å lage SMD -prosjekter …. hull uten hull. Du bør ha en stabil hånd, en temperaturkontrollert loddestasjon og rikelig med lys og forstørrelse for å gjøre ting enklere.

Det eneste som er verdt å merke seg i konstruksjonen av PCB er inkluderingen av en kontakt for programmering av PIC. Dette kobles til ICSP -pinnene på PIC, og du trenger en ICSP -programmerer. Igjen brukte jeg en praktisk til søppelpostkontakten min. Du kan utelate dette og bare lodde ledninger til putene hvis du vil. Alternativt, hvis du bare har en programmert plugg, kan du lage en overskrift som kobles til kontakten og deretter lodde den til ICSP -putene. Hvis du gjør dette, må du koble fra Rx og koble til Ry som bare er null ohm lenker (jeg bruker bare en loddetinn). Dette vil koble resten av kretsstrømmen fra PIC, slik at det ikke forstyrrer programmeringen. En programmeret programmerer bruker bare ICSP -pinnene som en ICSP -programmerer, det er egentlig ingen magi involvert. Du må også gjøre dette hvis du ved en feil har glemt å sette en forsinkelse i koden før RTC starter. For 16F88 er ICSP -programmeringspinnene de samme som pinnene som trengs for 32.768 kHz krystallet som brukes til RTC …… hvis den eksterne T1 -oscillatoren (dvs. RTC) kjører før ICSP kan starte den, vil programmeringen mislykkes. Normalt hvis det er en tilbakestilling på MCLR -pinnen og det er en forsinkelse, kan ICSP -data sendes til disse pinnene og programmeringen kan starte på riktig måte. Imidlertid, ved å isolere strømmen til PIC, kan ICSP -programmereren (eller programmert med en topptekst) kontrollere strømmen til enheten og tvinge et program. De andre tingene å merke seg er at krystallputene på kretskortet opprinnelig var designet for SMD -krystaller. Jeg gledet meg til noen ble levert, så 32.768 kHz urkrystall ble loddet til toppen som vist, og 20 MHz krystallet ble festet ved å bore et par hull i putene, stikke krystallet inn gjennom bunnen og lodde på topp. Du kan se pinnene til høyre for PIC16F88.

Trinn 5: Den holografiske filmen og huset

Den holografiske filmen og huset
Den holografiske filmen og huset
Den holografiske filmen og huset
Den holografiske filmen og huset
Den holografiske filmen og huset
Den holografiske filmen og huset

Den siste konstruksjonen er ganske enkelt å sette kretskortet inn i etuiet og etter programmering feste det med en mengde varmt lim. Tre hull gir tilgang til mikrobryterne foran.

Den bemerkelsesverdige delen av denne klokken er bruken av en holografisk diffusorfilm. Dette er en spesiell film jeg hadde liggende som gir en fin dybde til enheten. Du kan bruke vanlig sporingspapir (der jeg vil flytte kretskortet nærmere fronten), eller hvilken som helst annen diffusor som den som brukes i lysrør. Erfaring om, det eneste den trenger å gjøre er å la deg skille mellom antall lysende lysdioder, eller telle prikkene for å fortelle at tiden vil være vanskelig. Jeg brukte holografisk dispersjonsmateriale fra Physical Optics Coorporation (www.poc.com) med en 30 graders sirkulær dispersjon, superdatamaskinens statusdisplay vist andre steder i instruksjonen brukte en film med en 15x60 grader elliptisk dispersjon. Du kan bruke en blackout -tape for å skjule de blanke innsidene på dagtid for å få et mer mystisk utseende. Du kan til og med la displayet være klart og la folk se innmaten som jeg gjorde. Stativet var to biter aluminium 'L' stang med litt hakket ut i bunnen for å tillate en bøyning. Merk at i disse bildene ble det lagt til ekstra belysning, slik at du kan se skjermdekslene osv. I vanlig stue belysning er lysdiodene mer fremtredende, selv i dagslys.

Trinn 6: Programvare og brukergrensesnitt

Betjeningen av enheten er veldig enkel, ingen spesielle mønstermoduser eller prangende ting. Det eneste den gjør er å vise tiden.

For å stille inn tiden, trykk først på SW1. Enheten vil blinke alle lysdiodene et par ganger, og deretter vil gruppen på 10 timer med lysdioder SW3 øke den valgte gruppen SW2 gå til neste gruppe lysdioder, hver gang alle lysdioder i gruppen blinker kort. Koden er skrevet for Sourceboost 'C' kompilator versjon 6.70. RTC -koden er i t1rtc.c/h -filene, og har en avbruddsfunksjon på T1 -timeren til PIC. T1 -timeren er satt til å avbryte hvert 1. I hvert sekund økes variabelen for tiden. Også en flåttimer telles ned hvert sekund sammen med tiden. Dette brukes til å bestemme når skjermen skal overføres. Avbruddsfunksjonen bruker også T0 -tidsavbruddet for å oppdatere skjermen, og kaller en funksjon i displayet. C Filene display.h/display. C inneholder funksjonene for å oppdatere displayet og vise tiden Filene kontroll. C/h inneholder funksjoner for å stille inn klokkeslett og lese bryterne. Filene holoclock.c/h er hovedløkkene og initialiseringen.

Anbefalt: