64 Pixel RGB LED էկրան - մեկ այլ Arduino կլոն. 12 քայլ (նկարներով)
64 Pixel RGB LED էկրան - մեկ այլ Arduino կլոն. 12 քայլ (նկարներով)
Anonim

Այս էկրանը հիմնված է 8x8 RGB LED մատրիցի վրա: Փորձարկման նպատակով այն միացված էր Arduino- ի ստանդարտ տախտակին (Diecimila) `օգտագործելով 4 հերթափոխի գրանցամատյան: Աշխատանքի հասնելուց հետո այն մշտականացրեցի գործվածքային տախտակի վրա: Տեղափոխման գրանցամատյանները 8 բիթ լայնությամբ են և հեշտությամբ փոխկապակցված են SPI արձանագրության հետ: Գույները խառնելու համար օգտագործվում է զարկերակի լայնության մոդուլյացիա, դրա մասին ավելի ուշ: MCU- ի RAM- ի մի մասը օգտագործվում է որպես framebuffer ՝ պատկերը պահելու համար: Տեսահոլովակի RAM- ը վերլուծվում է հետին պլանում ընդհատվող ռեժիմով, այնպես որ օգտվողը կարող է այլ օգտակար բաներ անել, ինչպիսիք են համակարգչի հետ խոսելը, կոճակները կարդալը և պոտենցիոմետրերը: Լրացուցիչ տեղեկություններ «Arduino» - ի մասին ՝ www.arduino.cc

Քայլ 1. Գույների խառնուրդի զարկերակի լայնության մոդուլյացիա

Իմպուլսի լայնության մոդուլ - Ի՞ՆՉ: Իմպուլսի լայնության մոդուլյացիան, ըստ էության, բավականին արագ միացնում և անջատում է էլեկտրական սարքի սնուցվող էներգիան: Օգտագործելի հզորությունը ստացվում է քառակուսի ալիքների ֆունկցիայի մաթեմատիկական միջինից, որը վերցված է մեկ ժամանակահատվածի միջակայքում: Որքան երկար գործառույթը մնում է ON դիրքում, այնքան ավելի շատ էներգիա եք ստանում: PWM- ն նույն ազդեցությունն ունի LED- ների պայծառության վրա, ինչ AC լամպերի լուսամփոփը: Առաջիկա խնդիրն է անհատապես վերահսկել 64 RGB LEDS (= 192 միայնակ LED) պայծառությունը էժան և հեշտ եղանակով, այնպես որ կարելի է ստանալ ամբողջը գույների սպեկտր: Անկալի է, որ չլինի թարթող կամ այլ անհանգստացնող ազդեցություն: Մարդկային աչքի պայծառության ոչ գծային ընկալումը այստեղ հաշվի չի առնվի (օրինակ ՝ 10% և 20% պայծառության միջև տարբերությունը «ավելի մեծ» է թվում, քան 90% –ից 100% -ի միջև): Պատկերը (1) պատկերում է աշխատանքի սկզբունքը PWM ալգորիթմը: Ասացեք, որ կոդին տրվում է 7 արժեք LED լուսավորության համար (0, 0): Բացի այդ, նա գիտի, որ պայծառության մեջ կա առավելագույնը N քայլ: Կոդը վարում է N օղակ `պայծառության բոլոր հնարավոր մակարդակների և բոլոր անհրաժեշտ օղակների համար` բոլոր տողերում յուրաքանչյուր LED- ի սպասարկման համար: Այն դեպքում, երբ լուսավորության օղակի x հանգույցի հաշվիչը 7 -ից փոքր է, LED- ը միացված է: Եթե այն 7 -ից մեծ է, LED- ն անջատված է: Շատ արագ դա անելով բոլոր LED- ների, պայծառության մակարդակների և բազային գույների (RGB) դեպքում, յուրաքանչյուր LED- ը կարող է անհատապես ճշգրտվել `ցանկալի գույնը ցույց տալու համար: Օսլիլոսկոպով չափումները ցույց են տվել, որ ցուցադրման թարմացման կոդը պահանջում է պրոցեսորի մոտ 50% ժամանակ: Մնացածը կարող են օգտագործվել համակարգչի հետ սերիական հաղորդակցություն կատարելու, կոճակներ կարդալու, RFID ընթերցողի հետ խոսելու, I ուղարկելու համար2C տվյալներ այլ մոդուլներին…

Քայլ 2. Խոսակցություն Shift գրանցամատյանների և LED- ների հետ

Հերթափոխ ռեգիստրը սարք է, որը թույլ է տալիս բեռնել տվյալները հաջորդաբար և զուգահեռ ելքով: Հակառակ գործողությունը հնարավոր է նաև համապատասխան չիպի միջոցով: Արդուինոյի կայքում տեղակայված է հերթափոխի գրանցամատյանների վերաբերյալ լավ ձեռնարկ: LED- ները առաջնորդվում են 74HC595 տիպի 8-բիթանոց հերթափոխային մատյաններով: Յուրաքանչյուր նավահանգիստ կարող է սնուցել կամ խորտակել մոտ 25 մԱ հոսանք: Ընկղմված կամ աղբյուր ունեցող մեկ չիպի ընդհանուր հոսանքը չպետք է գերազանցի 70 մԱ: Այս չիպսերը չափազանց էժան են, ուստի մի կտորից ավելի քան 40 ցենտ չվճարեք: Քանի որ լուսադիոդներն ունեն ընթացիկ / լարման բնութագրիչ, պետք է լինեն ընթացիկ սահմանափակող ռեզիստորներ: Օհմի օրենքի օգտագործմամբ. R = (V - Vf) / IR = սահմանափակող դիմադրություն, V = 5V, Vf = LED- ի առաջի լարումը, I = ցանկալի հոսանք Կարմիր LED ունեն մոտ 1.8 Վ լարման առաջընթաց, կապույտ և կանաչ միջակայքը ՝ 2.5 Վ -ից մինչև 3.5 Վ: Դա որոշելու համար օգտագործեք պարզ մուլտիմետր: Գույնի ճիշտ վերարտադրության համար պետք է հաշվի առնել մի քանի բան. Մարդու աչքի սպեկտրալ զգայունություն (կարմիր/կապույտ `վատ, կանաչ` լավ), LED- ի արդյունավետությունը որոշակի ալիքի և հոսանքի վրա: Գործնականում պարզապես վերցնում են 3 պոտենցիոմետր և կարգավորում դրանք մինչև LED- ն ցույց տա պատշաճ սպիտակ լույս: Իհարկե, առավելագույն LED հոսանքը չպետք է գերազանցվի: Այն, ինչ այստեղ նույնպես կարևոր է, այն է, որ շարքերը վարող հերթափոխի գրանցամատյանը պետք է հոսանք մատակարարի 3x8 LED- ներին, ուստի ավելի լավ է ընթացքը չափազանց բարձր չշեղել: Ես հաջողակ էի բոլոր LED- ների համար սահմանափակող 270 Օմ դիմադրողականությամբ, բայց դա, իհարկե, կախված է LED մատրիցի արտադրությունից: Տեղափոխման մատյանները միացված են SPI սերիայի հետ: SPI = Սերիալ ծայրամասային միջերես (Պատկեր (1)): Հակառակ համակարգիչների սերիական նավահանգիստներին (ասինխրոն, ժամացույցի ազդանշան չկա), SPI- ին անհրաժեշտ է ժամացույցի գիծ (SRCLK): Այնուհետև կա ազդանշանային գիծ, որը սարքին ասում է, թե երբ են տվյալները վավեր (չիպի ընտրություն / կողպում / RCLK): Վերջապես, կա երկու տվյալների տող, մեկը կոչվում է MOSI (master out slave in), մյուսը ՝ MISO (master in slave out): SPI- ն օգտագործվում է ինտեգրալ սխեմաների միացման համար, ինչպես ես2C. Այս նախագծին անհրաժեշտ են MOSI, SRCLK և RCLK: Բացի այդ, օգտագործվում է նաև միացման գիծը (G): SPI ցիկլը սկսվում է ՝ RCLK գիծը LԱOWՐ քաշելով (Պատկեր (2)): MCU- ն իր տվյալները ուղարկում է MOSI գծի վրա: Դրա տրամաբանական վիճակը վերցված է SRCLK գծի աճող եզրին տեղաշարժի գրանցամատյանով: Theիկլը դադարեցվում է ՝ RCLK գիծը հետ քաշելով դեպի HIGH: Այժմ տվյալները հասանելի են ելքերին:

Քայլ 3: Սխեմատիկ

Պատկերը (1) ցույց է տալիս, թե ինչպես են հերթափոխի մատյանները միացված: Դրանք շղթայված են, ուստի տվյալները կարող են տեղաշարժվել այս շղթայի մեջ և նաև դրա միջոցով: Հետևաբար, ավելի շատ հերթափոխի գրանցամատյաններ ավելացնելը հեշտ է:

Պատկերը (2) ցույց է տալիս մնացած սխեմատիկան MCU- ով, միակցիչներով, որձաքարով … Կցված PDF ֆայլը պարունակում է ամբողջ աշխատանքները ՝ լավագույնը տպագրության համար:

Քայլ 4: C ++ կոդ

C/C ++ - ում սովորաբար պետք է նախատիպավորել գործառույթները դրանք կոդավորելուց առաջ:#include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE- ն չի պահանջում այս քայլը, քանի որ գործառույթների նախատիպերը ստեղծվում են ինքնաբերաբար: Հետևաբար, ֆունկցիայի նախատիպերը չեն ցուցադրվի այստեղ ցուցադրված ծածկագրում: Պատկեր (1). Setup () գործառույթ Պատկեր (2): spi_transfer () գործառույթ ՝ օգտագործելով ATmega168 չիպի ապարատային SPI (ավելի արագ է աշխատում) Պատկեր (3). ժամանակաչափ 1 հոսքի ընդհատում: Կոդերի կտորներ, որոնք սկսնակների համար մի փոքր գաղտնի տեսք ունեն, օրինակ իսկ (! (SPSR & (1 << SPIF))) {} ուղղակիորեն օգտագործեք MCU- ի գրանցամատյանները: Այս օրինակը բառերով. Սկսնակներին դա չպետք է վախեցնել:

Քայլ 5: Ավարտված գործիքը

Բոլոր խնդիրները լուծելուց և ծածկագիրը գործարկելուց հետո ես պարզապես ստիպված էի ստեղծել PCB դասավորություն և այն ուղարկել առասպելական տուն: Այն այնքան մաքուր տեսք ունի:-) Պատկեր (1). Լիովին բնակեցված վերահսկիչ տախտակ Պատկեր (2). Մերկ PCBI- ի առջևի պատկեր:. Այս նավահանգիստները պարունակում են սերիական RX, TX տողեր, I- ը2C տողեր, թվային I/O գծեր և 7 ADC գծեր: Սա նախատեսված է վահաններ տեղադրելու համար տախտակի հետևի մասում: Միջքաղաքային տարածքը հարմար է տախտակ օգտագործելու համար (0.1 դյույմ): Բեռնիչ սարքը կարելի է շողալ ICSP վերնագրի միջոցով (աշխատում է adafruit- ի USBtinyISP- ով): Հենց դա արվի, պարզապես օգտագործեք ստանդարտ FTDI USB/TTL սերիական ադապտեր կամ նմանատիպ: Ավելացրել եմ նաև ավտոմատ վերակայման-անջատման թռիչք: Ես նաև պատրաստել եմ մի փոքր Perl սցենար (տես իմ բլոգը), որը հնարավորություն է տալիս ավտոմատ կերպով վերականգնել FTDI մալուխները, որոնք սովորաբար չեն աշխատում տուփից (RTS ընդդեմ DTR տող): Սա աշխատում է Linux- ում, գուցե MAC- ում: Իմ բլոգում առկա են տպագիր տպատախտակներ և մի քանի DIY KIT: Պահանջվում է SMD զոդում: Տե՛ս PDF ֆայլերը `LED մատրիցների կառուցման հրահանգների և աղբյուրների համար:

Քայլ 6. Դիմում. Պրոցեսորի բեռնման մոնիտոր Linux- ի համար Perl- ի միջոցով

Սա շատ հիմնական բեռի մոնիտոր է `պատմության սյուժեով: Այն հիմնված է Perl սցենարի վրա, որը iostat- ի միջոցով հավաքում է համակարգի «բեռնվածության միջինը» յուրաքանչյուր 1 վայրկյանում: Տվյալները պահվում են զանգվածում, որը տեղաշարժվում է յուրաքանչյուր թարմացումից հետո: Dataանկի վերևում ավելացվում են նոր տվյալներ, ամենահին գրառումը դուրս է մղվում: Ավելի մանրամասն տեղեկություններ և ներլցումներ (ծածկագիր…) հասանելի են իմ բլոգում:

Քայլ 7. Դիմում. Խոսակցություն այլ մոդուլների հետ `օգտագործելով I²C

Սա պարզապես սկզբունքի ապացույց է և այս աշխատանքի համար ամենապարզ լուծումը չէ: Օգտագործելով I.2C- ն թույլ է տալիս ուղղակիորեն հասցեագրել մինչև 127 «ստրուկ» տախտակ: Այստեղ տեսանյութի աջ կողմում գտնվող տախտակը «վարպետն» է (որը նախաձեռնում է բոլոր փոխանցումները), ձախ տախտակը ՝ ստրուկը (սպասում է տվյալների): Ես2C- ին անհրաժեշտ է 2 ազդանշանային գիծ և սովորական էլեկտրահաղորդման գծեր (+, -, SDA, SCL): Քանի որ դա ավտոբուս է, դրան զուգահեռ միացված են բոլոր սարքերը:

Քայլ 8: Դիմում. «Խաղի խորանարդ»:-)

Պարզապես սարսափելի միտք: Այս մեկը նույնպես տեղավորվում է ներածության էջում ցուցադրված փայտե պարիսպի մեջ: Այն ունի 5 կոճակ հետևի մասում, որոնք կարող են օգտագործվել պարզ խաղ խաղալու համար:

Քայլ 9. Պատկերների / անիմացիաների ցուցադրում մատրիցայի վրա - Quick Hack

Այսպիսով, այն ստացել է ընդամենը 8x8 պիքսել և մի քանի գույներ: Նախ օգտագործեք Gimp- ի նման մի բան ՝ ձեր նախընտրած պատկերը ճշգրտորեն հասցնելու համար 8x8 պիքսել և պահեք այն որպես «.ppm» հում ձևաչափ (ոչ ASCII): PPM- ը հեշտ է կարդալ և մշակել Perl սցենարով: ImageMagick- ի և «փոխարկելու» հրամանի տողի գործիքի օգտագործումը ճիշտ չի աշխատի: Վերբեռնեք նոր arduino ծածկագիրը, այնուհետև օգտագործեք Perl սցենարը ՝ վերահսկիչին վերբեռնելու համար: Թարթումը պարզապես LED թարմացման և իմ տեսախցիկի շրջանակի արագության անհամապատասխանություն է: Կոդը մի փոքր թարմացնելուց հետո այն աշխատում է բավականին արագ: Բոլոր պատկերները ուղիղ փոխանցվում են սերիայի միջոցով, ինչպես տեսնում եք: Ավելի երկար անիմացիաները կարող են պահվել արտաքին EEPROM- ում, ինչպես դա արվում է տարբեր խոսափողային տախտակներում:

Քայլ 10. Պահված անիմացիաների ինտերակտիվ վերահսկողություն

Ինչու՞ թույլ տալ, որ միկրոկառավարիչը զվարճանա: Arduino- ի պաշտամունքը կապված է ֆիզիկական հաշվարկի և փոխազդեցության հետ, այնպես որ պարզապես ավելացրեք պոտենցիոմետր և վերահսկողություն ստանձնեք: 8 անալոգայինից թվային փոխարկիչի մուտքերից մեկի օգտագործումը դա շատ պարզ է դարձնում:

Քայլ 11: Կենդանի տեսանյութի ցուցադրում

Perl սցենարի և մի քանի մոդուլների օգտագործումը բավականին հեշտացնում է X11 համակարգերում գրեթե կենդանի տեսանյութերի ցուցադրումը: Այն կոդավորված է եղել Linux- ի վրա և կարող է աշխատել նաև MAC- երի վրա: Այն աշխատում է այսպես. կրկնել

Քայլ 12: Ավելի շատ լույս գրեթե անվճար

Ընդամենը երկու քայլով պայծառությունը կարող է բավականին բարձրացվել: Փոխարինեք 270Ω դիմադրիչները 169Ω -ով, իսկ մյուսը ՝ 74HC595 հերթափոխի գրանցամատյանը ՝ IC5- ի վրա:

Խորհուրդ ենք տալիս: