Kõik korterite renoveerimise ja kaunistamise kohta

Mikrokontrolleri uusaasta vaniku skeem. Hiina LED-vaniku Valgusmasina parandamise omadused vaniku mikrokontrolleril

Uus aasta on varsti käes! Jõulupuukaunistused ilmuvad poelettidele mandariinide, maiustuste ja šampanja kõrvale: mitmevärvilised pallid, tihvtid, kõikvõimalikud lipud, helmed ja muidugi elektripärjad.

Tõenäoliselt ei saa te osta tavalist mitmevärviliste lambipirnide vanik. Erinevaid vilkuvaid tulesid on aga lihtsalt lugematul arvul, enamasti valmistatud Hiinas. Mikroskoopilised pirnid võib asetada papitükile või põimida traatvaibaks, millega saab korraga kaunistada terve akna.

Jõulupuu vanikud eristuvad ka suure mitmekesisusega, eriti välimuse ja disaini poolest. Selliste vanikute maksumus on madal, nagu ka lambipirnide võimsus.

Enamikul vanikutel on väike ühe nupuga plastkarp, voolupistikuga juhe ja mitmevärviliste lambipirnide vanikuni viivad juhtmed. Garlandi kujundus võib olla väga mitmekesine.

Lihtsaim ja odavam variant koosneb sisestatud mikroskoopilistest lambipirnidest. Pakendikarbi tagaküljel on juhised pirnide vahetamiseks ja ettevaatusabinõud, kuigi varupirne kaasas ei ole. Need on vanikud, mida müüakse kaupluseketis “Kõik 38 eest”, kuigi viimasel ajal on neid müüdud nelikümmend rubla.

Joonis 1. Garland neljakümne rubla eest

Teise stiili vanikutel on lambipirnidel väikesed plastist varjundid, näiteks läbipaistvate kroonlehtedega lillede kujul. Kuid nupuga karp jääb samaks, kuigi vaniku hind ulatub kuni kahesaja rublani. Proovime kasti avada ja vaadata, mis seal sees on.

Joonis 2. Kolme türistoriga vanikkontrolleri välimus

Joonise allosas on näidatud kaks juhtmest; nii on seade võrku ühendatud. Siin on ka nupp, mis lülitab töörežiime. Ülemises osas on näha kolm türistorit ja vanikute juurde suunduvaid juhtmeid.

Plaadi keskel on väikesele trükkplaadile paigaldatud must tilk. Plaadil on kontaktpadjad, millega kontroller on põhiplaadi sisse joodetud.

Kui palju türistoreid on tahvlil

Mikrokontrolleri väljunditega on ühendatud türistorite juhtelektroodid, mis lülitavad sisse lambipirnid. Mikrokontrolleril on neli väljundit, kuid sageli paigaldatakse plaadile nelja türistori asemel vaid kolm, mõnel juhul aga kaks.

Vajalik visuaalne efekt saavutatakse vanikute ühendamise ja lambipirnide paigutamisega: ühte vanku suletakse kahe- või isegi kolmevärvilised lambipirnid. Just selline tahvel on näidatud joonisel 2.

Kui vaadata seda plaati trükkplaadilt, siis on näha, et kolm türistorit on joodetud ja neljanda all on tinatatud kontaktpatjadega augud, nagu on näidatud joonisel 3. Mõnel juhul pole auke isegi puuritud, öeldakse, kes tahab, see puurib ise .

Joonis 3. Garlandi kontrolleri plaat. Türistorile vaba ruumi

Siin väärib märkimist see omadus: kui kontrolleri väljund pole kuhugi ühendatud, ei tähenda see, et see ei tööta. Programm on kõigis kontrollerites ilmselt sama, kõik kontrolleri väljundid on kasutusel.

Seda saab hõlpsasti kontrollida osuti testeri abil. Kui mõõta vaba jala pidevat pinget, siis nõel hüppab, tõmbleb ja kaldub kõrvale koos teiste vanikute vilkumisega. Piisab puuduva türistori lihtsalt tahvlisse jootmisest ja, palun, saame täisväärtusliku nelja kanaliga vaniku.

Türistori võib võtta vanalt vigaselt plaadilt (juhtub, et kontroller muutub kasutuskõlbmatuks) või osta neljakümne rubla eest lisaks vaniku ja sealt türistori eemaldada. Hea eesmärgi nimel on kulud äärmiselt väikesed!

Garlandi skemaatiline diagramm

Trükkplaati kasutades on seda lihtne luua skemaatiline diagramm. On kahte tüüpi skeeme, mis erinevad üksteisest veidi. Esimene, kõige täpsem valik on näidatud joonisel 4.

Joonis 4. Hiina vaniku kontroller. valik 1

Kogu vooluring saab toite VD1...VD4 kaudu. Garlandid saavad toidet pulseerivast pingest ja need lülitatakse sisse kontrolleri poolt läbi türistoride VS1...VS4. Takisti R1 ja mikrokontroller DD1 moodustavad pingejaguri, mille väljundiks on pinge 12V.

Kondensaator C1 tasandab alaldatud pinge pulsatsiooni. Takisti R7 kaudu antakse võrgupinge kontrolleri 1 sisendisse, et sünkroniseerida vooluahel 220 V võrgusagedusega, mis võimaldab türistorite faasijuhtimist. See sünkroniseerimine võimaldab vanikute sujuvat süttimist ja väljasuremist. Selliseid plaate võib leida kallistest vanikutest.

Joonisel 3 kujutatud plaat on kokku pandud mõnevõrra lihtsustatud skeemi järgi, mis on näidatud joonisel 5.

Joonis 5. Hiina vaniku kontroller. 2. variant

Kohe torkab silma, et türistoreid on vaid kolm ja alaldisillast on alles vaid üks diood. Türistorite juhtelektroodidelt kadusid ka takistid. Kuid üldiselt jäid tarbijaomadused samaks, mis eelmises vooluringis, hoolimata asjaolust, et lambipirnid süttivad ainult siis, kui vooluahela ülemisel juhtmel on võrgupinge positiivne pooltsükkel. Ilma alaldisillata saadakse poollaine alaldus.

See vooluringi kujunduse versioon on omane neile vanikutele, mida on "kõik nelikümmend". See on tegelikult kõik, mida saab öelda Hiina jõulupuu vanikute vooluringi kujunduse kohta.

Kuidas ühendada võimsaid lampe

Vanikute võimsus on väike, sibulad on lihtsalt mikroskoopilised ja peale koduse jõulupuu ei mahu need tõenäoliselt kuhugi mujale. Kuid mõnikord on vaja ühendada vanik võimsate hõõglampidega, näiteks hoone fassaadide dekoratiivseks valgustamiseks. See muudatus on artiklis juba esitatud. Muudetud vaniku skeem on näidatud mainitud artikli joonisel 8.

Kui te ei soovi tahvlit ümber teha

Seda on palju lihtsam teha ilma kontrolleri plaati ümber töötamata. Piisab, kui teha neli võimsat optroni isolatsiooniga väljundlülitit ja ühendada need väikese võimsusega vanikute asemel. Toitelüliti ahel on näidatud joonisel 6.

Joonis 6. Võimas toitelüliti optroni isolatsiooniga

Tegelikult on skeem tüüpiline, töötab laitmatult ja ei sisalda lõkse. Niipea kui MOC3021 optroni LED süttib, avaneb väikese võimsusega optroni türistor ning juhtelektrood ja triaki BTA16-600 anood ühendatakse tihvtide 4, 6 ja takisti R1 kaudu. Triac avaneb ja lülitab sisse koorma, antud juhul vaniku.

Optosidist tuleks kasutada ilma sisseehitatud CrossZero ahelata (liinipinge nullpunkti detektor), näiteks MOC3020, MOC3021, MOC3022, MOC3023. Kui optronil on CrossZero sõlm, siis skeem EI TÖÖTA! Seda ei tohiks unustada.

BTA16-600 triacil on järgmised parameetrid: pärivool 16A, vastupinge 600V. Voolutugevusel 5A ja pingel 220V on koormusvõimsus juba terve kilovatt. Tõsi, peate radiaatorile paigaldama triaki.

Metallist aluspind on kristallist isoleeritud, nagu näitab täht A triac-märgistuses. See võimaldab paigaldada radiaatorile triacid ilma vilgukivist vahetükkide ja kruvi isolaatoriteta. Muide, just neid triakke kasutatakse kodutolmuimejate võimsusregulaatorites, radiaatorit aga puhub tolmuimeja väljalaskeava õhuvool.

Kui koormusvõimsus ei ületa 400 W, saate ilma radiaatorita hakkama. Triaki pinout on näidatud joonisel 7.

Joonis 7. Triac BTA16-600 pinout

See joonis tuleb kasuks toitelüliti ahela kokkupanemisel. Parim on monteerida kõik neli toitelülitit ühisele trükkplaadile. Parem on takisti R kokku panna kahest 2W takistist, mis väldib nende liigset kuumenemist. Oproni sisend-LED-i maksimaalne vool on 50mA, seega 20...30mA vool tagab selle pikaajalise tõrgeteta töö.

Joonis 8. Toitelülitite ühendamine kontrolleriplaadiga

Üldiselt on kõik selge ja lihtne. Garlandid on kontrolleri küljest lahti joodetud ja toitelülitite sisendahelad joodetud nende asemele. Sellisel juhul ei ole vaja sekkuda kontrolleri trükklülitusjuhtmetesse. Ainus erand on täiendava türistori jootmine, eeldusel, et see on leitav. Samuti tuleb toitejuhe ja pistik pisut paksemaks teha, kuna originaal on väga väikese ristlõikega.

Kell õige paigaldus ja tööosad, vooluahel ei vaja reguleerimist. Seadme konstruktsioon on suvaline, eelistatavalt sobivate mõõtmetega metallkorpuses, mis toimib triakide radiaatorina.

Elektriohutuse tagamiseks tuleks seade sisse lülitada kaitselüliti või vähemalt kaitsme kaudu.

Jõulupuu kaunistamiseks on palju võimalusi, siin on üks neist.

Joonisel 1 on kujutatud uusaasta vaniku skeem. See sisaldab nelja kanalit, millega on ühendatud järjestikku ühendatud LED-id, nagu on näidatud joonisel 2.

Skeemi tuumaks on PIC16F628A mikrokontroller. Mikrokontroller töötab vastavalt algoritmile, mis on näidatud joonisel 3. Programmi kood on kirjutatud assemblerkeeles, vaata nimekirja Garland\16F628ATEMP.ASM.

Mikrokontrolleri PIC16F628A vooluringisisese programmeerimise ja silumise täielik tsükkel viidi läbi, kasutades (integreeritud arenduskeskkond), MPASM v5.22 kompilaatorit (sisaldub MPLAB IDE v8.15-s) ja MPLAB ICD 2 (ahelasisene silur - “). Silur”). Kellel ülaltoodud tööriistu pole, kuid on oma programm HEX-failidega töötamiseks ja mõni muu programmeerija, leiab faili 16F628ATEMP.HEX vastavast projektist. Mikrokontrolleri tehnilise spetsifikatsiooniga saab tutvuda kodulehel ja.

Mikrokontrolleril DD1 on funktsionaalsed väljundid RB4 – RB7, millele on ühendatud võimendavad MOSFET väljatransistorid VT1 – VT4. Transistoride tehnilised andmed leiate veebisaidilt. Transistoride äravoolud on ühendatud push-in klemmidega X2 – X5. Koormuse toitepinge seatakse konnektori toiteallikaga, mis on ühendatud pistikuga X1. Maksimaalne lülitusvool kanali kohta on 0,5 A. Mikrokontrolleril DD1 ei ole sundlähtestamise funktsiooni, lähtestusviik on ühendatud takisti R1 kaudu positiivse toitepotentsiaaliga. Taktsageduse genereerimiseks kasutab mikrokontroller kiibil asuvat kellageneraatorit. Seadet saab kasutada temperatuurivahemikus –40 °C kuni +85 °C.

Seade saab toite vahelduv- või alalispingeallikast, mis on ühendatud pistikuga X1. Toiteallika nimipinge on 12 V. Toiteallika nimivool sõltub koormusest ja on 0,5 - 2 A. Toiteallika stabiliseerimiseks kasutatakse tavalist vooluahelat: dioodsilda VD1, lineaarset stabilisaatorit DA1 , filtri kondensaatorid C1 - C4.

Mikrokontroller on programmeeritud kolme valgusefektiga, mis põhinevad "jooksutulede" efektil.
1) Vanikud vaheldumisi süttivad ja kustuvad ühes suunas ja korratakse samamoodi teises suunas.
2) Vanikud süttivad ükshaaval ja kui kõik neli pärgu süttivad, hakkavad nad ükshaaval samas suunas kustuma ja sama kordub vastupidises järjekorras.
3) 1 ja 2, 3 ja 4 vanik pilgutavad üksteisele vaheldumisi silma. Mikrokontroller on programmeeritud teostama valgusefekti etteantud arvu kordusi. Väärib märkimist, et vanikute valgustamise vaheline ajavahemik muutub (suureneb, jõuab haripunkti ja seejärel langeb), see tähendab, et on näha "ajutise õõtsumise" mõju. Valgusefektide paremaks demonstreerimiseks tuleks vanikud (nagu need on diagrammil nummerdatud) paigutada järjekorda samale tasapinnale. Sel juhul kaunista kuusk juurtest tipuni (vertikaalselt, jagades kuuse neljaks sektoriks vanikute jaoks), vastavalt 1 kuni 4 vanik.

Vanikute toiteallikas on ühendatud pistikuga X1 ühendatud toiteallikaga, seetõttu on vaja arvutada järjestikku ühendatud valgust kiirgavad elemendid (LED-id, hõõglambid). Kogu toitepinge leitakse järjestikku ühendatud valgust kiirgavate elementide pingete summast. Näiteks ühes vanikus on 6 järjestikku ühendatud eredat LED-i, mis on mõeldud pingele 2–2,5 V. Kuna LED-id tarbivad 20 mA, siis on võimalik järjestikku ühendatud LED-e ühendada paralleelselt ridadena.

Osade paigaldamine on ühepoolne. Aukude suurus on vahemikus 0,7 mm kuni 3 mm. Trükkplaadi valmistamise failid leiab kaustast.

Trükkplaat on näidatud joonisel 4. Osade asukoht on näidatud joonisel 5.

Selles seadmes saab asendada järgmisi osi. Mikrokontroller DD1 PIC16F628A-I/P-xxx seeriast taktsagedusega 20 MHz DIP18 paketis. Pingestabilisaator DA1 kodune KR142EN5A (5 V, 1,5 A). MOSFET-väljatransistorid ja VT1 - VT4 (N-kanal) I-Pak (TO-251AA) pakendis, sobivad diagrammil näidatud nimiväärtuste analoogid. Dioodsild VD1 tööpingele vähemalt 25 V ja voolule vähemalt 2 A. Toitepistik X1 on sarnane diagrammil näidatud keskkontaktiga d = 2,1 mm. Mittepolaarsed kondensaatorid C1 ja C2 nimiväärtusega 0,01–0,47 µF x 50 V. Elektrolüütkondensaatoritel C3 ja C4 on sama mahtuvus ning pinge ei ole madalam diagrammil näidatust. Mitmevärvilised LED-id VD1 – VD6 pingele 2 – 2,5 V.

Radioelementide loetelu

Määramine Tüüp Denominatsioon Kogus MärgePoodMinu märkmik
DD1 MK PIC 8-bitine

PIC16F628A

1 Märkmikusse
DA1 Lineaarne regulaator

L7805AB

1 KR142EN5A Märkmikusse
VT1-VT4 MOSFET transistor

IRLU024N

4 Märkmikusse
VD1 Dioodi sild2W10M1 Märkmikusse
C1 Kondensaator0,1 µF1 Märkmikusse
C2 Kondensaator0,1 µF1 Märkmikusse
C3 100uF 10V1 Märkmikusse
C4 Elektrolüütkondensaator220uF 25V1

Nagu öeldakse – pane kelk suvel valmis...
Kindlasti sisse Uus aasta Kaunistate jõulupuu kõikvõimalike vanikutega ja tõenäoliselt on need oma vilkumise monotoonsusega juba ammu igavaks muutunud. Tahaks teha midagi nii, et vau, see vilkuks nagu pealinna jõulukuuskedel, ainult väiksemas mahus. Või äärmisel juhul riputada see aknale, et see kaunitar 5. korruselt linna valgustaks.
Aga paraku selliseid vanikuid müügil pole.

Tegelikult oli just see probleem, mis tuli kaks aastat tagasi lahendada. Pealegi läks laiskuse tõttu ideest teostuseni nagu ikka 2 aastat ja kõik sai tehtud viimase kuuga. Tegelikult on teil rohkem aega (või ma ei saa inimpsühholoogiast midagi aru ja kõik tehakse täpselt samamoodi viimase 2 nädala jooksul enne uut aastat?).

Tulemuseks on LED-idega üksikute moodulite üsna lihtne disain ja üks levinud, mis edastab käsud arvutist nende moodulite võrku.

Mooduli esimene versioon oli mõeldud selleks, et ühendada need kahe juhtme kaudu võrku, et oleks vähem segadust ja kõike muud - aga see ei õnnestunud, lõpuks oli vaja üsna võimsat ja kiiret lülitit isegi väikese arvu moodulite võimsuse ümberlülitamine - disaini lihtsuse jaoks on ilmne liialdus, nii et eelistasin kolmandat juhet, mis pole nii mugav, kuid andmeedastuskanalit on palju lihtsam korraldada.

Kuidas kõik toimib.

Arendatud võrk on võimeline adresseerima kuni 254 alluvat moodulit, mida hakatakse edaspidi kutsuma SLAVE - need on ühendatud vaid 3 juhtmega, nagu arvasite - kaks juhet on +12V toiteallikas, ühine ja kolmas on signaal.
neil on lihtne skeem:


Nagu näete, toetab see 4 kanalit - punast, rohelist, sinist ja violetset.
Tõsi, praktilise testimise tulemuste järgi on lilla selgelt nähtav ainult lähedalt, aga kuidas! Samuti, kuna värvid asuvad üksteisest liiga kaugel, on värvide segunemine näha vaid 10 meetri kauguselt, RGB LED-ide kasutamisel on olukord mõnevõrra parem.
Disaini lihtsustamiseks tuli loobuda ka kvartsstabiliseerimisest - esiteks võetakse lisaväljund ära ja teiseks on kvartsresonaatori maksumus üsna tuntav ja kolmandaks pole selleks tungivat vajadust.
Transistorile on kokku pandud kaitsekaskaad, et kontrolleri porti staatilisus välja ei lööks - rida võib ikka päris pikk olla, äärmisel juhul kannatab ainult transistor. Kaskaad arvutatakse MicroCap'is ja selle ligikaudne reaktsioonilävi on umbes 7 volti ja läve nõrk sõltuvus temperatuurist.

Loomulikult reageerivad kõik moodulid parimate traditsioonide kohaselt aadressile number 255 – nii saad need kõik ühe käsuga korraga välja lülitada.

Võrku on ühendatud ka moodul nimega MASTER – see on vahendaja PC ja orjamoodulite võrgu vahel. Muuhulgas on see võrdlusaja allikaks alammoodulite sünkroniseerimiseks, kui neis puudub kvartsstabilisatsioon.

Skeem:

Ahel sisaldab valikulisi potentsiomeetreid - neid saab kasutada arvutis olevas programmis soovitud parameetrite mugavaks ja kiireks seadistamiseks. Sel hetkel seda rakendatakse ainult testprogrammis võimalusena määrata mis tahes potentsiomeetrid ükskõik millisele neljast kanalist. Ahel on ühendatud arvutiga USB-UART liidese muunduri kaudu FT232 kiibil.

Võrku saadetud paketi näide:

Selle algus:

Signaali elektrilised omadused: log.0 vastab +9...12V ja log.1 0...5V.

Nagu näete, edastatakse andmeid järjestikku, fikseeritud kiirusega 4 bitti. Selle põhjuseks on andmete vastuvõtmise kiiruse vajalik veavaru - SLAVE moodulitel puudub kvartsstabilisaator ja see lähenemine tagab andmete vastuvõtmise, mille edastuskiiruse hälve on kuni +-5% suurem kui kompenseeritav. tarkvaralisel meetodil, mis põhineb kalibreeritud intervalli mõõtmisel andmeedastuse alguses, mis annab võrdlussageduse triivile vastupidavuse veel +-10%.

Tegelikult pole MASTER-mooduli tööalgoritm nii huvitav (see on üsna lihtne - saame andmed UART-i kaudu ja edastame need orjaseadmete võrku), kõik huvitavamad lahendused on realiseeritud SLAVE-moodulites, mis tegelikult võimaldavad saate edastuskiirusega kohaneda.

Peamine ja kõige olulisem algoritm on 4-kanalilise 8-bitise PWM-i tarkvara rakendamine, mis võimaldab teil juhtida 4 LED-i 256 heledusastmega. Selle algoritmi rakendamine riistvaras määrab ka andmeedastuskiiruse võrgus – tarkvara mugavuse huvides edastatakse üks bitt iga PWM-i tööetapi kohta. Algoritmi esialgne juurutamine näitas, et see töötab 44 taktitsüklis, mistõttu otsustati kasutada taimerit, mis on konfigureeritud katkestama iga 100 taktitsükli järel - nii on katkestusel aega garanteerida, et see saab enne järgmist käivitada ja käivitada. osa põhiprogrammi koodist.
Sisemise ostsillaatori valitud taktsagedusel 4,8 MHz tekivad katkestused sagedusel 48 kHz - see on alamseadmete võrgu bitikiirus ja sama kiirusega täidetakse PWM - selle tulemusena sagedus PWM-signaal on 187,5 Hz, mis on täiesti piisav, et mitte märgata LED-ide värelemist. Samuti salvestatakse katkestuste töötlejas pärast PWM-i genereerimise eest vastutava algoritmi täitmist andmesiini olek - see selgub ligikaudu taimeri ülevooluintervalli keskel, see lihtsustab andmete vastuvõtmist. Järgmise 4-bitise paketi vastuvõtmise alguses lähtestatakse taimer, see on vajalik vastuvõtu täpsemaks sünkroniseerimiseks ja vastuvõtukiiruse kõrvalekalletele vastupidamiseks.
Tulemuseks on järgmine pilt:

Huvitav on edastuskiiruse reguleerimise algoritmi rakendamine. Edastamise alguses väljastab MASTER impulsi pikkusega 4 bitti log.0, millest kõik alammoodulid määravad lihtsa algoritmi abil vajaliku vastuvõtukiiruse:

LDI tmp2, st_syn_delay DEC tmp2 ;<+ BREQ bad_sync ; | SBIC PINB, cmd_port; | RJMP PC-0x0003 ;-+

St_syn_delay = 60 - konstant, mis määrab käivitusimpulsi maksimaalse kestuse, mis on ligikaudu 2 korda suurem nimiväärtusest (usaldusväärsuse huvides)

Eksperimentaalse meetodi abil määrati tmp2-s saadud arvu järgmine sõltuvus, kui taktsagedus erineb nominaalsest:

4,3 MHz (-10%) 51 ühikut (0x33) vastab 90 taimeri kellale, et taastada vastuvõtukiirus nimiväärtusele
4,8Mhz (+00%) 43 ühikut (0x2B) - vastab 100-le taimeri kellale (nominaalne)
5,3 MHz (+10%) 35 ühikut (0x23) – vastab 110 taimeri kellale, et taastada vastuvõtukiirus nimiväärtusele

Nende andmete põhjal arvutati taimeri katkestuse perioodi parandustegurid (nii reguleeritakse vastuvõtukiirust kontrolleri olemasoleva taktsagedusega):

Y(x) = 110-x*20/16
x = tmp2 – 35 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
Y(x) = (110, 108,75, 107,5, 106,25, 105, 103,75, 102,5, 101,25, 100, 98,75, 97,5, 96,25, 95, 93,75, 9925, 992,1)

Numbrid ümardatakse täisarvudeks ja salvestatakse EEPROM-i.

Kui moodulile pinge rakendamisel hoiate liini loogilises olekus "1", aktiveeritakse kalibreerimise alamprogramm, mis võimaldab mõõta PWM-signaali perioodi sagedusmõõturi või ostsilloskoobiga ilma korrigeerimiseta ja selle alusel. mõõtmiste põhjal hinnake mooduli kontrolleri taktsageduse hälvet nimiväärtusest, tugeva kõrvalekaldega üle 15% Sisseehitatud RC-ostsillaatori kalibreerimiskonstanti võib olla vaja reguleerida. Kuigi tootja lubab kalibreerimist tehases ja kõrvalekaldeid nimiväärtusest mitte rohkem kui 10%.

Hetkel on välja töötatud Delphi programm, mis võimaldab 8 mooduli jaoks etteantud kiirusel reprodutseerida eelnevalt koostatud mustrit. Nagu ka utiliit eraldi mooduliga töötamiseks (sh mooduli aadressi ümber määramine).

Püsivara.
SLAVE mooduli jaoks peavad vilkuma ainult kaitsmed CKSEL1 = 0 ja SUT0 = 0. Ülejäänud tuleks jätta vilkumata. EEPROM-i sisu vilgub failist RGBU-slave.eep, vajadusel saab kohe määrata võrgus mooduli soovitud aadressi - EEPROM-i 0. bait, vaikimisi vilgub see $FE = 254 , aadress 0x13 sisaldab kontrolleri sisseehitatud RC-ostsillaatori kalibreerimiskonstanti, sagedusel 4,8 MHz see ei laadita automaatselt, seega on vaja programmeerijaga tehase kalibreerimisväärtust lugeda ja sellesse lahtrisse kirjutada - see väärtus on iga kontrolleri jaoks individuaalne; suurte sageduse kõrvalekallete korral nimiväärtusest saate kalibreerimist selle lahtri kaudu muuta, ilma et see mõjutaks tehase väärtust.

MASTER-mooduli jaoks on vaja vilkuda ainult kaitsmeid SUT0 = 0, BOOTSZ0 = 0, BOOTSZ1 = 0, CKOPT = 0. Ülejäänud jätke välgutamata.

Lõpetuseks väike demonstratsioon rõdul asuvast vanikust:

Tegelikult määrab vaniku funktsionaalsuse arvutis olev programm - saate luua värvilist muusikat, stiilset sillerdavat ruumivalgustust (kui lisada LED-draiverid ja kasutada võimsaid LED-e) jne. Mida ma kavatsen tulevikus teha? Plaanid sisaldavad 12 moodulist koosnevat võrku 3-vatiste RGB LED-idega ja ruumivalgustust, mis põhineb 12-voldise RGB lindi tükkidel (iga mooduli lindi vahetamiseks on vaja ainult väljatransistore, 3 tükki või 4, kui lisate tükk lillat teipi muud erinevused sealt ei ole originaal).

Võrgu haldamiseks saab kirjutada oma programmi, kasvõi BASICus – peamine, mida valitud programmeerimiskeel tegema peaks, on suutma ühenduda surematute COM-portidega ja seadistada nende parameetreid. USB-liidese asemel saate kasutada RS232-ga adapterit – see annab potentsiaalse võimaluse juhtida valgusefekte paljudest seadmetest, mida saab üldiselt programmeerida.
Vahetusprotokoll MASTER-seadmega on üsna lihtne - saadame käsu ja ootame vastust selle õnnestumise või ebaõnnestumise kohta; kui vastust pole rohkem kui mõne millisekundi jooksul, on probleeme MASTER-seadme ühenduse või tööga. , sel juhul on vaja läbi viia taasühendamisprotseduur.

Praegu on saadaval järgmised käsud:

0x54; sümbol "T" - käsk "test" - kontrollige ühendust, vastus peaks olema 0x2B.
0x40; sümbol "@" on käsk "allalaadimine ja edastamine". Pärast käsu andmist peate ootama vastust "?" millele järgneb 6 baiti andmeid:
+0: ​​Slave aadress 0..255
+1: käsk seadmele
0x21 - baidid 2...5 sisaldavad kanali heledust, mida tuleb kohe rakendada.
0x14 - määrake ajalõpp, mille järel on kõigi kanalite heledus
lähtestage 0-le, kui selle aja jooksul ei saada ühtegi käsku. Ajalõpu väärtus on punase kanali lahtris, st. baidis nihkega +2. väärtus 0-255 vastab vaikimisi ajalõpule 0-25,5 sekundit, timeout = 5 sekundit (kirjutatakse püsivara ajal EEPROM-is, seda saab seal ka nihkega +1 baidis muuta).
0x5A - muutke seadme aadressi.
Usaldusväärsuse huvides tuleb aadressi muutmise protseduur läbi viia kolm korda – alles siis rakendatakse uus aadress ja registreeritakse EEPROM-is. Samal ajal peate olema ettevaatlik - kui määrate kahele seadmele sama aadressi, reageerivad need sünkroonselt ja saate neid "eraldada" ainult lisamoodulite füüsiliselt võrgust lahti ühendades ja ülejäänud seadme aadressi muutmisega. üks või programmeerija abil. Uue aadressi väärtus edastatakse punase kanali lahtris – s.t. baidis nihkega +2.

2: Punase heledus 0...255
+3: Rohelise heledus 0...255
+4: Sinise heledus 0...255
+5: violetne heledus 0...255

0x3D; sümbol "=" - ADC käsk. Pärast käsu andmist peate ootama vastust "?" siis tuleks edastada 1 bait - ADC kanali number 0..7 binaarsel kujul (selles mahus sobivad ka ASCII numbrid 0..9, kuna 4 suurimat bitti eiratakse).
Vastuseks tagastab käsk mõõtmistulemust 2 baiti vahemikus 0...1023

Võimalikud vastused käskudele:
0x3F; sümbol "?" - valmis andmete sisestamiseks, tähendab, et seade on valmis käsuargumente vastu võtma
0x2B; sümbol "+" Vastus – käsk täideti
0x2D; sümbol "-" Vastus - käsk pole määratletud või on vale

Rohkem üksikasju saab GitHubis asuvast lähtekoodist, kus asuvad ka valmis püsivara uusimad versioonid.

Head uut aastat, kallid kasutajad. Ja eelseisva puhkuse puhul otsustas elektrooniline portaali sait teid rõõmustada PIC-mikrokontrolleri uusaasta vanikuahelaga. Liigume selle seadme ülevaatamise juurde.

See sisaldab nelja kanalit, millega on ühendatud järjestikku ühendatud LED-id, mis on näidatud alloleval joonisel:


Skeemi tuumaks on PIC16F628A mikrokontroller. Programmi kood on kirjutatud montaažikeeles, vaadake loendit Garland16F628ATEMP.ASM. Mikrokontrolleri PIC16F628A vooluringisisese programmeerimise ja silumise täistsükkel viidi läbi, kasutades MPLAB IDE v8.15 (integreeritud arenduskeskkond), MPASM v5.22 kompilaatorit (sisaldub MPLAB IDE v8.15-s) ja MPLAB ICD 2 (sisus). -ahela silur - "Siluja"). Kellel ülaltoodud tööriistu pole, kuid on oma programm HEX-failidega töötamiseks ja mõni muu programmeerija, leiab faili 16F628ATEMP.HEX vastavast projektist.

Mikrokontrolleril DD1 on funktsionaalsed väljundid RB4 - RB7, millele on ühendatud võimendavad MOSFET väljatransistorid VT1 - VT4. Transistoride tehnilised andmed leiate veebisaidilt. Transistori äravoolud on ühendatud push-in klemmidega X2 - X5. Koormuse toitepinge seatakse konnektori toiteallikaga, mis on ühendatud pistikuga X1. Maksimaalne lülitusvool kanali kohta on 0,5 A. Mikrokontrolleril DD1 ei ole sundlähtestamise funktsiooni, lähtestusviik on ühendatud takisti R1 kaudu positiivse toitepotentsiaaliga. Taktsageduse genereerimiseks kasutab mikrokontroller kiibil asuvat kellageneraatorit. Seadet saab kasutada temperatuurivahemikus -40 °C kuni +85 °C.

Seade saab toite vahelduv- või alalispingeallikast, mis on ühendatud pistikuga X1. Toiteallika nimipinge on 12 V. Toiteallika nimivool sõltub koormusest ja on 0,5 - 2 A. Toiteallika stabiliseerimiseks kasutatakse tavalist vooluahelat: dioodsilda VD1, lineaarset stabilisaatorit DA1 ja filtrikondensaatorid C1 - C4.

Mikrokontroller on programmeeritud kolme valgusefektiga, mis põhinevad "jooksutulede" efektil:

  • Vanikud vaheldumisi süttivad ja kustuvad ühes suunas ning korduvad samamoodi teises suunas.
  • Vanikud süttivad ükshaaval ja kui kõik neli pärgu süttivad, hakkavad nad ükshaaval samas suunas kustuma ja sama kordub vastupidises järjekorras.
  • Vanikud 1 ja 2, 3 ja 4 pilgutavad üksteisele vaheldumisi silma.

Mikrokontroller on programmeeritud teostama valgusefekti etteantud arvu kordusi. Väärib märkimist, et vanikute valgustamise vaheline ajavahemik muutub (suureneb, jõuab haripunkti ja seejärel langeb), see tähendab, et on näha "ajutise õõtsumise" mõju. Valgusefektide paremaks demonstreerimiseks tuleks vanikud (nagu need on diagrammil nummerdatud) paigutada järjekorda samale tasapinnale. Sel juhul kaunista kuusk juurtest tipuni (vertikaalselt, jagades kuuse neljaks sektoriks vanikute jaoks), vastavalt 1 kuni 4 vanik.

Vanikute toiteallikas on ühendatud pistikuga X1 ühendatud toiteallikaga, seetõttu on vaja arvutada järjestikku ühendatud valgust kiirgavad elemendid (LED-id, hõõglambid). Kogu toitepinge leitakse järjestikku ühendatud valgust kiirgavate elementide pingete summast. Näiteks ühes vanikus on 6 järjestikku ühendatud eredat LED-i, mis on mõeldud pingele 2–2,5 V. Kuna LED-id tarbivad 20 mA, siis on võimalik järjestikku ühendatud LED-e ühendada paralleelselt ridadena.

Selles seadmes saab asendada järgmisi osi. Mikrokontroller DD1 PIC16F628A-I/P-xxx seeriast taktsagedusega 20 MHz DIP18 paketis. Pingestabilisaator DA1 kodune KR142EN5A (5 V, 1,5 A). MOSFET-väljatransistorid ja VT1 - VT4 (N-kanal) I-Pak (TO-251AA) pakendis, sobivad diagrammil näidatud nimiväärtuste analoogid. Dioodsild VD1 tööpingele vähemalt 25 V ja voolule vähemalt 2 A. Toitepistik X1 on sarnane diagrammil näidatud keskkontaktiga d = 2,1 mm. Mittepolaarsed kondensaatorid C1 ja C2 nimiväärtusega 0,01–0,47 µF x 50 V. Elektrolüütkondensaatoritel C3 ja C4 on sama mahtuvus ning pinge ei ole madalam diagrammil näidatust. Mitmevärvilised LED-id VD1 - VD6 pingele 2 - 2,5 V.


Seda diagrammi vaadatakse sageli ka:

Oleme juba varem õppinud, kuid seda protsessi on nuppude abil palju huvitavam juhtida ja LED-vanik on hea visuaalne näide.

Nupu ühendamine mikrokontrolleriga

Vaniku skeem on näidatud allpool.

Kui mikrokontrolleriga on ühendatud nupp (võti), tuleb vastav MK-viik konfigureerida sisendiks. Sel juhul loeb mikrokontroller pidevalt selle kontakti olekut või pigem potentsiaalset taset. Seetõttu saab programmi algoritmi konstrueerida nii, et kui MK teatud viigul muutub potentsiaal kõrgest madalaks või vastupidi, siis tehakse teatud toiming, näiteks süttib LED.

MK teatud kontaktide sisendiks konfigureerimiseks tuleks DDR-registri vastavatele bittidele kirjutada nullid. Muide, kui MK-tihvte ei kasutata, siis on soovitatav ka need sisendiks seadistada. Kuna ühendame pordiga B ainult nupud, kirjutame kõik nullid DDRB registrisse järgmise käsuga:

DDRB = 0b00000000;

Kui mikrokontrolleri viik on konfigureeritud sisendiks, võib see algselt olla kahes olekus, mis seatakse PORT-registri abil.

Kui PORT-registri bitt on seatud nullile, on kontaktil kõrge sisendtakistus.

Kui bitt on seatud ühele, on MK-tihvtiga ühendatud tõmbetakisti. Takistit nimetatakse nn, kuna selle kaudu tõmmatakse kõrge potentsiaal (+ 5 V) elektriahela vastavasse punkti; sel juhul - mikrokontrolleri tihvti.

MK väljundi oleku kontrollimine kasutades PINx

Selleks, et igal ajal teada saada, milline potentsiaal kontaktis peitub, tuleks kontrollida (lugeda) vastavat bitti PIN-registris.

Analoogia põhjal saab seda registrit võrrelda anduriga. Sellest saab ainult infot lugeda. Sa ei saa sinna midagi kirjutada. PIN on vastand registrile PORT, mis ainult kirjutab andmetele, kuid ei loe neid.

Eelistatavam on seada PORT registriks üks, s.t. sisemise tõmbetakisti MK kasutamine. Sellel valikul on märkimisväärne mürakindlus, kuna kõrge potentsiaali muutmiseks madalaks peab väljund olema otse ühendatud maandusega või ühise juhtmega.

Kui tihvt on tehtud suure sisendtakistusega, siis kõik enam-vähem võimsad elektromagnetilised häired võivad sellel esile kutsuda teatud potentsiaali, mis ületab teatud väärtuse ja mikrokontroller tajub häireid kui muutust madalast potentsiaalist kõrgeks. Seetõttu kasutame oma programmis sisemist tõmbetakistit.

Ühendame võtme ühe kontakti maandusega (ühine juhe) ja teise mikrokontrolleri tihvtiga. Kui võti on avatud, on väljund kõrge potentsiaaliga (+ 5 V), mida tõmbab MK sisemine takisti. Sel juhul määratakse PIN-koodi registri vastav bitt ühele.

Kui vajutate nuppu, ühendub see tihvt ühise juhtmega ("miinus") ja sellele ilmub madal potentsiaal. Ja PIN-koodi registri bitt seatakse automaatselt nulli.

Pange tähele, et tõmbetakisti kaitseb ka vooluahelat lühise eest, kui nuppu vajutatakse.

LED vanik koodis

Nüüd kirjutame kogu programmi koodi ja seejärel vaatame selle üksikuid elemente. Programmi algoritm on järgmine: kui esimene klahv on suletud, süttivad "tuled" ühes järjestuses ja teise sulgemisel süttivad "tuled" erinevalt. Kui vajutate mõlemat nuppu, peaksid kõik LED-id kustunud olema.

#määratle F_CPU 1000000UL // Deklareerige mikrokontrolleri töösagedus 1 MHz

#kaasa

#kaasa // Ühendage viivitusteek

#define Z 300 // Nimetage viivitusväärtus Z

#define VD PORTD // Määrake pordile D nimi VD

#define K PORTB // Määrake pordile B, millega nupud on ühendatud, nimi K

int main(tühine)

DDRB = 0b00000000; // Konfigureerige sisendiks port B

DDRD = 0b11111111; // Väljundi pordi D seadistamine

VD = 0b00000000; // Lülitage kõik tuled välja

K = 0b11111111; // Lülita sisse tõmbetakistid

samal ajal (1)

if (PINB == 0b11111110) // Kontrollige, kas 1. nupp on vajutatud

VD = 0b11111111; // Kui võti on suletud, vilgutame "tulesid"

_delay_ms(Z);

VD = 0b00000000;

_delay_ms(Z);

muidu

VD = 0b00000000; // Kui võti on avatud, on kõik LED-id välja lülitatud

if (PINB == 0b11111101) // Kontrollige, kas 2. nupp on vajutatud

VD = 0b00000001; // Kui nuppu vajutatakse, siis lülitage LED ükshaaval sisse

_ viivitus_ Prl(Z); // hilinemisega 0,3 s

VD = 0b00000011;

_delay_ms(Z);

VD = 0b00000111;

_delay_ms(Z);

VD = 0b00001111;

_delay_ms(Z);

LED = 0b00011111;

_delay_ms(Z);

VD = 0b00111111;

_delay_ms(Z);

VD = 0b01111111;

_ delay_ms(Z);

VD = 0b11111111;

_delay_ms(Z);

VD = 0b00000000;

_ viivitus_ Prl(Z);

muidu

VD = 0b00000000; // Kui võti pole suletud, kustuvad kõik LED-id

Operaatorid kui Ja muidu

Eeltöötlejate ja nende eesmärk on hästi teada varasematest artiklitest. Meie jaoks on siin uus if-lause. If on inglise keelest tõlgitud kui "if". Kui sulgudes märgitud tingimus on täidetud, s.o. tõsi, siis käivitatakse lokkis sulgudes olev programmikood. Näiteks kui muutuja a on suurem kui 1 ühik, omistatakse muutujale c väärtus a + b.

kui (a > 1)

c = a + b;

Vastasel juhul, kui a väärtus on väiksem või võrdne ühega, siis lokkis sulgudes olevat programmikoodi ei käivitata.

Kui lokkis sulgudes täidetakse ainult üks käsk, võimaldab C süntaks tähistust lihtsustada ja teha ilma lokkis sulgudeta:

kui (a > 1) c = a + b;

Kui-lause töötab ka koos else-lausega.

kui (a >1) → kui a >1, siis = a + b

c = a + b;

muidu → muidu c = a - b

c = a - b;

See toimib nii. Kui a > 1, siis c = a + b. Vastasel juhul, st. kui a on väiksem või võrdne ühega, siis c = a – b.

Programmi koodi selgitus

Nüüd pöördume tagasi meie programmi juurde. Kui vajutada PB0-ga ühendatud nuppu, siis ilmub kontaktile madal potentsiaal ja PINB registri vastav bitt seatakse nulli. Sel juhul on täidetud lokkis sulgudes olev tingimus, s.t. vanik hakkab vilkuma.

Pange tähele, et määramiskäsk koosneb ühest võrdusmärgist "=" ja testkäsk "võrdub" koosneb kahest võrdusmärgist, mis on kirjutatud ilma tühikuta "==".

Kui nuppu ei vajutata, näitab PINB registri bitt bitti, mille põhjuseks on kõrge tõmbetakisti. Sel juhul läheb juhtimine üle else-lausele ja kõik LED-id kustuvad.

Kui teine ​​võti, mille väljund on ühendatud pordiga PB1, suletakse, käivitatakse teine ​​programmikood ja LED-id hakkavad ükshaaval sisse lülituma 0,3-sekundilise viivitusega.

Seega võib mikrokontrolleri vanik sisaldada erinevat arvu LED-e ja klahve. Lisaks saate iga võtmekontaktide sulgemise või avamise jaoks ette kirjutada oma algoritmi vaniku toimimiseks.

Seda saab juhtida ka vaid ühe nupuga. Sellel valikul on veidi keerulisem kood ja me käsitleme seda eraldi artiklis. Seal vaatame ka, kuidas võimsaid LED-e MK-ga ühendada.

Artiklis varem vaatasite üksikasjalikult väljundi seadistamist ja siin - sisendi jaoks. Nüüd paneme kõik kokku ja esitame lihtsa visuaalse algoritmi.

Seotud väljaanded