Innehållsförteckning:

Minidot 2 - Holoclock: 6 steg
Minidot 2 - Holoclock: 6 steg

Video: Minidot 2 - Holoclock: 6 steg

Video: Minidot 2 - Holoclock: 6 steg
Video: VectrexRoli´s Pokémon Mini Special (Nintendo ポケモンミニ) 2024, Juli
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Tja, kanske holoclock är lite felaktigt…. Det använder holografisk spridningsfilm på framsidan för att ge lite djup. I grund och botten är denna instruerbara en uppdatering till min tidigare Minidot som finns här: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/och återanvändning av mycket kod och kretsar från min Microdot som finns här: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD-filer och Sourceboost-kod ingår i de bifogade zip-filerna. Varför? Den tidigare Minidot var alltför komplex, från Microdot lärde jag mig hur man gör en RTC på en PIC med endast en 32.768 kristall och behövde inte använda ett speciellt RTC -chip. Jag ville också bli av med skärmarna från den tidigare Minidot. Så nu finns det bara ett effektregulatorchip och en PIC16F88 …. bara två chips. De andra orsakerna till en uppdatering var att min Minidot blev lite otillförlitlig på grund av det separata växelkortet och jag ville ha en mjuk blekning mellan prickmönster som samt en slags sensor för omgivande ljus för att dämpa skärmen på natten. Den andra Minidot var fast ljusstyrka och belyste ett rum på natten. Enheten konstruerades med hjälp av EagleCad -mjukvarupaketet och Sourceboost -kompilatorn. Du måste ha lite erfarenhet av elektronik och programmering av PIC -styrenheter för att starta detta projekt. Observera att detta inte är en instruktion om vare sig elektronik eller PIC -programmering, så behåll frågor som är relevanta för Miniclock -designen. Se instruktionerna ovan eller många andra instruktioner på denna webbplats för råd om hur du använder EagleCad eller programmerar PIC. Så här är det….. Minidot 2, The Holoclock …… eller Minidot The Next Generation ………….

Steg 1: Kretsen

Kretsen
Kretsen
Kretsen
Kretsen
Kretsen
Kretsen

Denna krets är väldigt lik Microdot. Observera att charlieplex -arrayen är praktiskt taget identisk … bara några få stift har flyttats.

En 20Mhz kristall har lagts till i Microdot -kretsen för att klocka PIC mycket snabbare, detta gör att arrayen kan skannas snabbare och möjliggör implementering av en dimningsalgoritm. Dimmningsalgoritmen var mycket viktig för att få en tvärmönsterfade och funktion för omgivande ljus att fungera. Detta skulle ha varit omöjligt med Microdot, på grund av den lägre klockhastigheten eftersom vissa skanningscykler behövde läggas på dimning. Se nästa avsnitt för en beskrivning av dimningsfunktionen. De andra sakerna att notera är användningen av en MCP1252 laddpumpregulator för att leverera 5V, mitt favoritchip för tillfället. Om du ändrade kretsen kan du använda en vanlig gammal 7805 …… Jag har bara ett antal av dessa praktiska marker som hänger kvar. Jag har nu flyttat omkopplarna till framsidan, sparar bus runt klockans baksida efter strömavbrott för att återställa tiden och nu är allt bara ett kretskort …. Inga kabelfrågor. Det är också viktigt att inkludera en LDR. Detta används i en spänningsdelare som avkänns av A/D -stiftet på PIC. När PIC känner av att den omgivande ljusnivån är låg (dvs. nattetid) håller dimningsalgoritmen charlieplex -arrayen mörk under fler cykler än när ljusnivån är hög. Jag kunde inte hitta en LDR -symbol i Eaglecad -biblioteket, så jag använde bara en LED -symbol …. låt dig inte luras, det är en LDR. Se den faktiska bilden av kretskortet nedan. En sak att notera när du använder flerfärgade lysdioder i en charliplex-array. Du måste se till att lysdiodernas framspänning är mer eller mindre densamma. Om inte, kan löpande strömvägar uppstå och flera lysdioder tänds. Därför fungerar inte användning av lysdioder på 5 mm eller högre för denna konfiguration eftersom det vanligtvis är ganska stor skillnad mellan de gröna/blåa lysdioderna och de röda/gula lysdioderna. I det här fallet använde jag 1206 SMD -lysdioder och högeffektiva grön/blå lysdioder i synnerhet. Framspänningarna var dock inget problem här. Om du ville använda en blandning av grön/blå och röd/gul högre effekt -lysdioder i en charlieplex -array måste du separera de olika färgerna i två charliplex -matriser. Det finns många förklaringar till charlieplexing som kan googlas …… Jag ska inte gå in på detaljer här. Jag överlåter åt dig att göra en undersökning. (Tryck på den lilla "i" -ikonen i hörnet på bilden nedan för att se en större version)

Steg 2: Dimningsalgoritmen - Charliplexed pulsbreddsmodulering

Dimningsalgoritmen - Charliplexed pulsbreddsmodulering
Dimningsalgoritmen - Charliplexed pulsbreddsmodulering

Som nämnts tidigare ville jag att de olika prickmönstren för tiden bleknade smidigt snarare än att rycka från ett mönster till ett annat. Se videon för en demonstration. I mitten är den nya Minidot -klockan, till höger är den äldre Minidot. Lägg märke till hur mycket snyggare den nya är. (FYI de andra bildskärmarna i bakgrunden är min Minicray -superdatorstatusvisning och min fångade Nebulon -partikel som driver Minicray i ett magnetiskt inneslutningsfält. Se här: https://www.youtube.com/watch? V = bRupDulR4ME för en demonstration av nebulonförvaringskammaren) Om du tittar i koden öppnar du filen display.c. Observera att det finns fyra matriser för att kartlägga tris/port -värdena för att belysa en viss grupp och två matriser (en mer än Microdot -koden) för att definiera vilka lysdioder som ska belysas för ett visst mönster av lysdioder. Eg:

// LED1 LED2 LED3… osignerad rödning LEDS_PORTA [31] = {0x10, 0x00, 0x00,… osignerad röding LEDS_TRISA [31] = {0xef, 0xff, 0xff,… osignerad rödning LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Osignerad char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];För att tända LED1 till exempel måste du ställa in TRIS -registren TRISA: B = 0xef: 0xfd och PORT -registren PORTA: B = 0x10: 0x00 och så vidare. Om du skriver ut tris -värdena i binärt kommer du att notera att det bara är två utgångar när som helst. De andra är alla inställda på Tri-state (därav TRIS-register). Detta är centralt för charlieplexing. Du kommer också att notera att en utgång alltid är ett logiskt '1' och den andra alltid är ett logiskt '0' … vars riktning tänds beroende på vilken LED som är mellan dessa två utgångslinjer. Det sista värdet i porten/tris matriser är ett nollvärde för att släcka ingen LED alls. I Microdot cyklade uppdateringsdisplayfunktionen kontinuerligt genom en annan array (nLeds ) för att se om just den lysdioden skulle lysa. Om det var det, sattes motsvarande tris/port -värden och lysdioden tändes under en tid. Annars skickades nollvärdet till PICs TRIS/PORT -registren och ingen lysdiod tändes under en viss tid. När det var gjort tillräckligt snabbt gav detta ett mönster. Resten av programmet läste regelbundet RTC -värdena och utgjorde ett trevligt slumpmässigt mönster i den matrisen …. inte) då skulle extra perioder läggas på att skicka nollvärden om displayen skulle dämpas …. för full ljusstyrka skulle inga extra perioder läggas till. När det upprepas om det var många nollperioder för de upplysta lysdioderna, skulle displayen vara svag. I själva verket är detta multiplexerad pulsbreddsmodulering … eller för att hårdvaran är konfigurerad i ett charlieplexarrangemang, sedan charlieplexed pulsbreddsmodulering. Det andra diagrammet nedan visar den grundläggande inställningen för detta. Jag kallar detta en skanningsram. De första 30 perioderna till ramen används för att gå igenom lysdioderna …. och ett variabelt antal extra perioder definierar hur svag skärmen ska vara. Denna cykel upprepas. Fler nollperioder betyder mindre tid för en LED att lysa per bildruta (eftersom antalet perioder ökade). Observera att den vertikala axeln inte betyder spänningsnivå. Det faktiska tillståndet för stiften som går till lysdioderna varierar beroende på dess position i charlieplex -arrayen ….. i diagrammet betyder det bara att den är på eller av. Detta innebar också att ramens totala längd i tid också ökade, vilket minskar uppdateringen Betygsätta. När lysdioderna blev svagare skulle de börja flimra med andra ord. Så den här metoden är endast användbar till viss del. För klockan var det OK. En funktion kallas intermittent som läser A/D -omvandlaren på PIC och ställer in denna ljusstyrka. Om du läser koden, kontrollerar den också om lysdioden närmast LDR är tänd, och gör inte någon nivåinställning i så fall, detta stoppar displayen oväntat att lysa när mönstret ändrades. Nästa cross fade -funktionen.

Steg 3: Dämpningsalgoritm - Cross Fade -effekten och dubbel buffring

Dämpningsalgoritm - Cross Fade -effekten och dubbel buffring
Dämpningsalgoritm - Cross Fade -effekten och dubbel buffring

Övergången mellan ett mönster och nästa var tidigare omedelbar. För den här klockan ville jag visa ett mönster som gradvis minskar i ljusstyrka och nästa mönster gradvis ökar … dvs en tvärfärgning.

Jag behövde inte ha individuella lysdioder för att kunna styras i separata ljusstyrkenivåer för att göra en tvärfärgning. Behövde bara det första mönstret med en ljusstyrka och det andra med låg ljusstyrka. Sedan under en kort period skulle jag minska ljusstyrkan på den första lite och öka den andra ….. detta fortsätter tills det andra mönstret är fullt ut. Sedan väntade klockan tills nästa mönster skulle visas och det skulle bli en ny övergång. Således behövde jag lagra två mönster. Den som visas just nu och det andra mönstret som skulle visas. Dessa finns i matriser nLedsA och nLedsB. (notera ingenting att göra med portar i det här fallet). Detta är den dubbla bufferten. Funktionen update_display () modifierades för att bläddra igenom åtta bildrutor och visa ett antal ramar från först en array, sedan den andra. Genom att ändra antalet ramar som tilldelats varje buffert under de åtta cyklerna definierades hur ljust varje mönster skulle vara. När vi slutade cykla mellan buffertarna bytte vi "display" och "next display" buffertar runt, så att mönstergenereringsfunktionen sedan bara skulle skriva till "nästa display" buffert. Diagrammet nedan visar detta förhoppningsvis. Du bör kunna se att övergången kommer att ta 64 skanningsramar. På bilden visar det lilla inlägget skanningsramdiagrammet från föregående sida artigt skalat ner. Ett ord om re-fresh rate. Allt detta måste göras mycket snabbt. Vi har nu två nivåer av extra beräkning, en för den omgivande bildskärmens dimmighet och en för de åtta bildcyklerna som används för att göra en övergång mellan två buffertar. Denna kod var alltså bör skrivas i sammansättning, men är tillräckligt bra i 'C'.

Steg 4: Konstruktion - kretskortet

Konstruktion - kretskortet
Konstruktion - kretskortet
Konstruktion - kretskortet
Konstruktion - kretskortet

Detta är ganska enkelt. Bara en dubbelsidig PCB med några SMD -komponenter på toppen. Förlåt om du är en genomgående hålmänniska, men det är mycket lättare att göra SMD -projekt …. utan hål att borra. Du bör ha en stadig hand, en temperaturkontrollerad lödstation och mycket ljus och förstoring för att underlätta.

Det enda viktiga i konstruktionen av kretskortet är införandet av en kontakt för programmering av PIC. Detta ansluter till ICSP -stiften på PIC och du behöver en ICSP -programmerare. Återigen använde jag en praktisk till min skräpbox -kontakt. Du kan utelämna detta och bara lödtrådar till dynorna om du vill. Alternativt, om du bara har en programmerad plugg, kan du skapa en rubrik som ansluts till ditt uttag och sedan löda den till ICSP -plattorna. Om du gör detta, koppla sedan bort Rx och anslut Ry som bara är noll ohm -länkar (jag använder bara en lödklump). Detta kommer att koppla bort resten av kretsströmmen från PIC så att det inte stör programmeringen. En programmerad programmerare använder bara ICSP -stiften som en ICSP -programmerare, det är ingen magi involverad egentligen. Du måste också göra detta om du av misstag har glömt att försena koden innan RTC startar. För 16F88 är ICSP -programmeringsstiften desamma som stiften som behövs för den 32.768 kHz kristall som används för RTC …… om den externa T1 -oscillatorn (dvs RTC) körs innan ICSP kan starta sitt arbete, då misslyckas programmeringen. Normalt om det finns en återställning på MCLR -stiftet och det finns en fördröjning kan ICSP -data skickas till dessa stift och programmeringen kan starta korrekt. Men genom att isolera strömmen till PIC: n kan ICSP -programmeraren (eller en programmerad plug -in med en rubrik) styra enheten till enheten och tvinga fram ett program. De andra sakerna att notera är att kristallkuddarna på kretskortet ursprungligen var utformade för SMD -kristaller. Jag kunde inte vänta på att några skulle levereras så 32.768 kHz klockkristall löddes till toppen som visas, och 20 MHz kristallen fästes genom att borra ett par hål i dynorna, sticka in kristallen genom botten och lödda på topp. Du kan se stiften precis till höger om PIC16F88.

Steg 5: Den holografiska filmen och höljet

Den holografiska filmen och bostäderna
Den holografiska filmen och bostäderna
Den holografiska filmen och bostäderna
Den holografiska filmen och bostäderna
Den holografiska filmen och bostäderna
Den holografiska filmen och bostäderna

Den sista konstruktionen är helt enkelt att sätta in kretskortet i höljet och efter programmering fästa det med en klick varmt lim. Tre hål ger tillgång till mikrobrytarna framifrån.

Den anmärkningsvärda delen av denna klocka är användningen av en holografisk diffusorfilm. Det här är en speciell film jag hade liggande som ger ett bra djup till enheten. Du kan använda vanligt spårpapper (där jag skulle flytta kretskortet närmare framsidan) eller vilken annan diffusor som helst som används i lysrörsarmaturer. Erfarenhet om, det enda du behöver göra är att låta dig skilja mellan antalet belysta lysdioder, annars räknar du prickarna för att berätta att tiden blir svår. Jag använde holografiskt spridningsmaterial från Physical Optics Coorporation (www.poc.com) med en 30 graders cirkulär dispersion, superdatorstatusdisplayen som visas någon annanstans i instruktionen använde en film med en 15x60 grader elliptisk dispersion. Du kan använda lite blackout -tejp för att dölja de glänsande inre under dagtid för att få ett mer mystiskt utseende. Du kan till och med låta displayen vara klar och låta människor se inre som jag gjorde. Stativet var två bitar av aluminium 'L' stång med lite hackad i botten för att tillåta en böjning. Observera i dessa bilder extra belysning har lagts till så att du kan se skärmens omslag etc. I normal vardagsrumsbelysning är lysdioderna mer framträdande, även i dagsljus.

Steg 6: Programvara och användargränssnitt

Enhetens funktion är mycket enkel, inga speciella mönsterlägen eller prickiga grejer. Det enda den gör är att visa tiden.

För att ställa in tiden, tryck först på SW1. Enheten kommer att blinka alla lysdioder några gånger och sedan tio timmars grupp av lysdioder SW3 ökar den valda gruppen SW2 flyttas till nästa grupp av lysdioder, varje gång blinkar alla lysdioder i gruppen kort. Koden är skriven för Sourceboost 'C' kompilator version 6.70. RTC -koden finns i t1rtc.c/h -filerna och har en avbrottsfunktion på T1 -timern i PIC. T1 -timern är inställd på att avbryta var 1: e sekund. För varje sekund ökas variabeln för tiden. Även en tick -timer räknas ner varje sekund tillsammans med tiden. Detta används för att bestämma när skärmen ska överföras. Avbrottsfunktionen använder också T0 -timeravbrottet för att uppdatera displayen, kallar en funktion i displayen. C Filerna display.h/display.c innehåller funktionerna för att uppdatera displayen och visa tiden Filerna kontroll.c/h innehåller funktioner för att ställa in tiden och läsa omkopplarna Filerna holoclock.c/h är huvudslingorna och initialiseringen.

Rekommenderad: