Indholdsfortegnelse:
- Trin 1: Kredsløbet
- Trin 2: Dæmpningsalgoritmen - Charliplexed pulsbreddemodulation
- Trin 3: Dæmpningsalgoritme - Cross Fade -effekten og dobbeltbuffering
- Trin 4: Konstruktion - printkortet
- Trin 5: Den holografiske film og hus
- Trin 6: Software og brugergrænseflade
Video: Minidot 2 - Holoclock: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:30
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
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
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
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
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 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:
Arduino bil omvendt parkering alarmsystem - Trin for trin: 4 trin
Arduino bil omvendt parkering alarmsystem. Trin for trin: I dette projekt vil jeg designe en simpel Arduino bil omvendt parkeringssensorkreds ved hjælp af Arduino UNO og HC-SR04 ultralydssensor. Dette Arduino -baserede bilomvendt alarmsystem kan bruges til en autonom navigation, robotafstand og andre rækkevidde
Trin for trin pc -bygning: 9 trin
Trin for trin PC Building: Supplies: Hardware: MotherboardCPU & CPU -køler PSU (strømforsyningsenhed) Opbevaring (HDD/SSD) RAMGPU (ikke påkrævet) CaseTools: Skruetrækker ESD -armbånd/mathermal pasta m/applikator
Tre højttalerkredsløb -- Trin-for-trin vejledning: 3 trin
Tre højttalerkredsløb || Trin-for-trin vejledning: Højttalerkredsløb styrker lydsignalerne, der modtages fra miljøet til MIC og sender det til højttaleren, hvorfra forstærket lyd produceres. Her vil jeg vise dig tre forskellige måder at lave dette højttalerkredsløb på:
Trin-for-trin uddannelse i robotik med et sæt: 6 trin
Trin-for-trin uddannelse i robotteknologi med et kit: Efter ganske få måneder med at bygge min egen robot (se alle disse), og efter at jeg to gange havde dele mislykkedes, besluttede jeg at tage et skridt tilbage og tænke min strategi og retning. De flere måneders erfaring var til tider meget givende, og
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)