Skema e matricave LED. Matricat LED

Vitet e fundit, matricat LED janë bërë të përhapura në reklamat e jashtme dhe tabelat e ndryshme të informacionit. Mjaft të ndritshme, dinamike - ata tërheqin në mënyrë të përkryer vëmendjen dhe nuk verbohen në një ditë me diell. Secili prej jush i sheh çdo ditë në rrugët e qytetit të tij.
Sigurisht, shpërndarja e tyre u lehtësua nga çmimi i ulët (për shkak të prodhuesve kinezë) dhe lehtësia e montimit të ekranit.

Por, çka nëse përpiqeni të përdorni matrica të tilla në pajisjet tuaja në mikrokontrollues? Cila është ndërfaqja e shkëmbimit dhe logjika e daljes së këtyre matricave?
Le të përpiqemi t'i kuptojmë të gjitha.

Kinezët ofrojnë si vetë matricat me madhësi të ndryshme dhe me rezolucione të ndryshme, ashtu edhe kontrollues për shfaqjen e imazheve në to me efekte të ndryshme të thjeshta, si dhe të gjithë aksesorët e nevojshëm, kabllot lidhëse, kornizat.
Matricat gjenden si me një ngjyrë (e bardhë, e verdhë, e kuqe, jeshile, blu) dhe me 3 ngjyra (RGB). Emërtimi i modelit të matricës zakonisht duket si Pxx ose PHxx, ku xx është një numër që tregon distancën midis pikselëve në milimetra. Në rastin tim është P10. Për më tepër, matricat e disa madhësive standarde nuk janë vetëm drejtkëndëshe, por edhe katrore.

Opsionet e mundshme për përmasat e kokrrave



Pra, kemi një matricë të bardhë prej 32x16 pikselësh me dimensione 320x160 mm dhe, në përputhje me rrethanat, një distancë ndërpikselë prej 10 mm. Le t'i hedhim një vështrim më të afërt.
Pamja e përparme:

Ju dukej gjithashtu se LED-të janë një lloj ovale? Nuk e menduat...


Një vizore e vogël është bërë sipër LED-ve, e cila parandalon që rrezet e diellit të ndriçojnë LED-të.

Pamja e përparme me maskë plastike të hequr



Ne e kthejmë matricën dhe shohim tabelën:


Ka një tufë patate të skuqura logjike në tabelë. Le të shohim se cilat janë këto mikroqarqe:
1. 1 x SM74HC245D - tampon jo invertues
2. 1 x SM74HC04 - inverter 6 kanalesh
3. 1 x SM74HC138D - dekoder 8-bit
4. 4 x APM4953 - montimi i 2 MOSFET-ve me kanal P
5. Regjistri i ndërrimit të mbyllur 16 x 74HC595D
Dy lidhës 16-pin janë ndërfaqe, njëra prej tyre është hyrëse (kontrolluesi i ekranit është i lidhur me të), dhe i dyti është në dalje (matrica tjetër në zinxhir është e lidhur me të). Shigjeta në tabelë drejtohet nga lidhësi i hyrjes në dalje.
Fuqia furnizohet me terminalet në qendër të tabelës. Tensioni i furnizimit - 5V, rryma maksimale (kur të gjitha matricat LED janë të ndezura) - 2A (për matricën e bardhë).

Të gjitha informacionet e mësipërme, si dhe një demonstrim i matricës në videon më poshtë. Në të, nga ora 13:04 deri në 15:00 flas për varësinë e ndriçimit të ekranit nga numri i matricave. Kjo është për shkak të një gabimi në algoritëm. Defekti është rregulluar dhe tani të dhënat ngarkohen përpara se ekrani të fiket.

Unë gjithashtu do të jem i lumtur t'ju shoh kanali im në youtube, ku unë ende lidh shumë gjëra me mikrokontrolluesit.

Faleminderit të gjithëve për vëmendjen tuaj!

Përparësitë e LED-ve janë të pamohueshme, sot ato janë kudo, përfshirë orët. Cilat janë orët në matricat LED, ne do të analizojmë të mirat dhe të këqijat në artikull. Në fund të artikullit, është paraqitur një udhëzues i detajuar hap pas hapi për të bërë një pajisje me duart tuaja.

Cfare eshte

Një orë matricë LED është një orë elektronike që përdor një matricë me shumë LED për shfaqje. Përdorimi i treguesve të një lloji të ndryshëm është ndryshimi i tyre i vetëm.

Një matricë është një grup LED të montuar së bashku në një rrjet me një anode ose katodë të vetme. Si rregull, zgjidhja e treguesve të tillë - numri i pikave vertikalisht dhe horizontalisht - është 8×8.

Pse orët e tilla po fitojnë popullaritet, avantazhe:

  1. Çmimi. Matricat LED janë më të lira se treguesit me shtatë segmente të madhësive të ngjashme.
  2. Shkëlqimi. LED janë më të shndritshëm se ekranet me 7 segmente dhe janë më të lehta për t'u parë në vende me diell. Shumë prodhues gjithashtu ofrojnë mbrojtje konstruktive të diodës nga ekspozimi ndaj diellit.
  3. Funksionaliteti. Duke përdorur një matricë LED, mund të shfaqni jo vetëm numra, por edhe shkronja të ndryshme, shenja pikësimi, simbole. Duke përdorur një grup matricash LED, mund të shfaqni disa informacione në formën e një linje zvarritëse.

Matricat LED gjithashtu kanë disavantazhe:

  • Rritja e kompleksitetit të kontrollit. Për shkak të numrit të madh të elementeve (ka 64 prej tyre në matricën standarde), është më e lehtë të kontrollohen treguesit e matricës sesa ato me shtatë segmente. Për këtë përdoren mikrokontrolluesit, treguesit dinamikë dhe regjistrat e zhvendosjes.
  • Kendveshtrim. E veçanta e LED-ve është se ato fokusojnë dritën në një drejtim. Kjo çon në faktin se imazhi në matricën LED mund të shihet mirë vetëm në një kënd të caktuar.
  • Intoleranca ndaj temperaturave të larta. Nxehtësia zvogëlon efikasitetin e LED-ve dhe shkurton jetëgjatësinë e tyre.
  • Djegia e LED-ve individuale do të çojë në efektin e një "piksel të thyer" dhe një përkeqësim të cilësisë së imazhit.

Orë shtëpiake në matrica LED

Megjithë popullaritetin e madh të orëve në matricat LED, nuk ka aq shumë skema për prodhimin e tyre të pavarur në Runet. Le të shqyrtojmë më të njohurit.

Aftësitë e nevojshme për montimin e pajisjes:

  • prodhimi i pllakave të qarkut të printuar;
  • elementet e saldimit: skema supozon ekzekutimin e SMD, që do të thotë se elementët do të instalohen direkt në sipërfaqen e tabelës;
  • firmware i mikrokontrolluesve: MK ATMega16A përdoret në qark;
  • Programimi MK: kjo nuk është e nevojshme, pasi firmware-i i kontrolluesit është tashmë i disponueshëm për këtë pajisje. Kjo aftësi do të jetë e dobishme nëse dëshironi të ndryshoni mënyrën e funksionimit të orës ose të zgjeroni funksionalitetin e saj, për shembull, duke shtuar elementë shtesë si sensorë të temperaturës ose lagështisë.

Nga mjetet që do t'ju nevojiten:

  • një grup për të bërë dërrasa;
  • programues MK;
  • Makine per ngjitjen e metalit.

Le të hedhim një vështrim më të afërt në diagramin e pajisjes. Elementi kryesor i kontrollit është MK ATMega16A, ai ofron veçoritë e mëposhtme të pajisjes:

  1. Numërimi mbrapsht dhe kalendari. Punon edhe kur rryma është e fikur.
  2. Alarmi. Këtu janë 9 të tilla, mund t'i programoni që të punojnë në ditët e javës.
  3. Matja e temperaturës. Dizajni i orës ju lejon të instaloni dy sensorë të temperaturës për matje në dhomë dhe në rrugë.
  4. Modaliteti i linjës së ekzekutimit. Jep informacionin e mëposhtëm: ditën e javës, muajin, vitin, temperaturën.
  5. Korrigjimi i orës.

Shumica e funksioneve i janë caktuar mikrokontrolluesit, i cili ju lejon të shkarkoni qarkun sa më shumë që të jetë e mundur dhe të përdorni numrin minimal të elementeve.

Pajisja përdor vetëm dy mikroqarqe: një mikrokontrollues dhe një regjistër ndërrimi TPIC6B595, gjithashtu mund të lidhni dy sensorë të temperaturës DS18B20 - një i jashtëm dhe i dyti i brendshëm.

Për tregues përdoren tre matrica LED 8×8. Si një diodë D1 është më mirë të përdorni një diodë Schottky. Dioda në qark siguron kalimin në fuqinë emergjente, dhe dioda Schottky ka rënien më të ulët të tensionit dhe shpejtësinë e lartë të kalimit.

Procesi i prodhimit:


Disa nga veçoritë kur montoni një orë në një matricë LED me ATMega 16A janë të disponueshme në videon e mëposhtme.

Orët në matricat LED kanë shumë përparësi ndaj pajisjeve me një lloj tjetër treguesi: ato janë më të lira, nuk ndriçohen nga dielli, ato mund të përdoren për të shfaqur më shumë informacion. Ekzistojnë një numër i madh i modeleve të orëve në matricat led, dhe të gjithë do të gjejnë një pajisje për vete me funksionalitetin e kërkuar. Gjithashtu, orë të tilla janë të lehta për t'u bërë vetë, siç e patë nga udhëzuesi hap pas hapi i mësipërm, nuk kërkon mjete të veçanta ose aftësi të veçanta.

!
Sot do të argëtohemi me një matricë LED të adresueshme. Ky projekt është mjaft kompleks, por në të njëjtën kohë të gjithë mund ta përsërisin atë. Autori i projektit është AlexGyver.

Shiriti LED i adresueshëm përbëhet nga LED me tre ngjyra, secila prej të cilave ka një mikroqark të veçantë.


Mikroqarku në LED transmeton informacion tek njëri-tjetri. Kjo ju lejon të ndezni çdo LED në shirit me një nga 16,000,000 ngjyrat dhe nuancat. Dhe gjëja më interesante është se e gjithë gjëja kontrollohet nga një tel, ne jetojmë në një kohë shumë interesante.
Shiriti kontrollohet nga një mikrokontrollues, siç është platforma arduino.


Një tufë e tillë në vetvete është shumë interesante dhe mund të gjeni një sërë aplikimesh në dizajn ose produkte shtëpiake, që ia vlen vetëm efekti i flakës. Por sot nuk do të flasim për këtë. Çfarë ndodh nëse shiriti vendoset në një zigzag dhe vendoset në mënyrë që LED-të të formojnë një rrjet të rregullt dhe të barabartë? Kjo është e drejtë, matrica LED. Për lehtësi, mund të blini një matricë të gatshme nga kinezët, dhe gjëja më interesante është se kushton shumë më pak se blerja e një shiriti dhe shpenzimi i disa orëve për prerjen dhe lidhjen e pjesëve me tela.




Për shembull, ekziston një matricë e tillë 8X8, më e lira, do të jetë më e lehtë për dikë që të luajë me të.


Karakteristika e projektit të sotëm është shkathtësia dhe shkathtësia e tij, domethënë mund të blini një matricë të gatshme, por është e vogël, si të thuash, por gjithashtu mund të blini një shirit me një densitet të ulët LED dhe të bëni një matricë. të saj, të themi, me një foto. Kjo do të jetë e lezetshme.
Matrica ofron mundësi të shkëlqyera për krijimin e efekteve të ndryshme piksel, shfaqjen e fotografive dhe gif-eve (gif), krijimin e lojërave klasike dhe gjërave të tjera interesante. Sigurohuni që të vizitoni faqen e projektit, aty do të gjeni të gjitha lidhjet e nevojshme, firmware, diagramet dhe udhëzimet shtesë.
Pra, të armatosur me një mjet kontrolli matricë, ne kemi mundësinë të ndezim çdo LED sipas koordinatave të tij.


E shkëlqyeshme, ju mund të bëni të gjitha llojet e efekteve të lezetshme. Mund ta kontrolloni nga smartfoni juaj nëpërmjet Bluetooth. Kjo do të thotë, telefoni inteligjent dërgon disa komanda përmes bluetooth, moduli i merr ato dhe i transferon në arduino. Dhe arduino, nga ana tjetër, nxjerr të dhëna në matricë.




Autori filloi duke vendosur të bëjë një mjet vizatimi, domethënë, në mënyrë që të zgjidhni një ngjyrë dhe të ndizni çdo LED në matricë.


Hapi i parë ishte zhvillimi i një protokolli komunikimi me arduino.


Shifra e parë në të është mënyra, dhe pjesa tjetër ishte përgjegjëse për cilësime të ndryshme dhe vlera të tjera të transmetuara. Më pas autori bëri një fushë grafike në të cilën vizatoi një rrjet.

Programi gjurmon koordinatat e prekjes së fushës me gisht dhe vizaton një katror në këtë vend me çdo ngjyrë. Gjatë rrugës, koordinatat e sheshit dërgohen në arduino.

Për prodhimin na duhen:
1) Matricë ose shirit në LED të adresueshëm;
2) Arduino;
3) Moduli Bluetooth;
4) Rezistenca.


Mund të blini një paund nga kinezët, ose mund ta blini në çdo dyqan radioje. Ne i lidhim komponentët sipas një skeme shumë të thjeshtë:


Mund të mbledhësh gjithçka në një dërrasë buke. Pastaj shkarkoni arkivin me projektin nga faqja e projektit, instaloni bibliotekat sipas udhëzimeve dhe hapni skedarin e firmuerit.




Këtu kemi cilësimet. Specifikoni madhësinë e matricës suaj, llojin e saj dhe pikën e lidhjes.

Nëse bëni vetë një matricë të madhe, domethënë bashkoni nga copa shiriti, atëherë keni 2 lloje për të zgjedhur.


Autori këshillon zgjedhjen e opsionit të duhur, pasi është më e lehtë të bashkohet. Tani mbetet për të vendosur për fillimin e matricës, domethënë pikën e lidhjes me të dhe drejtimin e pjesës së parë të shiritit. Kjo fletë mashtrimi do të ndihmojë për të 8 opsionet për vendndodhjen e matricës:


Autori shpenzoi një kohë të madhe në këtë firmware. Ky është projekti më i madh i autorit për nga sasia e kodit. Arduino është i mbushur vetëm për kokën e syrit, i shtyrë, siç thonë ata, nevpihuemoe.


Pra, konfiguroni, klikoni për të shkarkuar firmuerin. Para shkarkimit, sigurohuni që të shkëputni Bluetooth-in nga pini rx, përndryshe arduino nuk do të pulsojë. Për lehtësi, mund të lidhni gjithashtu një çelës në tela.


Më pas, instaloni aplikacionin GyverMatrixBT në smartphone tuaj Android. Ky aplikacion është i disponueshëm në Play Market, është plotësisht falas dhe pa reklama.


Më pas çiftoni me modulin bluetooth (fjalëkalimi 1234 ose 0000), lidheni me modulin në aplikacion dhe kaq. Në cilësimet, mund të rregulloni shkëlqimin dhe madhësinë e matricës që përputhet me tuajën, si dhe disa nga parametrat e tjerë të saj.

Sipas madhësisë së rregulluar, do të kemi një fushë në skedën e vizatimit. Klikoni për ta inicializuar. Këtu mund të vizatoni me prekje dhe rrëshqitje, mund të fshini, mund të pastroni fushën dhe ta mbushni me ngjyra.




Në përgjithësi, për momentin kemi një mjet pune për dërgimin e të dhënave në matricë. Ju mund të vazhdoni. I gjithë ky sistem u konceptua nga autori për të ndërtuar një matricë të madhe kasetë ose module. Është interesant si projekt, si hobi, dikujt mund t'i duket i dobishëm për qëllime reklamimi, për dekorim ose për dizajn, mirë, ose thjesht për argëtim.

Por matrica në këtë formë nuk duket shumë e lezetshme, jo e pikseluar dhe jo tetë-bit. Është e domosdoshme të bëhet një rrjet në mënyrë që secila LED të formojë pikselat e veta katrore dhe të vendosë një shpërndarës sipër. Atëherë gjithçka do të jetë shumë e lezetshme. Grilë mund të bëhet nga çdo material në formë dhe slats. Mund të jetë kartoni, një pako me vizore druri sovjetike ose një opsion plastik (këndi PVC), mund ta blini në një dyqan materialesh ndërtimi ku ka panele plastike dhe produkte të ndryshme për to. Qoshet mund të thyhen për së gjati, të bëni prerje për mes dhe të montoni grilë. Ky është opsioni më "fermë kolektive" pas kartonit.

Dhe sigurisht që mund të relaksoheni dhe të printoni grilë në një printer 3D. Pra, le ta bëjmë atë.






Pra, trupi i matricës shtypet. Nga rruga, autori beson se e zeza nuk është zgjidhja më e mirë, është më mirë të printoni grilën në të bardhë në mënyrë që të reflektojë dritën. Epo, nuk ka rëndësi, do ta lyejmë.


Në fakt, këtu është matrica jonë pa rrjetë, LED siç janë.


Vendosim hekurën, bëhet më e mprehtë, kjo ndodh sepse shikojmë në një kënd.


Dhe tani shikoni se çfarë ndodh nëse shtoni një shpërndarës në formën e një fletë letre.


Por matrica, si çdo ekran, funksionon në hapësirën e ngjyrave rgb dhe sfondi i saj duhet të jetë i zi për një perceptim më korrekt të ngjyrave. Autori provoi disa opsione dhe u vendos në film

Ndonjëherë kërkohet të lidhni disa tregues me shtatë segmente ose një matricë LED me mikrokontrolluesin, ndërsa treguesi dinamik përdoret për të shfaqur informacionin. Thelbi i treguesit dinamik është shfaqja e njëpasnjëshme e informacionit mbi treguesit. Diagrami më poshtë tregon një shembull të lidhjes së disa treguesve me shtatë segmente (për shembull, me një katodë të përbashkët) për të zbatuar një tregues dinamik, në përgjithësi, duke marrë parasysh pikën, merren 8 segmente, por në mënyrën e vjetër. quajtur kështu. Të gjitha konkluzionet (anoda) e segmenteve me të njëjtin emër janë të lidhura së bashku, për gjithsej 8 linja që lidhen me mikrokontrolluesin përmes rezistorëve. Katoda e përbashkët e secilit tregues është e lidhur me mikrokontrolluesin përmes një tranzistori.


Algoritmi i treguesit është si më poshtë: së pari, ne vendosim nivelet logjike të kërkuara në linja, në varësi të asaj se cilat segmente duhet të ndizen në treguesin e parë (tregimi nga e majta në të djathtë), me një nivel të lartë logjik për t'u ndezur, i ulët në fik segmentin. Tjetra, ne aplikojmë një nivel të lartë logjik në bazën e tranzistorit VT1, kështu që katoda e përbashkët e treguesit të parë është e lidhur me telin e përbashkët, në këtë moment ato segmente ndizen, në anodat e të cilave ka një njësi logjike. Pas një kohe të caktuar (pauzë), ne e fikim treguesin duke aplikuar një nivel të ulët logjik në bazën e tranzistorit, pastaj ndryshojmë përsëri nivelet logjike në linja në përputhje me informacionin e daljes të destinuar për treguesin e dytë dhe dërgojmë një sinjali i ndezjes në transistorin VT2. Kështu, në një cikël rrethor, ne ndërrojmë të gjithë treguesit, ky është i gjithë treguesi dinamik.

Për të marrë një imazh të fortë pa dridhje, ndërrimi duhet të bëhet me një shpejtësi të lartë, për të parandaluar ndezjen e LED-ve, shpejtësia e rifreskimit duhet të vendoset nga 70 Hz ose më shumë, unë zakonisht e vendos në 100 Hz. Për ndërtimin e mësipërm, pauza llogaritet si më poshtë: për një frekuencë prej 100 Hz, periudha është 10 ms, ka vetëm 4 tregues, përkatësisht, koha e shkëlqimit të secilit tregues është vendosur në 10/4 = 2,5 ms. Ekzistojnë tregues me shtatë segmente me shumë shifra në një banesë, në të cilën segmentet me të njëjtin emër janë të lidhura brenda vetë strehimit, natyrisht, për t'i përdorur ato, është e nevojshme të përdorni tregues dinamik.

Për të zbatuar treguesin dinamik, është e nevojshme të përdoren ndërprerje në tejmbushjen e njërit prej kohëmatësve. Më poshtë është kodi duke përdorur kohëmatësin TMR0:

;Zbatimi i indikacionit dinamik për 4 tregues shtatë segmentësh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; swapf STATUS,W ; clrf STATUSI ; movwf STATUS_TEMP ; ; bcf ind1 ;fik treguesin e parë bcf ind2 ;fik treguesin e dytë bcf ind3 ;fik treguesin e tretë bcf ind4 ;fik treguesin e 4-të; incf shet,F ;increment register shet movlw .5 ;kontrollo përmbajtjen e regjistrit shet xorwf shet,W ;kontrollo nëse është e barabartë me 5 btfss STATUS,Z ; goto met1 ;numri në regjistrin e fletëve nuk është i barabartë me 5 movlw .1 ;numri në regjistrin e fletëve është 5: shkruani numrin 1 movwf shet ;në regjistrin e fletëve ; met1 movlw .1, kontrolloni fletën e përmbajtjes së regjistrit xorwf shet,W, e barabartë me numrin 1 btfss STATUS,Z ; goto met2 ;numri në regjistrin e fletëve nuk është i barabartë me 1: kalo te met2 movf datind1, W ;numri në regjistrin e fletëve është i barabartë me 1: kopjoni movwf PORTB ;përmbajtjen e regjistrit datind1 në regjistrin PORTB bsf ind1 ;ndizni treguesin e parë met2 movlw .2 ;kontrollo përmbajtjen e fletës së regjistrit shet xorwf,W , e barabartë me 2 btfss STATUS,Z ; goto met3 ;numri në regjistrin e fletës nuk është i barabartë me 2: kalo te met3 movf datind2,W ;numri në regjistrin e fletës është 2: kopjoni movwf PORTB ;përmbajtja e regjistrimit datind2 në regjistrin PORTB bsf ind2 ;ndizni treguesin e dytë goto exit ;kaloni në etiketa exit met3 movlw .3, kontrolloni përmbajtjen e regjistrit shet xorwf shet,W ;barabartë me 3 btfss STATUS,Z ; goto met4 ;numri në regjistrin e fletës nuk është i barabartë me 3: kalo te met4 movf datind3,W ;numri në regjistrin e fletës është 3: kopjoni movwf PORTB ;përmbajtja e regjistrimit datind3 në regjistrin PORTB bsf ind3 ;ndizni treguesin e tretë goto exit ;kap te label exit met4 movf datind4,W ;kopjoni përmbajtjen e regjistrit datind3 movwf PORTB ;në regjistrin PORTB bsf ind4 ;ndizni treguesin e 4-të; movlw .100 ;shkruani 156 në regjistrin e kohëmatësit TMR0 movwf TMR0 ; ; MOVWF STATUSI ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Programi kryesor ................. movlw b"11010011" ; OPTION_REG, duke vendosur kështu të brendshmen ; duke vendosur raportin parashkallëzues 1:16 ; clrf shet; rivendosni fletën e regjistrit, përpara fillimit; ndërprerjet në TMR0 të tejmbushur, të kryera; clrf datind1 ;pastrimi i regjistrave për nxjerrjen e informacionit në clrf datind2 ;tregues, është e barabartë me fikjen e clrf datind3 ;treguesve, si tregues me një clrf datind4 ;katodë të përbashkët; bcf INTCON,T0IF ;pastroni ndërprerjen e tejmbushjes TMR0 flamurin bsf INTCON,T0IE ;aktivizoni ndërprerjet e tejmbushjes TMR0 bsf INTCON,GIE ;aktivizoni ndërprerjet globale; movlw b"00000110"; 13.52 shembulli i daljes movwf datind1; movlw b"11001111"; movwf datë2; movlw b"01101101" ; movwf datë3; movlwb"01011011" ; movwf datë4; ; . ................; .................; .................; ; fundi, fundi i të gjithë programit;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Zbatimi i treguesit dinamik për 4 tregues me shtatë segmente

;Frekuenca e orës shembull 4 MHz, cikli i makinës 1 µs

org 0000h ;filloni ekzekutimin e programit në adresën 0000h

goto Start ;shko te etiketa Start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Ndërprerja e rutinës

org 0004h ;filloni ekzekutimin e nënrutinës në adresën 0004h

movwf W_TEMP ;ruaj vlerat e regjistrit kyç

swapf STATUS,W ;

movwf STATUS_TEMP ;

bcf ind1 ;fikni treguesin e parë

bcf ind2 ;fikni treguesin e dytë

bcf ind3 ;fikni treguesin e 3-të

bcf ind4 ;fikni treguesin e 4-të

incf shet,F ;fletë regjistri increment

movlw .5; kontrolloni përmbajtjen e fletës së regjistrit

fletë xorwf,W ; e barabartë me 5

btfss STATUS,Z ;

goto met1 ;numri në fletën e regjistrit nuk është i barabartë me 5

movlw .1 ;numri në regjistrin e fletëve është 5: shkruani numrin 1

movwf shet ;për të regjistruar fletë

met1 movlw .1; kontrolloni përmbajtjen e regjistrit të fletëve

fletë xorwf,W ; e barabartë me numrin 1

btfss STATUS,Z ;

goto met2 ;numri në regjistrin e fletëve nuk është i barabartë me 1: kalo te met2

movf datind1,W ;numri në regjistrin e fletëve është 1: kopje

movwf PORTB; përmbajtja e datind1 regjistrohet në regjistrin PORTB

bsf ind1 ;ndiz treguesin e parë

goto exit ;shko te label exit

met2 movlw .2; kontrolloni përmbajtjen e regjistrit të fletëve

fletë xorwf,W ; e barabartë me numrin 2

btfss STATUS,Z ;

goto met3 ;numri në regjistrin e fletëve nuk është i barabartë me 2: kalo te met3

movf datind2,W ;numri në regjistrin e fletëve është 2: kopje

movwf PORTB; përmbajtja e datind2 regjistrohet në regjistrin PORTB

bsf ind2 ;ndiz treguesin e dytë

goto exit ;shko te label exit

met3 movlw .3; kontrolloni përmbajtjen e regjistrit të fletëve

fletë xorwf,W ; e barabartë me numrin 3

btfss STATUS,Z ;

goto met4 ;numri në regjistrin e fletëve nuk është i barabartë me 3: kalo te met4

movf datind3,W ;numri në regjistrin e fletëve është 3: kopje

movwf PORTB; përmbajtja e datind3 regjistrohet në regjistrin PORTB

bsf ind3 ;ndiz treguesin e 3-të

goto exit ;shko te label exit

met4 movf datind4,W ; kopjoni përmbajtjen e regjistrit datind3

movwf PORTB ;regjistrohu në PORTB

bsf ind4 ;ndiz treguesin e 4-të

dil bcf INTCON,T0IF ;rivendos flamurin e ndërprerjes së tejmbushjes TMR0

movlw .100 ;shkruani numrin 156 në regjistrin e kohëmatësit TMR0

ndërroni STATUS_TEMP,W ; rivendosni përmbajtjen e regjistrave kyç

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;dal nga rutina e ndërprerjes

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Programi kryesor

Fillimi ................. ;caktimi fillestar i regjistrave

................. ;qëllim i veçantë

.................

bsf STATUS,RP0 ;shkruani numrin binar 11010011 për t'u regjistruar

movlw b"11010011" ;OPTION_REG, duke vendosur kështu pjesën e brendshme

movwf OPTION_REG; burimi i orës për TMR0

bcf STATUS,RP0 ;aktivizo shkallëzuesin paraprak përpara TMR0

;Vendosni raportin e parashkallëzuesit në 1:16

clrf shet ; rivendosni regjistrin e fletëve përpara se të filloni

;ndërprerja e tejmbushjes TMR0, e kryer

;një herë pas ndezjes

clrf datind1; qartë regjistrat për nxjerrjen e informacionit

clrf datind2 ;tregues, ekuivalent me off

clrf datind3 ;treguesit, pasi treguesit me një të përbashkët

clrf datind4 ;katodë

bcf INTCON,T0IF ;rivendos flamurin e ndërprerjes së tejmbushjes TMR0

bsf INTCON,T0IE ;aktivizo ndërprerjet e tejmbushjes TMR0

bsf INTCON,GIE ; aktivizoni ndërprerjet globale

movlw b"00000110"; shembulli i daljes 13.52

movlw b"11001111";

movlw b"01101101" ;

movlwb"01011011" ;

................. ;

................. ;

................. ;

fundi; fundi i të gjithë programit

Në programin kryesor, ne fillimisht vendosëm një kohëmatës duke përdorur regjistrin OPTION_REG, më herët fola për përdorimin e kohëmatësve për . Më pas, pastrojmë regjistrin e fletëve, i destinuar për të futur një numërim nga 1 në 4, për secilin tregues. Ky regjistër shtohet në rutinën e shërbimit të ndërprerjes dhe rregullohet aty (do të numërojë nga 1 në 4), kështu që ky pastrim kryhet një herë pas ndezjes. Bazuar në këtë regjistër, ne do të përcaktojmë se cilin tregues do të përfshijmë dhe nxjerrim të dhëna që i korrespondojnë atij. Hapi tjetër është pastrimi i regjistrave të ruajtjes së informacionit, katër regjistrat e të dhënave1,2,3,4 që korrespondojnë me katër treguesit. Pastrimi është i barabartë me fikjen e treguesve, pasi në rutinën e shërbimit të ndërprerjes, përmbajtja e këtyre regjistrave transferohet në regjistrin PORTB, me të cilin lidhen anodat treguese. Kjo është e nevojshme në mënyrë që çdo mbeturinë të mos shfaqet në tregues pasi janë aktivizuar ndërprerjet, në parim kjo nuk mund të bëhet nëse informacioni i saktë shkruhet menjëherë për dalje. Më pas, rivendosni flamurin e ndërprerjes së tejmbushjes së kohëmatësit, aktivizoni ndërprerjet e tejmbushjes TMR0 dhe në fund aktivizoni ndërprerjet globale.

Në rutinën e ndërprerjes fillimisht i fikim të gjithë treguesit (duke aplikuar nivele të ulëta logjike në bazat e transistorëve), sepse nuk dihet se cili është ndezur. Ne e rritim regjistrin e fletëve, duke kontrolluar barazinë me numrin 5, nëse ka një përputhje të tillë, shkruajmë numrin 1 në regjistër, pasi është e nevojshme të numërohet nga 1 në 4. Më pas, kontrollojmë se cili numër është në fletë regjistri, me të cilin ngarkojmë të dhënat nga PORTB në regjistrat e ruajtjes së informacionit PORTB (të dhënat) për treguesin përkatës dhe e ndezim atë. Pas kësaj, ne rivendosim flamurin e ndërprerjes së tejmbushjes TMR0, shkruajmë numrin 100 në kohëmatës (llogaritja e kësaj vlere është dhënë më poshtë), për një vonesë kohore dhe dalim nga mbajtësi i ndërprerjeve. Në ndërprerjen e parë, treguesi i parë ndizet, në ndërprerjen e dytë, i dyti, e kështu me radhë në një cikël rrethor. Në programin kryesor, mbetet vetëm ngarkimi i të dhënave në regjistrat e ruajtjes së informacionit për secilin tregues. Në nënprogramin e ndërprerjes, mos harroni të ruani dhe rivendosni vlerat e regjistrave kryesorë, kam shkruar për këtë në një artikull rreth.

Për të nxjerrë numrat, është më mirë të përdorni një gjenerator karakteresh në formën e një tabele të dhënash. Për shembull, për të shfaqur numrin 3456 në tregues, ai duhet të ndahet në shifra, ndërsa është më mirë të përdorni regjistra të veçantë për të ruajtur numrat e shifrave (nga 0 në 9), pastaj t'i ekzekutoni këta regjistra përmes gjeneratorit të karaktereve, në këtë mënyrë marrjen e bajteve të sakta (të ngarkuara në regjistrat e të dhënave) për të ndezur segmentet përkatëse.

Frekuencën e gjeneratorit të orës do ta marrim si 4 MHz, cikli i makinës është 1 μs. Le të jetë shpejtësia e rifreskimit të secilit tregues 100 Hz (periudha T = 10 ms), përkatësisht, vonesa e kërkuar kohore është 10/4 = 2,5 ms. Faktori i parashkallëzuesit për TMR0 është vendosur në 1:16, ndërsa vonesa maksimale e mundshme është 256x16 = 4096 µs, dhe na duhet një pauzë prej 2,5 ms. Le të llogarisim numrin për të shkruar në TMR0: 256-((256x2.5)/4.096) = 256-156.25 = 99.75. Pas rrumbullakimit, marrim numrin 100.

Më poshtë mund të shkarkoni një model për programin Proteus, firmware dhe kodin burimor me zbatimin e treguesit dinamik në një tregues 4-shifror me një katodë të përbashkët duke përdorur mikrokontrolluesin PIC16F628A. Për shembull, numrat 0000 shfaqen në tregues; 0001; 0002; 13,52; 9764.

Tani merrni parasysh lidhjen e një matrice me një rezolucion prej 8x8 piksele (LED). Struktura e një matrice zakonisht konsiderohet në aspektin e rreshtave dhe kolonave. Në foton më poshtë, në secilën kolonë, katodat e të gjitha LED-ve janë të lidhura, dhe në çdo rresht, anodat. Vargjet (8 rreshta, anoda LED) lidhen përmes rezistorëve në mikrokontrollues. Çdo kolonë (katodat LED) lidhet me mikrokontrolluesin përmes 8 transistorëve. Algoritmi i treguesit është i njëjtë, së pari vendosim nivelet e nevojshme logjike në rreshta, në përputhje me të cilat LED duhet të ndizen në kolonë, pastaj lidhim kolonën e parë (tregimi nga e majta në të djathtë). Pas një pauze të caktuar, ne e fikim kolonën dhe ndryshojmë nivelet logjike në rreshta për të shfaqur kolonën e dytë, pastaj lidhim kolonën e dytë. Dhe kështu në mënyrë alternative lëvizni të gjitha kolonat. Më poshtë është një diagram i lidhjes së matricës me mikrokontrolluesin.


Në total, për të lidhur një matricë të tillë, kërkohen 16 kunja mikrokontrollues, gjë që është mjaft, prandaj, për të zvogëluar linjat e kontrollit, është më mirë të përdorni regjistrat e zhvendosjes serike.

Regjistri serial më i zakonshëm është mikroqarku 74HC595, i cili përmban një regjistër ndërrimi për ngarkimin e të dhënave dhe një regjistër mbajtës përmes të cilit të dhënat transferohen në linjat e daljes. Ngarkimi i të dhënave në të është i thjeshtë, vendosni 0 logjike në hyrjen e orës SH_CP, më pas vendosni nivelin e kërkuar logjik në hyrjen e të dhënave DS, pas së cilës kalojmë hyrjen e orës në 1, ndërsa ruajmë vlerën e nivelit (në hyrjen DS) brenda regjistrit të ndërrimit. Në të njëjtën kohë, të dhënat zhvendosen me një bit. Rivendosni daljen SH_CP në 0 përsëri, vendosni nivelin e kërkuar në hyrjen DS dhe ngrini SH_CP në 1. Pasi regjistri i zhvendosjes është i ngarkuar plotësisht (8 bit), vendosni daljen ST_CP në 1, në këtë moment të dhënat transferohen në regjistri i ruajtjes dhe futet në linjat e daljes Q0 ... Q7, pas së cilës rivendosim daljen e ST_CP. Gjatë ngarkimit sekuencial, të dhënat zhvendosen nga Q0 në Q7. Pini Q7' është i lidhur me bitin e fundit të regjistrit të ndërrimit, ky pin mund të lidhet me hyrjen e mikroqarkut të dytë, kështu që mund të ngarkoni të dhënat në dy ose më shumë mikroqarqe njëherësh. Pini OE i kalon linjat e daljes në gjendjen e tretë (me rezistencë të lartë) kur aplikohet në të një logjikë 1. Pini MR është projektuar për të rivendosur regjistrin e zhvendosjes, domethënë vendosjen e niveleve të ulëta logjike në daljet e aktivizuesve të regjistrit , që është ekuivalente me ngarkimin e tetë zerave. Më poshtë është një diagram i ngarkimit të të dhënave në mikroqarkun 74NS595, duke vendosur vlerën 11010001 në linjat e daljes Q0 ... Q7, me kusht që fillimisht të kishte zero:


Konsideroni të lidhni një matricë 8×8 me një mikrokontrollues PIC16F628A duke përdorur dy regjistra të zhvendosjes 74HC595, diagrami tregohet më poshtë:


Të dhënat ngarkohen në çipin DD2 (kontrolli i nivelit logjik në rreshta, anoda LED), pastaj përmes pinit Q7 transferohen në DD3 (kontrolli i kolonës), përkatësisht, fillimisht ngarkojmë bajtin për të mundësuar kolonën, pastaj bajtin. me nivelet logjike në rreshta. Kolonat e matricës së ndërrimit të transistorëve (katodat LED) janë të lidhura me linjat e daljes së DD3. Më poshtë është kodi i programit për shfaqjen e një imazhi në një matricë:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Zbatimi i indikacionit dinamik për një matricë me rezolucion 8x8 ;Frekuenca e gjeneratorit të orës për shembull 4 MHz, cikli i makinës 1 µs org 0000h ;fillimi i ekzekutimit të programit nga adresa 0000h goto Fillo ;kalim te etiketa Fillimi ;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Ndërprerja e rutinës org 0004h ;fillimi i ekzekutimit të nënrutinës nga adresa 0004h movwf W_TEMP ;ruaj vlerat kryesore të regjistrit swapf STATUS,W ; clrf STATUSI ; movwf STATUS_TEMP ; ; movwf FSR_osn ;në regjistrin FSR_osn movf FSR_prer,W ;rikthimi i vlerës së ruajtur më parë movwf FSR ;të regjistrit FSR nga regjistri FSR_prer ;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;ngarkoni përmbajtjen e regjistrit stolb në çipin movf stolb,W ;kopjoni përmbajtjen e regjistrit stolb movwf var ;në regjistër var met2 btfsc var,0 ;vendosni daljen ds në përputhje me btfss var,0 ; bcf ds; bcf sh_cp; rrf var,F ;Shift regjistrin var djathtas për t'u përgatitur;biti tjetër shkoi met2 ;scetbit jo i barabartë me zero: kërce te etiketa met2 ;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;; ;ngarkoni përmbajtjen e regjistrit INDF në çip;74HC595 (regjistri i zhvendosjes serike) movf INDF,W ;kopjoni përmbajtjen e regjistrit INDF movwf var ;në regjistrin var movlw .8 ;shkruani numrin 8 në regjistrin scetbit, për numërimin e movwf scetbit ;bitët e transferuar met1 btfsc var ,7 ;vendosni daljen ds sipas bsf ds ;vlera e bitit të 7-të të regjistrit var btfss var,7 ; bcf ds; bsf sh_cp ;dalja e orës sh_cp për të lidhur të dhënat bcf sh_cp ; rlf var,F ;Shift regjistrin var majtas për t'u përgatitur;biti tjetër decfsz scetbit,F ;Zvogëlimi me kushtin e regjistrit scetbit goto met1 ;scetbit jo i barabartë me zero: Shko te etiketa met1 ; bsf st_cp , rrahni daljen st_cp për të transferuar bcf st_cp të ngarkuara , bajt në linjat e daljes së çipave 74HC595 ; bcf STATUS,C ;rivendos bitin C të statusit të regjistrit përpara ndërrimit rrf stolb,F ;regjistri i zhvendosjes majtas stolb ; incf FSR,F ;Rritja e regjistrit FSR, përgatituni më pas ;Regjistrohuni për të dërguar të dhëna në fletën 74HC595 decfsz,F ;Zvogëlimi me fletën e gjendjes së regjistrit goto exit ;Regjistri i regjistrimit nuk është i barabartë me 0: Shko për të dalë nga data1 movlw ;Regjistri i regjistrimit i barabartë me 0: Shkruaj adresën e parë movwf FSR ;Regjistrohu për ruajtjen e informacionit në regjistrin FSR movlw .8 ;Shkrimi i numrit 8 në regjistrin e fletëve, për mirëmbajtjen e fletës movwf ;Numërimi i kolonave ; dil bcf INTCON,T0IF ;rivendos flamurin e ndërprerjes së tejmbushjes TMR0 movlw . 124 ;shkruani numrin 124 në regjistrin e kohëmatësit TMR0 movwf TMR0 ; ; movf FSR,W ;Ruaj vlerën aktuale të FSR movwf FSR_prer ;Te FSR_prer movf FSR_osn ,W ;Rivendos vlerën e ruajtur më parë movwf FSR ;FSR nga FSR_osn ; swapf STATUS_TEMP,W, rivendosja e përmbajtjes së regjistrave kyç movwf STATUS; swapf W_TEMP,F ; swapf W_TEMP,W ; ; retfie ;dalje nga nënprogrami i ndërprerjes;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Fillimi i programit kryesor ................ ;Vendosja fillestare e regjistrave ................. ;Qëllim i veçantë..... ............ bsf STATUS,RP0 ;shkruani numrin binar 11010011 në regjistrin movlw b"11010010" ;OPTION_REG, duke vendosur kështu burimin e brendshëm movwf OPTION_REG ;burimin e orës për TMR0 bcf STATUS,RP0 ;aktivizoni shkallëzimin paraprak përpara TMR0; vendosni raportin parashkallëzues 1:8; movlw .8 ;shkruani numrin 8 në regjistrin e shetit, përpara se të filloni fletën movwf; tmr0 ndërprerjet e tejmbushjes, ekzekutohen; një herë, pasi të ndizni movlw b"10000000" ;shkruani numrin binar 10000000 në movwf stolb ;regjistri stolb1, për të aktivizuar kryhet një herë, pas ndezjes së energjisë; movlw data1 ;Shkruani adresën e regjistrit të parë (regjistrat e ruajtjes movwf FSR_prer ;informacione) në regjistrin FSR_prer, kryer;një herë pas ndezjes; movlw .8 ;pastrimi i 8 regjistrave të daljes së informacionit në movwf tmp ;matricë, ekuivalente me fikjen e të dhënave movlw1 ;matricë movwf FSR ; met3 clrf INDF; incf FSR,F ; decfsz tmp,F ; goto met3; ; bcf INTCON,T0IF ;pastroni ndërprerjen e tejmbushjes TMR0 flamurin bsf INTCON,T0IE ;aktivizoni ndërprerjet e tejmbushjes TMR0 bsf INTCON,GIE ;aktivizoni ndërprerjet globale; m1 movlw data1, shembulli i daljes R movwf FSR; movlw b"00000000" ; movwf INDF; incf FSR,F ; movlw b"01111111" ; movwf INDF; incf FSR,F ; movlwb"00001001" ; movwf INDF; incf FSR,F ; movlwb"00011001" ; movwf INDF; incf FSR,F ; movlwb"00101001" ; movwf INDF; incf FSR,F ; movlw b"01000110" ; movwf INDF; incf FSR,F ; movlw b"00000000" ; movwf INDF; incf FSR,F ; movlw b"00000000" ; movwf INDF; ; .................; .................; .................; ; fundi, fundi i të gjithë programit;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Zbatimi i treguesit dinamik për një matricë me rezolucion 8x8

;Frekuenca e orës shembull 4 MHz, cikli i makinës 1 µs

org 0000h ;filloni ekzekutimin e programit në adresën 0000h

goto Start ;shko te etiketa Start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Ndërprerja e rutinës

org 0004h ;filloni ekzekutimin e nënrutinës në adresën 0004h

movwf W_TEMP ;ruaj vlerat e regjistrit kyç

swapf STATUS,W ;

movwf STATUS_TEMP ;

movf FSR,W ;ruaj vlerën aktuale të regjistrit FSR

movwf FSR_osn ;për të regjistruar FSR_osn

movf FSR_prer,W ; rivendos vlerën e ruajtur më parë

movwf FSR ;FSR nga FSR_prer

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (regjistri i ndërrimit serik)

movf stolb,W ; kopjoni përmbajtjen e regjistrit stolb

movwf var ;për të regjistruar var

movlw .8 ;shkruani numrin 8 në regjistrin scetbit, për numërim

movwf scetbit ;bitë të transmetuara

met2 btfsc var,0 ;cakto ds output sipas

bsf ds; vlera e bitit të 7-të të regjistrit var

bsf sh_cp ;dalja e orës sh_cp për të lidhur të dhënat

rrf var,F; regjistri i zhvendosjes var djathtas për t'u përgatitur

;pak tjetër

decfsz scetbit,F ;zvogëlim me gjendjen e regjistrit scetbit

goto met2 ;scetbit jo i barabartë me zero: hidhu te etiketa met2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (regjistri i ndërrimit serik)

movf INDF,W ; kopjoni përmbajtjen e regjistrit INDF

movwf var ;për të regjistruar var

movlw .8 ;shkruani numrin 8 në regjistrin scetbit, për numërim

movwf scetbit ;bitë të transmetuara

met1 btfsc var,7 ;cakto ds output sipas

bsf ds; vlera e bitit të 7-të të regjistrit var

bsf sh_cp ;dalja e orës sh_cp për të lidhur të dhënat

rlf var,F ;shift majtas var për t'u përgatitur

;pak tjetër

decfsz scetbit,F ;zvogëlim me gjendjen e regjistrit scetbit

goto met1 ;scetbit jo i barabartë me zero: hidhu te etiketa met1

bsf st_cp ;kloko daljen e st_cp për të transferuar të ngarkuar

bcf st_cp ;bajtë për 74HC595 linja dalëse

bcf STATUS,C ; pastroni bitin C të regjistrit të statusit përpara ndërrimit

rrf stolb,F ;regjistri i zhvendosjes majtas stolb

incf FSR,F ;rritje e regjistrit FSR, përgatiteni në vijim

; regjistrohu për të dërguar të dhëna në 74HC595

fletë decfsz,F ;zvogëlim me fletën e gjendjes së regjistrit

goto exit ;shet register jo i barabartë me 0: kërce për të dalë

movlw data1 ;shet regjistri është 0: shkruani adresën e të parit

movwf FSR ;Regjistrohu për të ruajtur informacionin në FSR

movlw .8 ;shkruani numrin 8 në regjistrin e fletëve, për referencë

fletë movwf ;kollonat numërohen

movlw b"10000000"; shkruani numrin binar 10000000 në

movwf stolb ;regjistroni stolb, për të përfshirë kolonën 1

dil bcf INTCON,T0IF ;rivendos flamurin e ndërprerjes së tejmbushjes TMR0

movlw .124 ;shkruani numrin 124 në regjistrin e kohëmatësit TMR0

movf FSR,W ;ruaj vlerën aktuale të regjistrit FSR

movwf FSR_prer ;në regjistrin FSR_prer

movf FSR_osn,W; rivendos vlerën e ruajtur më parë

movwf FSR ;FSR nga FSR_osn

ndërroni STATUS_TEMP,W ; rivendosni përmbajtjen e regjistrave kyç

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;dal nga rutina e ndërprerjes

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Programi kryesor

Fillimi ................. ;caktimi fillestar i regjistrave

................. ;qëllim i veçantë

.................

bsf STATUS,RP0 ;shkruani numrin binar 11010011 për t'u regjistruar

movlw b"11010010" ;OPTION_REG, duke vendosur kështu pjesën e brendshme

movwf OPTION_REG; burimi i orës për TMR0

bcf STATUS,RP0 ;aktivizo shkallëzuesin paraprak përpara TMR0

;Vendosni raportin parashkallëzues në 1:8

movlw .8 ;shkruani numrin 8 në regjistrin e fletëve përpara se të ekzekutoni

fletë movwf; TMR0 tejmbushja ndërpret, funksionon

;një herë pas ndezjes

movlw b"10000000"; shkruani numrin binar 10000000 në

movwf stolb ;regjistroni stolb, për të përfshirë kolonën 1

Informacioni me nivele logjike për rreshtat e secilës kolonë ruhet në 8 regjistra të ruajtjes së informacionit, të cilët aksesohen përmes. Adresa e regjistrit të parë quhet data1. Përveç shkrimit fillestar të regjistrave shet dhe stolb, është e nevojshme të shkruhet adresa e regjistrit të parë të ruajtjes së informacionit në regjistrin FSR_prer (regjistri është data1, futja në FSR_prer kryhet një herë, pastaj rregullohet në mbajtës), vetëm pas kësaj, lejoni ndërprerjet e tejmbushjes së TMR0.

Para se të aktivizoni ndërprerjet, është e dëshirueshme të pastroni regjistrat e ruajtjes së informacionit, ky operacion kryhet duke përdorur regjistrin shtesë tmp (si numërues) dhe adresimin indirekt, pastrimi është i barabartë me fikjen e matricës.

Në rutinën e trajtimit të ndërprerjeve, ne ngarkojmë përmbajtjen e regjistrit stolb në çipin DD2 (hera e parë që futni mbajtësin pas aktivizimit të ndërprerjeve, regjistri përmban numrin 10000000, siç u përmend më lart). Ngarkimi fillon nga biti i ulët i regjistrit stolb, i cili zhvendoset në drejtim nga Q0 në Q7 (brenda çipit DD2) ndërsa ngarkohet, algoritmi i ngarkimit u diskutua më lart, kështu që mendoj se nuk do të jetë e vështirë të kuptohet kodi . Më pas, ngarkojmë përmbajtjen e regjistrit INDF në DD2, ky është një nga regjistrat e ruajtjes së informacionit, adresa e të cilit është në FSR (hera e parë që futni mbajtësin pas aktivizimit të ndërprerjeve, FSR përmban adresën e të parës regjistri i ruajtjes së informacionit i quajtur data1). Ngarkimi fillon nga biti i lartë i regjistrit INDF. Pas ngarkimit të 2 bajteve të konsideruara, ne rrahim daljen st_cp, në këtë mënyrë të dhënat e shkarkuara transmetohen në linjat e daljes së mikroqarqeve DD2, DD3. Kështu, në hyrjen e parë të mbajtësit, ndërrohet kolona e parë e matricës, në të cilën ndizen LED, në anodat e të cilave ka një nivel të lartë logjik, në përputhje me përmbajtjen e regjistrit të të dhënave1 ( regjistri i parë i ruajtjes së informacionit).

Më pas, ne e zhvendosim regjistrin stolb djathtas me një bit në mënyrë që të përgatisim kolonën e dytë të matricës për kalimin në hyrjen e radhës në mbajtësin e ndërprerjeve. Flamuri C i regjistrit STATUS duhet të pastrohet përpara ndërrimit, pasi zhvendosja ndodh përmes këtij flamuri dhe gjendja e tij nuk dihet në momentin e ndërrimit. Pas zhvendosjes, ne rritim regjistrin FSR, duke përgatitur regjistrin tjetër të ruajtjes (pas regjistrit data1) me nivele logjike të rreshtave për kolonën e dytë. Më pas, zvogëlojmë regjistrin e fletëve me kushtin dhe nëse nuk është i barabartë me zero, rivendosni flamurin e ndërprerjes së tejmbushjes TMR0, shkruani numrin në kohëmatës dhe dilni nga mbajtësi i ndërprerjeve.

Herën tjetër që të futni mbajtësin, kolona e dytë e matricës do të aktivizohet, e kështu me radhë. Kur regjistri i fletëve rivendoset (pas ndërrimit të kolonës së 8-të), numri 8 i shkruhet për ciklin tjetër të kolonave ndërruese, përveç kësaj, korrigjohet vlera e regjistrit stolb, adresa e regjistrit të parë të ruajtjes së informacionit ( data1) shkruhet në regjistrin FSR.

Le të llogarisim vonesën kohore për kohëmatësin TMR0, frekuenca e orës është 4 MHz, cikli i makinës është 1 µs. Për të shmangur dridhjet e LED-ve, le të marrim shpejtësinë e rifreskimit të secilës kolonë si 100Hz (periudha T=10ms), vonesa kohore është 10/8 = 1.25ms. Ne vendosëm raportin e parashkallëzuesit TMR0 në 1:8, ndërsa vonesa maksimale e mundshme është 256x8 = 2048 µs. Për një pauzë prej 1,25 ms, kohëmatësi duhet të numërojë (256x1,25) / 2,048 = 156,25 herë, duke rrumbullakosur lart marrim 156 numërime. Prandaj, është e nevojshme të shkruhet në kohëmatës numri 256-156 = 100. Por kjo nuk është vlera mjaft e saktë, pasi kërkon pak kohë për të ekzekutuar rutinën e ndërprerjes, në këtë rast duhen rreth 190 µs, rillogaritur duke marrë në llogarisni koeficientin e parashkallëzuesit, marrim 190/8 = 23.75 ose 24 numërime. Vlera e saktë për të shkruar në TMR0 është: 100+24=124.

Në programin kryesor, ne shkruajmë 8 regjistra të ruajtjes së informacionit, në përputhje me atë që duam të shfaqim në matricë. Më poshtë është një diagram që shpjegon daljen e informacionit në matricë për kodin e mësipërm.


Përveç regjistrave të ndërrimit, ekzistojnë drejtues të specializuar për shfaqjen e informacionit për treguesit me shtatë segmente dhe matricat LED, në këtë rast vetë drejtuesi zbaton tregues dinamik, gjithçka që mbetet është t'i dërgoni të dhënat për shfaqje. Kam shqyrtuar një nga këta drejtues të njohur në një artikull rreth.

Më poshtë lidhjes mund të shkarkoni firmware-in dhe kodin burimor për mikrokontrolluesin PIC16F628A, me zbatimin e treguesit dinamik në një matricë 8x8 duke përdorur dy regjistra ndërrimi 74HC595, diagrami i lidhjes u diskutua më lart. Shkronjat R, L, numri 46, një buzëqeshje dhe vetëm një model në formën e një kryqi shfaqen në mënyrë alternative në matricë, ky animacion tregohet në videon më poshtë.

me etiketa,. Lexoni.

Ekranet LED me matricë 8x8 vijnë në madhësi të ndryshme dhe janë argëtuese për të punuar. Asambletë e mëdha industriale kanë përmasa rreth 60 x 60 mm. Megjithatë, nëse jeni duke kërkuar për grupe LED shumë më të mëdha, ato janë të vështira për t'u gjetur.

Në këtë projekt, ne do të ndërtojmë një ekran LED me matricë LED vërtet të madh, i cili përbëhet nga disa module të mëdha LED 8x8 të lidhura në seri me njëri-tjetrin. Secili prej këtyre moduleve është rreth 144 x 144 mm në madhësi.

E veçanta e këtij ekrani është se, nëse është e nevojshme, mund të shikoni sfondin pas tij. Kjo lejon përdorimin kreativ të këtyre ekraneve, si p.sh. vendosja e tyre përpara paneleve të xhamit në mënyrë që të mund të shihni se çfarë po ndodh pas ekranit.

Për këtë projekt do të përdorim 10 mm. Mund të përdorni edhe përmasa të tjera. Madhësitë e disponueshme zakonisht janë 3mm, 5mm, 8mm dhe 10mm.

Megjithëse ekrani nuk është krijuar për të punuar me ndonjë mikrokontrollues, ne do të përdorim pllakat e njohura Arduino dhe do ta lidhim atë nëpërmjet SPI duke përdorur vetëm 3 tela sinjali.

Për të ndërtuar këtë projekt nevojiten njohuri bazë të elektronikës dhe saldimit të komponentëve, si dhe disa njohuri të përdorimit të Arduino. Firmware .

Këtu ju duhet të bashkoni LED-të së bashku duke përdorur këmbët e gjata të LED-ve. Ju mund të përdorni çdo madhësi dhe ngjyrë LED, por gjatësia e këmbës (më shumë se 23 mm) duhet të jetë mjaft e gjatë për t'i përkulur dhe bashkuar ato së bashku. LED-et janë të rregulluara në formën e një matrice 8x8, ku katoda janë ngjitur së bashku për rreshtat, dhe anoda për kolonat.

Drejtuesi MAX7219 kontrollon treguesin dinamik të matricës LED. Gjatë projektimit, çdo matricë LED 8x8 do të bazohet në një qark duke përdorur komponentët e mëposhtëm:

  • 1 x MAX7219
  • 1 x 10uF 16V kondensator elektrolitik
  • 1 x 0.1UF kondensator qeramik
  • 1 x 12 kΩ rezistencë (0,25 W)
  • 1 fole DIP IC me 24 pin

Vini re se mund t'ju duhet të zgjidhni një vlerë të ndryshme të rezistencës për të punuar me LED që po përdorni. Kjo rezistencë kufizon rrymën maksimale në MAX7219 që do të dalë në LED.

Dhe kjo video tregon qartë se si instalimi i matricës LED, bordi i kontrollit elektronik dhe një test i thjeshtë për ta ekzekutuar atë duke përdorur bordin e njohur Arduino UNO / Nano.


Një nga avantazhet e rëndësishme të këtij konverteri është se praktikisht nuk ka nevojë për akordim, i gjithë cilësimi zbret në zgjedhjen e kondensatorit të vendosjes së frekuencës së mikroqarkullimit, ato janë të akorduara në frekuencën e dëshiruar, me një rritje të kapacitetit të ky kondensator, frekuenca zvogëlohet, me një rritje, rritet.



Artikuj të ngjashëm: