Përmbajtje:
Video: Një llambë LED e humorit 1 dollar me ATtiny13 dhe WS2812: 7 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Ndiqni më shumë nga autori:
Kjo është një llambë me kosto të ulët me katër mënyra.
1. Shkëndija e ylberit. Një shkëndijë drite lëviz lart herë pas here dhe gradualisht ndryshon ngjyrën.
2. Shkëlqim ylberi. Një shkëlqim i qëndrueshëm i cili gradualisht ndryshon ngjyrën.
3. Simulimi i zjarrit të qirinjve.
4. Fikur.
Ju mund të ndryshoni modalitetet duke prekur një buton prekjeje në krye. Mënyra aktuale ruhet në kujtesën EEPROM pas fikjes.
Sa i vogël është ATtiny13?
Ideja ishte të merrnim veçori maksimale nga pajisjet minimale, diçka më komplekse sesa ndërprerësi i automatizuar ose termometri, një projekt afër buzës së këtij mikrokontrolluesi të vogël. Në fund të fundit, kufizimet ju bëjnë të mendoni krijues, apo jo? Epo, dukej si në fillim.
Më sfiduese në këtë projekt ishte futja e të gjithë kodit në ATtiny13. Mikrokontrolluesi ka një bajt flash 1K dhe vetëm 64 bajt RAM. Po, kur them "bytes", kam parasysh ato që përbëhen nga tetë bit. 64 bajt për të gjitha variablat tuaja lokale dhe rafte thirrjesh. Për ta bërë më të qartë, merrni parasysh që ne duhet të kontrollojmë 8 LED RGB. Secila prej tyre përcaktohet me 3 bajt (një për kanalin e kuq, jeshil dhe blu respektivisht). Pra, vetëm për të ruajtur gjendjen e 8 LED -ve, do të na duhet të zbatojmë një grup prej 8 strukturash 3 bajt secila dhe një tregues në fillim të këtij grupi do të marrë një bajt më shumë. Kështu, 25 nga 64 bajtë janë jashtë. Ne sapo kemi përdorur 39% të RAM -it dhe nuk e kemi filluar akoma. Për më tepër, për të ruajtur shtatë ngjyra bazë të ylberit, do t'ju duhet 7 × 3 = 21 bajt, kështu që 72% e RAM -it janë jashtë. Epo, sa i përket ngjyrave bazë, unë e teproj: ne nuk kemi nevojë për të gjitha ato në të njëjtën kohë në RAM dhe ato nuk ndryshojnë kurrë, kështu që ato mund të zbatohen si një grup konstant për tu ruajtur në flash në vend të RAM -it. Sidoqoftë, ajo jep një përshtypje të përgjithshme në lidhje me pajisjet e përdorura.
Duke kujtuar deklaratën e Knuth për optimizimin e parakohshëm, fillova të prototipizoja veçmas tre mënyra të llambës për të parë se çfarë do të ndodhte. Unë i kam testuar ato veçmas për t'u siguruar që ata punojnë siç duhet dhe secili i përshtatet mikrokontrolluesit tim. U deshën disa mbrëmje për ta realizuar atë dhe gjithçka shkoi mirë … derisa u përpoqa t'i bashkoja ato brenda deklaratës së ndërrimit. Shërbimi me madhësi avr raportoi një madhësi të seksionit të tekstit 1.5 Kb (me flamurin -s të avr-gcc). Në atë moment qëllimi im fillestar ishte të kapja ca ATtiny25 me blic 2Kb dhe ky mund të kishte qenë fundi i lumtur i kësaj historie.
Por disi ndjeva se pas një optimizimi të konsiderueshëm mund të arrija ta zvogëloja atë kod të keq në 1Kb. Sidoqoftë, u desh edhe një javë për të kuptuar se është e pamundur dhe një javë më shumë për ta arritur atë gjithsesi. Më duhej të shkurtoja një ylber në pesë ngjyra bazë (pa dallim të rëndësishëm vizual). I hoqa qafe deklaratat e rastit dhe përdor një zinxhir nëse-atëherë-nëse për të zvogëluar madhësinë e kodit binar. Animacioni i zjarrit ka nevojë për një gjenerator të numrave pseudo të rastësishëm i cili është shumë i rëndë, kështu që unë zbatova një version të thjeshtuar të LFSR me vlerë fillestare konstante. Nuk më intereson gjatësia e ciklit të plotë PRNG dhe thjesht kërkoj një ekuilibër prejardhjeje midis madhësisë së kodit dhe "animacionit realist të zjarrit". Unë gjithashtu zbatova shumë optimizime të vogla që nuk i mbaj mend tani dhe madje arrita të ndez të gjitha mënyrat përveç zjarrit në çip. Kur më mbaruan idetë, kodi im total ishte rreth 1200 bajt.
Mora afatin dhe kisha lexuar shumë për optimizimin e kodit AVR. Isha afër të heq dorë dhe të rishkruaj gjithçka në gjuhën e asamblesë, por i dhashë shansin e fundit. Gjatë nxitimit përfundimtar të optimizimit, unë kam prerë një ylber në tre ngjyra bazë dhe kam bërë që të tjerët të llogariten në fluturim, inspektova gjithçka dhe ndoqa rekomandimet e optimizimit të AVR dhe më në fund…
avrdude: shkrim flash (1004 bajt):
Shkrimi | #################################################### | 100% 0.90s
Nuk ka nevojë të thuhet se kam përdorur pothuajse të gjithë RAM -in dhe vetëm një bajt të EEPROM për të ruajtur modalitetin aktual. Unë nuk nënkuptoj se ky është një zbatim ideal dhe përfundimtar. Thjesht funksionon dhe i përshtatet mikrokontrolluesit. Jam i sigurt, ju mund ta bëni më mirë. Unë vërtet jam. Unë thjesht dua të ndaj kënaqësinë e zgjidhjes së një problemi në dukje jopraktik që ju e konsideroni gati të pamundur në fillim. "Kështu, hakimi do të thotë të eksplorosh kufijtë e asaj që është e mundur …" -Richard Stallman.
Furnizimet:
1x ATtiny13 MCU (0.28 dollarë = 0.24 dollarë për MCU në paketën SOP-8 dhe 0.04 dollarë për përshtatësin DIP8)
8 x LED WS2812 RGB (rekomandoj një dërrasë ose një copë shirit LED) (0.42 dollarë)
1x buton prekës TTP223 (0,10 dollarë)
1x Përshtatës Micro USB në DIP (0.14 dollarë)
1x rezistencë 10kΩ (<$ 0.01)
1x kondensator qeramik 100nF (<0.01 dollarë)
1x kondensator elektrolitik 10-47µF (<0.01 $)
Gjithsej <0.97 dollarë
Hapi 1: Konfigurimi i softuerit
Ju do të keni nevojë për zinxhir mjetesh avr-gcc për përpilimin e kodit burimor dhe mjetin avrdude për ngarkimin e ROM të mikrokontrolluesit. Procesi i instalimit është shumë i thjeshtë dhe i drejtpërdrejtë, por varet nga sistemi juaj operativ. Nëse përdorni një lloj GNU/Linux, me siguri tashmë keni paketat e duhura në pemën tuaj të depove. Kodi burimor i këtij projekti mund të shkarkohet këtu:
github.com/arduinocelentano/t13_ws2812_lamp
Ju gjithashtu do të keni nevojë për një bibliotekë light_ws2812:
github.com/cpldcpu/light_ws2812
Pasi të keni marrë zinxhirin e veglave avr-gcc dhe projektin, drejtoni terminalin tuaj dhe shkruani kodin e mëposhtëm:
cd shteg/tek/projekti
bëj
Hapi 2: Programimi i Mikrokontrolluesit
Nëse keni një lloj programuesi USBASP, thjesht lidheni atë me Attiny sipas përcaktimit të tij. Zakonisht do të duket kështu, por unë rekomandoj fuqimisht të kontrolloni pinout -in tuaj aktual!
Përndryshe, mund të përdorni një bord Arduino si programues. Hapni Arduino IDE dhe gjeni shembullin e Arduino ISP në menunë "File → Shembuj". Pas ngarkimit të skicës, bordi juaj Arduino vepron si programues. Komentet në kodin e skicës do t'ju japin një çelës për të përcaktuar.
Tani vrapo
bëj flash
për të ndezur MCU dhe
bëj siguresë
për të vendosur copa siguresash.
Hapi 3: Skemat
Recommended:
Llambë e shkëlqyer e humorit: 5 hapa (me fotografi)
Llambë e shkëlqyer e humorit: Ngjyrat dhe emocionet janë të pandashme. Ngjyrat luajnë një rol shumë të rëndësishëm në krijimin e një atmosfere të humorit. Mund të na bëjë të lumtur ose të trishtuar, të frustruar ose të relaksuar, të përqendruar ose të shpërqendruar. E tëra çfarë ju duhet të bëni është të vendosni ngjyrën e duhur për ta bërë ditën tuaj të bukur
Llambë klishe - Një llambë Shumë hije: 5 hapa
Llambë klishe - Një llambë me shumë hije: Ky udhëzues do t'ju tregojë se si të bëni një llambë të thjeshtë me hije të ndryshueshme (ashtë një abazhur)
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe një Pranker audio të pajtueshme me Troll Arduino/Bordi praktik i Shakasë.: 5 Hapa
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe Tran Arduino Compatible Audio Pranker/Joke Board praktike .: Bordi Troll i krijuar nga Patrick Thomas Mitchell i EngineeringShock Electronics, dhe u financua plotësisht në Kickstarter jo shumë kohë më parë. Unë mora shpërblimin disa javë më parë për të ndihmuar në shkrimin e disa shembujve të përdorimit dhe ndërtimin e një biblioteke Arduino në një përpjekje
Vjedhës pengues 'Vetëm në shtëpi'/ Përdorni Attiny13 për të drejtuar një Steppermotor dhe një Servo: 5 Hapa
"Vetëm në shtëpi" Vjedhës pengues/ Përdorni Attiny13 për të drejtuar një Steppermotor dhe një Servo: Ky mund të jetë një nga projektet e mia më të çuditshme akoma :-) Por edhe nëse nuk jeni të interesuar të mbani hajdutët larg, ky projekt mund të përdoret për çdo gjë ku ju nevojë për të drejtuar një motor steppermotor ose servo, apo edhe disa motorë DC me një Attiny13.Mo
DIY-Riciklimi i një tifozi të dyshemesë në një modifikues të dritës së fotografisë/llambë gjithë-në-një: 11 hapa
DIY-Riciklimi i një tifozi të dyshemesë në një modifikues të dritës së fotografisë/llambë gjithëpërfshirëse: Kështu që kohët e fundit po pastroja pranverën dhe hasa në një tifoz të dyshemesë që i ishte djegur motori. Dhe më duhej një llambë tavoline. 2+2 dhe unë bëra një stuhi mendimesh dhe erdhi me idenë për ta kthyer ventilatorin në një modifikues të dritës me gjerësi 20 inç. Lexoni në s