Indholdsfortegnelse:

Minidot 2 - Holoclock: 6 trin
Minidot 2 - Holoclock: 6 trin

Video: Minidot 2 - Holoclock: 6 trin

Video: Minidot 2 - Holoclock: 6 trin
Video: Luban L3 Mini Интеллектуальный ремонтный программатор для телефона 6 13ProMax 2024, Juli
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Nå, måske er holoclock en smule unøjagtig…. Den bruger holografisk dispersionsfilm på forsiden for at give lidt dybde. Grundlæggende er denne instruktive en opdatering til min tidligere Minidot placeret her: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/og genbrug af en masse kode og kredsløb fra min Microdot placeret her: https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD-filer og Sourceboost-kode er inkluderet i de vedhæftede zip-filer. Hvorfor? Den forrige Minidot var alt for kompleks, fra Microdot lærte jeg at lave en RTC på en PIC ved hjælp af kun en 32.768 krystal og behøvede ikke at bruge en særlig RTC -chip. Jeg ville også slippe af med skærmchipsene fra den tidligere Minidot. Så nu er der kun en strømregulatorchip og en PIC16F88 …. bare to chips. De andre årsager til en opdatering var, at min Minidot blev lidt upålidelig på grund af det separate switchboard, og jeg ville have en blød fade mellem prikmønstre som samt en slags omgivende lyssensor til dæmpning af displayet om natten. Den anden Minidot var fast lysstyrke og oplyste et værelse om natten. Enheden blev konstrueret ved hjælp af EagleCad -softwarepakken og Sourceboost -kompilatoren. Du skal have en vis erfaring med elektronik og programmering af PIC -controllere for at starte dette projekt. Bemærk, at dette ikke kan instrueres i enten elektronik eller PIC -programmering, så hold spørgsmål, der er relevante for Miniclock -designet. Se instruktionerne ovenfor eller mange andre instruktioner på dette websted for at få råd om brug af EagleCad eller programmering af PIC'er. Så her er det….. Minidot 2, The Holoclock …… eller Minidot The Next Generation ………….

Trin 1: Kredsløbet

Kredsløbet
Kredsløbet
Kredsløbet
Kredsløbet
Kredsløbet
Kredsløbet

Dette kredsløb ligner meget Microdot. Bemærk charlieplex -arrayet er stort set identisk … kun få stifter er blevet flyttet.

En 20Mhz krystal er blevet tilføjet til Microdot -kredsløbet for at klokke PIC meget hurtigere, dette gør det muligt at scanne arrayet hurtigere og muliggøre implementering af en dæmpningsalgoritme. Dæmpningsalgoritmen var meget vigtig for at få en krydsmønsterfade og funktion af omgivende lys til at fungere. Dette ville have været umuligt med Microdot på grund af den lavere urhastighed, da nogle scanningscyklusser skulle bruges på dæmpning. Se næste afsnit for en beskrivelse af dæmpningsfunktionen. De andre ting at bemærke er brugen af en MCP1252 ladepumpe regulator til at levere 5V, min yndlingschip i øjeblikket. Hvis du ændrede kredsløbet, kunne du bruge en almindelig gammel 7805 …… Jeg har bare en række af disse praktiske chips hængende. Jeg har nu flyttet kontakterne til fronten, sparer fiddling rundt om i uret efter strømafbrydelser for at nulstille tiden, og nu er alt kun et PCB ….. Ingen kabelforstyrrelser. Bemærk også, at der er inkluderet en LDR. Dette bruges i en spændingsdeler, der registreres af A/D -stiften på PIC. Når PIC'en registrerer, at det omgivende lysniveau er lavt (dvs. nattetid), holder dæmpningsalgoritmen charlieplex -arrayet mørkt i flere cyklusser, end når lysniveauet er højt. Jeg kunne ikke finde et LDR -symbol i Eaglecad -biblioteket, så jeg brugte bare et LED -symbol …. lad dig ikke narre, det er en LDR. Se det faktiske billede af printkortet herunder. En ting at bemærke, når du bruger flerfarvede lysdioder i et charliplex-array. Du skal sørge for, at LED'ernes fremspænding er mere eller mindre den samme. Hvis ikke, kan der forekomme vildstrømningsveje, og flere lysdioder vil lyse. Således vil brug af 5 mm eller højere effekt -lysdioder til denne konfiguration ikke fungere, da der normalt er en ganske stor forskel mellem de grønne/blå lysdioder og de rød/gule lysdioder. I dette tilfælde brugte jeg 1206 SMD -leds og især højeffektive grønne/blå lysdioder. Fremspændingerne var dog ikke et problem her. Hvis du ville bruge en blanding af grønne/blå og røde/gule lysdioder med højere effekt i et charlieplex -array, skal du adskille de forskellige farver i to charliplex -arrays. Der er mange forklaringer på charlieplexing, der kan googles …… Jeg vil ikke gå i detaljer her. Jeg overlader det til dig at lave nogle undersøgelser. (Tryk på det lille 'i' ikon i hjørnet af billedet herunder for at se en større version)

Trin 2: Dæmpningsalgoritmen - Charliplexed pulsbreddemodulation

Dæmpningsalgoritmen - Charliplexed pulsbreddemodulation
Dæmpningsalgoritmen - Charliplexed pulsbreddemodulation

Som nævnt tidligere ville jeg have de forskellige prikkemønstre for tiden til at falme gnidningsløst frem for at rykke fra et mønster til et andet. Se videoen for en demonstration. I midten er det nye Minidot -ur til højre det ældre Minidot. Læg mærke til, hvor meget pænere den nye er. (FYI de andre skærme i baggrunden er min Minicray supercomputer statusvisning og min fangede Nebulon -partikel, der driver Minicray i et antimateriale magnetisk indespærringsfelt. Se her: https://www.youtube.com/watch? V = bRupDulR4MEfor en demonstration af nebulon -indeslutningskammeret) Hvis du kigger i koden, skal du åbne filen display.c. Bemærk, at der er fire arrays til kortlægning af tris/port -værdierne for at belyse et bestemt array og to arrays (en mere end Microdot -koden) til at definere, hvilke lysdioder der skal belyses for et bestemt mønster af LEDs.eg:

// LED1 LED2 LED3… usigneret char LEDS_PORTA [31] = {0x10, 0x00, 0x00,… usigneret char LEDS_TRISA [31] = {0xef, 0xff, 0xff,… unsigned char LEDS_PORTB [31] = {0x00, 0x02, 0x04, … Usigneret char LEDS_TRISB [31] = {0xfd, 0xf9, 0xf9,… unsigned char nLedsA [30]; unsigned char nLedsB [30];For at tænde for eksempel LED1 skal du indstille TRIS -registre TRISA: B = 0xef: 0xfd og PORT -registre PORTA: B = 0x10: 0x00 og så videre. Hvis du skriver tris -værdierne ud i binært, vil du bemærke, at der til enhver tid kun er to udgange aktiveret. De andre er alle indstillet til Tri-state (dermed TRIS-register). Dette er centralt for charlieplexing. Du vil også bemærke, at den ene udgang altid er en logisk '1', og den anden altid er en logisk '0' …. hvis retning tænder, hvilken LED der er mellem disse to udgangslinjer. Den sidste værdi i porten/tris arrays er en nulværdi for slet ikke at tænde nogen LED. I Microdot cyklede opdateringsdisplay -funktionen kontinuerligt gennem et andet array (nLeds ) for at se, om den pågældende LED skulle belyses. Hvis det var tilfældet, blev de tilsvarende tris/port -værdier indstillet og LED'en tændt i en periode. Ellers blev nulværdien sendt til PIC'erne TRIS/PORT -registre, og ingen LED blev tændt i en periode. Når det var gjort hurtigt nok gav dette et mønster. Resten af programmet vil med jævne mellemrum læse RTC -værdierne og udgøre et godt tilfældigt mønster i det array …. ikke) så ville der blive brugt ekstra perioder på at sende nulværdier, hvis displayet skulle dæmpes …. for fuld lysstyrke ville der ikke blive brugt ekstra perioder. Når det gentages, hvis der var mange nulperioder for de oplyste lysdioder, ville displayet være svagt. I virkeligheden er dette multiplexeret pulsbreddemodulation…..eller fordi hardwaren er konfigureret i en charlieplex arrangement, derefter charlieplexed pulsbreddemodulation. Det andet diagram herunder viser den grundlæggende opsætning for dette. Jeg kalder dette en scanningsramme. De første 30 perioder til rammen bruges til at gå gennem lysdioderne …. og et variabelt antal ekstra perioder definerer, hvor dæmpet displayet bliver. Denne cyklus gentages. Flere nulperioder betyder mindre tid for en LED til at være tændt pr. Ramme (fordi antallet af perioder steg). Bemærk, at den lodrette akse ikke betyder spændingsniveau. Den faktiske tilstand af stifterne, der går til lysdioderne, varierer afhængigt af dens position i charlieplex -arrayet ….. i diagrammet betyder det bare, at det er tændt eller slukket. Dette betød også, at rammens samlede længde i tid også steg, hvilket reducerede opdateringen sats. Da lysdioderne blev svagere, ville de begynde at flimre med andre ord. Så denne metode er kun nyttig i et vist omfang. For uret var det OK. En funktion kaldes periodisk, der læser A/D -konverteren på PIC og indstiller dette lysstyrkeniveau. Hvis du læser koden, kontrollerer den også, om lysdioden nærmest LDR er tændt, og foretager ikke nogen niveauindstilling i så fald, så stopper displayet uventet, når mønsteret ændres. Næste krydsfade -funktion.

Trin 3: Dæmpningsalgoritme - Cross Fade -effekten og dobbeltbuffering

Dæmpningsalgoritme - Cross Fade -effekten og dobbeltbuffering
Dæmpningsalgoritme - Cross Fade -effekten og dobbeltbuffering

Overgangen mellem det ene mønster og det næste var tidligere umiddelbar. Til dette ur ønskede jeg at vise det ene mønster gradvist faldende i lysstyrke og det næste mønster gradvist stigende … dvs. en krydsfade.

Jeg behøvede ikke at have individuelle lysdioder for at kunne styres ved separate lysstyrkeniveauer for at krydse fade. Bare brug for det første mønster ved en lysstyrke og det andet ved en lav lysstyrke. Så over en kort periode ville jeg reducere lysstyrken på den første lidt og øge den anden …..dette ville fortsætte indtil det andet mønster var fuldstændigt. Derefter ville uret vente til det næste mønster skulle vises, og der ville være en anden overgang. Således havde jeg brug for at gemme to mønstre. Den, der aktuelt vises, og det andet mønster, der var ved at blive vist. Disse findes i arrays nLedsA og nLedsB. (bemærk intet at gøre med porte i dette tilfælde). Dette er den dobbelte buffer. Funktionen update_display () blev ændret til at gå gennem otte rammer og vise et antal rammer fra først det ene array, derefter det andet. Ændring af antallet af rammer tildelt til hver buffer gennem de otte cykler definerede, hvor lyst hvert mønster ville være. Da vi var færdige med at cykle mellem buffere, skiftede vi 'display' og 'næste display' buffere rundt, så den mønstergenererende funktion ville derefter kun skrive til 'næste display' buffer. Diagrammet herunder viser dette forhåbentlig. Du bør kunne se, at overgangen tager 64 scanningsrammer. På billedet viser den lille indsats scanningsrammediagrammet fra den foregående side kunstigt nedskaleret. Et ord om re-fresh rate. Alt dette skal gøres meget hurtigt. Vi har nu to niveauer af ekstra beregning, et for den omgivende skærmdæmpning og et for de otte rammecyklusser, der bruges på at lave en overgang mellem to buffere. Således skulle denne kode skulle skrives samlet, men er god nok i 'C'.

Trin 4: Konstruktion - printkortet

Konstruktion - PCB
Konstruktion - PCB
Konstruktion - PCB
Konstruktion - PCB

Dette er ret ligetil. Bare en dobbeltsidet print med nogle SMD -komponenter på toppen. Beklager, hvis du er en gennemgående person, men det er meget lettere at lave SMD -projekter …. uden huller at bore. Du skal have en stabil hånd, en temperaturstyret loddemetal og masser af lys og forstørrelse for at gøre tingene lettere.

Det eneste bemærkelsesværdige ved konstruktionen af printkortet er inkluderingen af et stik til programmering af PIC. Dette forbinder til ICSP -benene på PIC'en, og du skal bruge en ICSP -programmør. Igen brugte jeg en praktisk til mit junkbox -stik. Du kan udelade dette og bare lodde ledninger til puderne, hvis du vil. Alternativt, hvis du kun har en socketed programmer, kan du lave en header, der sættes i din socket og derefter lodde den til ICSP -pads. Hvis du gør dette, skal du afbryde Rx og tilslutte Ry, som bare er nul ohm -links (jeg bruger bare en loddeklat). Dette afbryder resten af kredsløbets strøm fra PIC'en, så det ikke forstyrrer programmeringen. En programmeret programmør bruger bare ICSP -benene som en ICSP -programmør, der er virkelig ingen magi involveret. Du skal også gøre dette, hvis du ved en fejl har glemt at lægge en forsinkelse i koden, før RTC starter. For 16F88 er ICSP -programmeringsstifterne de samme som benene, der er nødvendige for den 32.768 kHz krystal, der bruges til RTC …… hvis den eksterne T1 -oscillator (dvs. RTC) kører, før ICSP kan starte sit arbejde, vil programmeringen mislykkes. Normalt hvis der er en nulstilling på MCLR -stiften, og der er en forsinkelse, kan ICSP -data sendes til disse ben, og programmeringen kan starte korrekt. Men ved at isolere strømmen til PIC'en kan ICSP -programmereren (eller programmeret programmeret med en header) styre strømmen til enheden og tvinge et program. De andre ting at bemærke er, at krystalpuderne på printkortet oprindeligt var designet til SMD -krystaller. Jeg kunne ikke vente på, at nogle blev leveret, så urkrystallen på 32,768 kHz blev loddet til toppen som vist, og 20 MHz krystallen blev fastgjort ved at bore et par huller i puderne, stikke krystallen ind gennem bunden og lodde på top. Du kan se stifterne lige til højre for PIC16F88.

Trin 5: Den holografiske film og hus

Den holografiske film og bolig
Den holografiske film og bolig
Den holografiske film og bolig
Den holografiske film og bolig
Den holografiske film og bolig
Den holografiske film og bolig

Den sidste konstruktion er simpelthen at sætte printkortet i sagen og efter programmering anbringe det med et stykke varm lim. Tre huller giver adgang til mikrokontakterne forfra.

Den bemærkelsesværdige del af dette ur er brugen af en holografisk diffusorfilm. Dette er en særlig film, jeg havde liggende, der giver en god dybde til enheden. Du kan bruge almindeligt sporingspapir (hvor jeg vil flytte printkortet tættere på forsiden) eller en hvilken som helst anden diffuser som dem, der bruges i lysstofrør. Erfaring om, det eneste, det skal gøre, er at give dig mulighed for at skelne mellem antallet af oplyste lysdioder, ellers kan det være svært at tælle prikkerne for at fortælle, at tiden vil være. Jeg brugte holografisk dispersionsmateriale fra Physical Optics Coorporation (www.poc.com) med en 30 graders cirkulær dispersion, supercomputerstatusdisplayet vist andetsteds i instruktionen brugte en film med en 15x60 grader elliptisk dispersion. Du kan bruge noget mørklægningstape til at skjule de skinnende indvortes i dagtimerne for at få et mere mystisk udseende. Du kan endda lade displayet stå klart og lade folk se indersiden, som jeg gjorde. Stativet var to bits aluminiums 'L' stang med en smule hugget i bunden for at tillade en bøjning. Bemærk på disse billeder ekstra belysning blev tilføjet, så du kan se displaydæksler osv. I normal stue belysning er LED'erne mere fremtrædende, selv i dagslys.

Trin 6: Software og brugergrænseflade

Betjeningen af enheden er meget enkel, ingen specielle mønstertilstande eller prangende ting. Det eneste, den gør, er at vise tiden.

For at indstille klokkeslættet skal du først trykke på SW1. Enheden vil blinke alle lysdioder et par gange, og derefter vil gruppen af 10 -timers lysdioder SW3 øge den valgte gruppe SW2 til den næste gruppe af lysdioder, hver gang alle lysdioder i gruppen blinker kort. Koden er skrevet til Sourceboost 'C' compiler version 6.70. RTC -koden er i t1rtc.c/h -filerne og har en afbrydelsesfunktion på T1 -timeren i PIC. T1 -timeren er indstillet til at afbryde hvert 1. sekund. For hvert sekund øges variablen for tiden. Også en tick -timer tælles ned hvert sekund sammen med tiden. Dette bruges til at bestemme, hvornår displayet skal skiftes. Afbrydelsesfunktionen bruger også T0 -timer -afbrydelsen til at opdatere displayet, og kalder en funktion i displayet. C Filerne display. H/display. C indeholder funktionerne til at opdatere displayet og vise tiden Filerne kontrollerer. C/h indeholder funktioner til at indstille tiden og læse switches Filerne holoclock.c/h er de vigtigste sløjfer og initialisering.

Anbefalede: