Diten e mire!
Paraqitjet heksadecimal të numrave shkruhen në kllapa.
Më në fund, jam pjekur para se të shkruaj postimin e radhës.
Sot do të përpiqem të shkruaj një gjenerator pulsi. Po, jo vetëm në ballë nga një ndërrim banal i gjendjes së secilës këmbë pas një kohe të caktuar, por "bukur", d.m.th. përmes ndërprerjeve. Ne do të përdorim tejkalimin e kohëmatësit TMR0 si burim ndërprerjeje.
Ne fillojmë të diskutojmë
Le të përpiqemi të kuptojmë se çfarë është ky kohëmatës misterioz TMR0.
Dhe ky kohëmatës thjesht numëron numrin e pulseve hyrëse. Për më tepër, burimi i impulsit mund të jetë ose ndonjë pajisje e jashtme ose një gjenerator i brendshëm. Zgjedhja e burimit të pulsit kryhet nga një bit i regjistrit OPTION_REG. Domethënë, biti i pestë, T0CS.
Gjithashtu duket se është ndërprerë në mënyrë të kuptueshme. Erdhi një impuls, vlera në regjistër u rrit (u rrit me një). Dhe kështu me radhë derisa kohëmatësi të tejmbushet. Mbyllja është për shkak të thellësisë së bitit të kontrolluesit. Kontrolluesi ynë është tashmë 8-bit. Dhe në 8 shifra, ju mund të ruani numra në rangun 0..255 përfshirëse (gjithsej 256). Kjo do të thotë që tejmbushja do të ndodhë kur numëruesi / kohëmatësi përmban tashmë numrin 255, të cilit kontrolluesi do të përpiqet të shtojë një tjetër. Dhe këtu fillojnë mrekullitë. Vlera në regjistrin e numëruesit do të bëhet e barabartë me 0 (0x00), dhe kontrolluesi do të fillojë të përpunojë ndërprerjet, duke ngritur flamurin për shfaqjen e këtij ndërprerje.
Duket se e kuptuan. Tani si do të bënim një gjenerator pulsi prej tij? Po, është më e lehtë se një rrepë e zier në avull. Përfundimi është se ju mund të shkruani një numër në regjistrin TMR0. Dhe do të rritet jo nga zero, por nga ky numër. Kështu, ju vetëm duhet të kapni (mirë, ose numëroni) se çfarë numri duhet të vendosim në regjistrin TMR0 në mënyrë që të bëjmë kohëzgjatjen e dëshiruar të pulsit.
Këtu u përpoqa të përshkruaj një pamje të një bllok diagrami, por shkarkova një program shumë të ndërlikuar dhe nuk kishte shumë kohë për t'u marrë me të. Edhe pse doli, si për mua, është mjaft e qartë. Ne shikojmë:
Aty ku shigjetat midis blloqeve nuk shfaqen, atëherë ato shkojnë njëra pas tjetrës.
Kodi doli të ishte mjaft i vogël, ne shikojmë. Komentuar në maksimum:
#include p16F84A.inc ; lidhni kokën
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC ; Konfigurimi MK
;----
; Regjistrat për qëllime të përgjithshme
;---
; Por ne nuk do t'i kemi, është sikur, do t'ia dalim me një bateri
;---
; Programi
;---
ORG 0x00 ; specifikoni adresën e programit kryesor
GOTO kryesore
;---
; Ndërprerjet dhe nënprogramet
;---
ORG 0x04 ; Përcaktoni vektorin e ndërprerjes
JO ; kalibrimi NOP
COM PORTA ; përmbys të gjitha kunjat e portit A
JO ; përsëri kalibrimi NOP
movlw .152 ; Vonesa 255-152=103 vënë në W
MOVWF TMR0 ; Në TMR0 vendosim vlerën e vonesës
BCF INTCON,2 ; reset interrupt flag
RETFIE ; kthehu në kryesore. program
;---
;Laku kryesor
;---
STATUSI kryesor i BSF,5 ; Shkoni në bankën e parë
movlw.0 ; Vendosim akumulatorin 0
MOVWF TRISA ; Shënojmë të gjithë portin A për dalje
BCF OPTION_REG,5 ; Sinjali i orës së brendshme për TMR0
STATUSI BCF,5 ; Duke shkuar në Zero Bank
BSF INTCON ; Aktivizo ndërprerjet
BSF INTCON,5 ; Aktivizo ndërprerjet në TMR0 të tejmbushjes
CLRF PORTA ; Logjika zero në të gjithë portin A
movlw .152 ; Dërgimi i një numri te akumulatori
MOVWF TMR0 ; 256-1-148=107 mts mbetur para tejmbushjes
lak ; Në pritje të ndërprerjes
GOTO Loop
FUND
Në fakt kjo është e gjitha 🙂 dhe funksionon kështu.
Ky projekt bazohet në qarkun e gjeneratorit të funksionit të përshkruar në faqen e internetit të Mondo. Bëra vetëm ndryshime shumë të vogla dhe korrigjova disa gabime të dukshme në skemë. Kodi i rishkruar për sintaksën e mikroçipit.
Specifikimet e gjeneratorit:
Përgjigja e frekuencës: 11Hz - 60kHz
Kontroll dixhital i frekuencës me 3 hapa të ndryshëm
Forma e valës: sinus, trekëndësh, katror, puls, shpërthim, fshirje, zhurmë
Gama e tensionit të daljes: ±15V për sinus dhe delta, 0-5V për të tjerët
Sinkronizimi: dalje për sinjalin e pulsit.
Pajisja mundësohet nga një transformator 12 volt, i cili siguron një tension mjaft të lartë (më shumë se 18 V) DC të nevojshëm për funksionimin normal të stabilizuesve 78L15 dhe 79L15. Një furnizim prej ±15 V është i nevojshëm në mënyrë që op-amp LF353 të nxjerrë një gamë të plotë sinjalesh me një ngarkesë 1 kΩ. Kur përdorni një furnizim ±12 V, kjo rezistencë duhet të jetë së paku 3 kΩ.
Sensori i rrotullimit (koder rrotullues) që kam përdorur është ALPS SRBM1L0800 në formën e dy çelësave në një rreth në diagram. Autori ndoshta ka përdorur një tjetër, kështu që disa ndryshime në kodin e programit të kontrolluesit ishin të nevojshme. Sensori im ka dy grupe kontaktesh: OFF dhe ON (kur rotori lëviz në drejtimin përkatës). Prandaj, një ndërprerje e ndryshimit të PORTB duhet të krijohet nëse njëra nga palët e kunjave është e shkurtuar. Kjo arrihet duke lidhur të dy grupet e kontakteve me kontaktet PIC16 (RB4 - RB7), të cilat kontrollohen nga programi për një ndryshim në gjendje. Për fat të mirë, RB4 nuk u përdor në modelin origjinal, kështu që unë thjesht e ridrejtova RB3 në RB4. Një modifikim tjetër është për shkak të përdorimit të një koduesi rrotullues, kështu që ndryshova pak ndërprerjet e firmuerit. Bëra që rregullatori të mbajë gjendjen për 100 matje të njëpasnjëshme në vend të 10 në modelin origjinal. Vini re se disa kunja PIC përdoren për të ridrejtuar +5V për të thjeshtuar paraqitjen e PCB-së, kështu që ato janë konfiguruar si hyrje porti.
Pllaka e qarkut të printuar siguron tre montime rezistencash. One - R / 2R - për DAC nga seria Bourns 4310R. Montimi i rezistorëve DAC mund të ndërtohet edhe në rezistorë diskrete sipas diagramit të mësipërm. Duhet të përdoren rezistorë me një tolerancë prej ±1% ose më të mirë. Rezistenca kufizuese LED të Serisë Bourns 4306R. Shkëlqimi i LED-ve mund të rritet duke ndryshuar rezistencën e rezistorëve kufizues deri në 220 - 330 ohms.
Gjeneratori është montuar në një kuti plastike 179x154x36 mm me panele alumini të përparme dhe të pasme. Niveli i sinjalit të daljes rregullohet nga një rezistor i ndryshueshëm Alfa 1902F. Të gjithë komponentët e tjerë janë montuar në panelet e përparme dhe të pasme (butonat, lidhësit, asambletë LED, lidhësin e energjisë). Pllakat janë ngjitur në kasë me bulona 6 mm me ndarëse plastike.
Gjeneratori prodhon 9 forma të ndryshme valore dhe funksionon në tre mënyra, të cilat zgjidhen duke përdorur butonin "Zgjidh" dhe treguesi i tyre shfaqet në tre LED-të e sipërm (sipas diagramit). Sensori i rrotullimit korrigjon parametrat e sinjalit sipas tabelës së mëposhtme:
Modaliteti\Formulari |
trekëndëshi |
||||||||
Modaliteti 1 |
|||||||||
Modaliteti 2 |
|||||||||
Modaliteti 3 |
Menjëherë pas ndezjes, gjeneratori kalon në modalitetin 1 dhe gjeneron një valë sinus. Megjithatë, frekuenca e fillimit është mjaft e ulët dhe të paktën një klikim i çelësit është i mjaftueshëm për ta rritur atë.
P.S. Unë do të shtoj vetë: kur përsëris pajisjen me bordin e qarkut të printuar të autorit, pajisja refuzoi të niste (ndoshta ka një gabim në tabelën e qarkut të printuar), dhe kur u montua në një tabelë, gjeneratori filloi të funksiononte menjëherë.
Më poshtë mund të shkarkoni burime asm, firmware dhe skedarë PCB ()
Lista e elementeve të radios
Emërtimi | Lloji | Emërtimi | sasi | shënim | Dyqan | blloku im i shënimeve | |
---|---|---|---|---|---|---|---|
Qarku i gjeneratorit. | |||||||
mikrokontrollues | PIC16F870 | 1 | Në bllokun e shënimeve | ||||
regjistri i ndërrimit | CD74HC164 | 1 | Në bllokun e shënimeve | ||||
Përforcues operacional | LF353 | 1 | Në bllokun e shënimeve | ||||
Multiplekser/Demultiplekser | CD4053B | 1 | Në bllokun e shënimeve | ||||
Rregullator linear | LM7805 | 1 | Në bllokun e shënimeve | ||||
Rregullator linear | LM78L15 | 1 | Në bllokun e shënimeve | ||||
Rregullator linear | LM79L15 | 1 | Në bllokun e shënimeve | ||||
diodë ndreqës | 1N4002 | 3 | Në bllokun e shënimeve | ||||
Kondensator | 22 pF | 2 | Në bllokun e shënimeve | ||||
Kondensator | 51 pF | 1 | Në bllokun e shënimeve | ||||
Kondensator | 100 pF | 1 | Në bllokun e shënimeve | ||||
Kondensator | 1000 pF | 1 | Në bllokun e shënimeve | ||||
Kondensator | 0.1uF | 1 | Në bllokun e shënimeve | ||||
1 uF | 2 | Në bllokun e shënimeve | |||||
kondensator elektrolitik | 4.7uF | 1 | Në bllokun e shënimeve | ||||
kondensator elektrolitik | 100uF | 2 | Në bllokun e shënimeve | ||||
kondensator elektrolitik | 500uF | 1 | Në bllokun e shënimeve | ||||
Rezistencë | 470 ohm | 6 | Në bllokun e shënimeve | ||||
Rezistencë e ndryshueshme | 1 kOhm | 1 | Në bllokun e shënimeve | ||||
Rezistencë | 2.7 kOhm | 1 | Në bllokun e shënimeve | ||||
Rezistencë | 4.7 kOhm | 1 | Në bllokun e shënimeve | ||||
Rezistencë | 10 kOhm | 4 | Në bllokun e shënimeve | ||||
Rezistencë | 15 kOhm | 1 | Në bllokun e shënimeve | ||||
Rezistencë | 22 kOhm | 1 |
Karakteristikat e shkurtra:
· Tre mënyra për të vendosur kohëzgjatjen e pulsit: tension (përfshirë potenciometrin); USART; cilësimet në memorien flash.
Gama e frekuencave të gjeneruara:
- sipas tensionit - nga më pak se 1 Hz në 10 kHz (tre vargje);
– nëpërmjet USART/Flash – nga 0,11 Hz në 7,246 kHz.
· Aktivizo/çaktivizo gjenerimin; menaxhimi i fjetjes.
· Plotësisht i pavarur, nuk kërkon komponentë shtesë (rezonator kuarci, burime të frekuencës referuese, etj.).
Aplikacionet e mundshme:
· Njësi e konfigurimit të frekuencës e menaxhuar ose e pamenaxhuar e integruar në pajisje elektronike (oscilatori kryesor).
· Menaxhimi i treguesit të dritës me një mënyrë funksionimi me ndërprerje.
· Sintetizues i frekuencave të zërit.
· Simulator sinjali për korrigjimin e pajisjeve elektronike.
PËRSHKRIMI I PËRGJITHSHËM I GJENERATORIT TË PULSIVE
Gjeneratori i pulsit i bazuar në mikrokontrolluesin PIC12F675 është projektuar për të gjeneruar impulse logjike drejtkëndëshe me kohëzgjatje të rregullueshme.
Ka cilësime fleksibël, një gamë të gjerë frekuencash dalëse dhe kontrolli, të cilat e bëjnë përdorimin e këtij mikroqarku të përshtatshëm për një gamë të gjerë detyrash. Për shkak të kompaktësisë dhe autonomisë së tij, ai mund të thjeshtojë ndjeshëm qarqet elektronike me njësitë e gjenerimit të frekuencës, t'i bëjë ato më të sakta, t'u sigurojë atyre funksione shtesë dhe të zvogëlojë sipërfaqen e bordeve të qarkut të printuar.
Qëllimi i kunjave të mikroqarkut (shih figurën më lart):
konkluzioni | Emërtimi | Lloji | Përshkrim |
1 | vdd | Pete. | Furnizimi me energji elektrike (diapazoni i tensionit të furnizimit të treguar më poshtë). |
2 | Pulset | Dilni | impulse të gjeneruara. |
3 | IdleState | Hyrja | Vendosja e gjendjes së pushimit të daljes së pulseve (kur gjenerimi është i fikur): 0 – kur gjenerimi është i fikur, dalja e Pulses është në gjendjen “0”; 1 – kur gjenerimi është i fikur, dalja e Pulses është në gjendjen “1”; lidhur me daljen e Pulses– kur gjenerimi është i fikur, dalja e Pulses do të mbetet në gjendjen në të cilën ishte në kohën kur ishte fikur (pas ndezjes së energjisë, gjendja e Pulses do të jetë e papërcaktuar). Ndryshimi i gjendjes së hyrjes IdleState kur gjenerimi është i fikur, çon në një ndryshim të menjëhershëm të gjendjes së Pulses në dalje (funksionon si përsëritës). Në këtë rast, koha e reagimit për të ndryshuar sinjalin IdleState është deri në 100 µs. |
4 | Vraponi | Hyrja | Leja e gjenerimit të pulsit: 1 - e aktivizuar, 0 - e çaktivizuar. Kur Run ndryshon nga 0 në 1, dalja e Pulses e ndryshon menjëherë gjendjen e saj në të kundërtën (skaja e pulsit të parë). Kur Run ndryshon nga 1 në 0, dalja e Pulses shkon menjëherë në pushim (pulsi aktual nuk përfundon në kohëzgjatje). Koha e përgjigjes ndaj një ndryshimi në sinjalin Run është deri në 100 µs, në "modalitetin e ngadaltë" - deri në 500 µs. |
5 | M1 | Hyrja | Zgjedhja e mënyrës së funksionimit (M1:M0): 0:0 - tension, modalitet i shpejtë. 0:1 - Tensioni, modaliteti i mesëm. 1:0 – tension, modaliteti i ngadaltë. 1:1 – USART/Flash. Mënyra e funksionimit mund të ndryshohet "në fluturim", ndërsa është e dëshirueshme që këmbët M0 dhe M1 të ndryshojnë gjendjen në të njëjtën kohë. Koha e përgjigjes për të ndryshuar sinjalet M1 dhe M0 zakonisht nuk i kalon disa mikrosekonda. Nëse oshilatori përdoret gjithmonë në të njëjtin modalitet, kunjat M0 dhe M1 mund të tërhiqen në Vdd dhe Vss sipas modalitetit të dëshiruar. |
6 | M0 | Hyrja | |
7 | Ur/RX | Hyrja | Në modalitetin e tensionit– hyrja analoge Ur (cakton kohëzgjatjen e pulsit: Vss – minimale, Vdd – maksimale). Në modalitetin USART– hyrje dixhitale RX (linjë komunikimi). Në modalitetin Flash– Hyrja dixhitale RX, duhet të tërhiqet në Vdd. |
8 | Vss | Toka | "Toka" e ushqimit dhe logjikës. |
Rekomandohet (jo i detyrueshëm) instalimi i një kondensatori 1-10 uF midis linjave Vdd dhe Vss në afërsi të mikroqarkut, veçanërisht kur kontrolloni kohëzgjatjen e pulsit duke përdorur tensionin (ndihmon në uljen e zhurmës në linjën e energjisë).
KONTROLLI I KOHËZGJATJES SË PULSIT ME TENSION
Në modalitetin e kontrollit të kohëzgjatjes së pulsit duke përdorur tensionin, voltazhi i kontrollit aplikohet në hyrjen Ur, e cila në këtë mënyrë funksionon si një hyrje ADC që konverton vlerën e tensionit në një vlerë 10-bit (0...1023). Vlera 0 (Ur=Vss) korrespondon me kohëzgjatjen minimale të pulsit, vlera 1023 (Ur=Vdd) korrespondon me maksimumin.
Një potenciometër (për shembull, 10-20 kΩ) mund të përdoret si një burim tensioni për të vendosur kohëzgjatjen e pulsit me dorë, siç tregohet në diagramin në të djathtë. Meqenëse hyrja Ur nuk konsumon pothuajse asnjë rrymë, potenciometri do të sigurojë një rregullim linear të kohëzgjatjes së pulsit në të gjithë diapazonin. Në të njëjtën kohë, për të reduktuar zhurmën në hyrjen ADC dhe për të rritur qëndrueshmërinë e frekuencës së gjeneruar, rekomandohet tokëzimi i hyrjes Ur përmes një kondensatori 1–10 μF të instaluar në afërsi të mikroqarkut.
Cikli i punës së impulsit për kontrollin e tensionit është gjithmonë 50%.
Rregullimi i tensionit kryhet në tre vargje, të zgjedhura nga hyrjet M1:M0:
Emërtimi "(0...1023)" në tabelë është vlera ADC e marrë pas konvertimit të tensionit të hyrjes Ur (Vss...Vdd).
KONTROLLI I KOHËZGJATJES SË PULSEVE TË USART
Modaliteti USART/Flash zgjidhet duke aplikuar ato logjike në të dy hyrjet M0 dhe M1. Në këtë rast, hyrja RX është një hyrje dixhitale e linjës së komunikimit USART.
Kujdes! Nivelet e tensionit në hyrjen RX janë logjike (Vss dhe Vdd)! Për t'u lidhur me linjën RS-232, përdorni çipat e drejtuesit (për shembull, MAX232). Zbatimi i një sinjali të linjës RS-232 drejtpërdrejt në hyrjen RX mund ta dëmtojë atë!
Komunikimi me kontrolluesin është i njëanshëm (vetëm pritja). Parametrat e komunikimit: shpejtësia e zhurmës 4800, 8 bit, 1 bit ndalimi, pa barazi. Gjendja joaktive e linjës (pa transmetim) konsiderohet e lartë. Transmetimi i simboleve përgjatë linjës mund të kryhet në çdo kohë dhe në vetvete nuk ndikon në gjenerimin e pulseve, duke përfshirë nuk krijon nervozizëm shtesë ("rrëmbim") të fronteve.
Kur kontrollohet nëpërmjet USART, cikli i funksionimit të pulseve mund të ndryshohet në mënyrë arbitrare (kohëzgjatja e pulseve dhe pauzat ndërmjet tyre vendosen veçmas).
Gjenerimi mund të kontrollohet si duke përdorur hyrjet Run dhe IdleState, ashtu edhe duke përdorur komandat USART, ndërsa përdorimi i secilit prej këtyre dy hyrjeve konfigurohet individualisht.
Një thirrje në gjeneratorin e pulsit nëpërmjet USART ka gjithmonë formën e mëposhtme:
Të gjithë karakteret brenda kllapave janë shifra heksadecimal (0...F, shkronjat A...F janë rreptësisht të mëdha!). Për të gjitha fushat me dy bajtë, shifra më e rëndësishme transmetohet së pari dhe shifra më pak e rëndësishme e fundit.
Paketa transmetohet pa hapësira, gjatësia e paketës është gjithmonë 14 karaktere (duke përfshirë kllapat). Të gjithë karakteret para "" nuk merren parasysh. Paketat me gjatësi më të vogël ose më të madhe injorohen (nuk ekzekutohen). Nëse gjatë marrjes së paketës ka pasur një ndryshim të sinjaleve M1:M0, një paketë e tillë gjithashtu injorohet. Ekzekutimi i komandës që gjendet në paketën e saktë ndodh menjëherë pas marrjes së karakterit ">".
Qëllimi i fushave të paketës:
Fusha | Përshkrim | |
KK | Komanda (vlerat heksadecimal): 22 – vendosja e parametrave të gjenerimit; 2D– vendosja e parametrave të gjenerimit dhe shkrimi i tyre në memorien Flash (vendosja e modalitetit Flash). Ndryshimet në parametrat e gjenerimit hyjnë në fuqi menjëherë (pulsi aktual ose pauza e kohëzgjatjes nuk përfundon). Paketat me komanda të tjera injorohen (nuk ekzekutohen). |
|
SS | Run dhe konfigurimin e pinit të IdleState. Bitet e vlerave: C7 C6 C5 C4 C3 C2 C1 C0. Biti C0: 0 = aktivizoni gjenerimin në hyrjen Run; 1 = aktivizoni gjenerimin në vlerën e bitit C3. Biti C1: 0 = gjendje pushimi sipas vlerës së hyrjes IdleState; 1 = gjendje boshe sipas vlerës së bitit C4. Biti C3: në C0 = 1: 1 - gjenerimi i pulsit është i aktivizuar, 0 - gjenerimi i pulsit është i çaktivizuar. Biti C4: me C1 = 1: vlera e daljes së Pulses në qetësi (kur gjenerimi është i fikur). Pjesa tjetër e pjesëve nuk merren parasysh. |
|
LLL | Kohëzgjatja impulset. |
Përcaktohet me formulën: kohëzgjatja = [vlera+1]*69 µs. Kohëzgjatja minimale (vlera = 0): 69 µs. Kohëzgjatja maksimale (vlera = 65535): 4,521984 s. Rezolucioni i cilësimit të kohëzgjatjes: 69 µs. Vlerat në formulë janë dhjetore, kur transferohen ato janë heksadecimal. |
PPPP | Kohëzgjatja e pauzës mes impulseve. |
Shembuj të konfigurimit të parametrave CC (vlerat binare, vlerat heksadecimal në kllapa):
· 00000000 (00) - gjenerimi aktivizohet nga hyrja Run, gjendja e papunësisë përcaktohet nga hyrja IdleState.
00000010 (02) - gjenerimi aktivizohet nga hyrja Run, gjendja e pushimit është 0.
00010010 (12) - gjenerimi aktivizohet nga hyrja Run, gjendja e pushimit është 1.
· 00001001 (09) - gjenerimi është gjithmonë aktiv (gjendja e pushimit nuk ka rëndësi).
· 00000001 (01) - gjenerimi është i çaktivizuar përgjithmonë (gjendja e papunësisë përcaktohet nga hyrja IdleState).
· 00000011 (03) - gjenerimi është i çaktivizuar përgjithmonë (dalja është gjithmonë 0).
· 00010011 (13) - gjenerimi është i çaktivizuar përgjithmonë (dalja është gjithmonë 1).
Kohëzgjatja e periudhës së pulsit përcaktohet me formulën TTTT = LLLL+PPPP dhe varion nga 138 µs (rreth 7246 Hz) deri në 9,044 s (rreth 0,11 Hz). Rezolucioni i përcaktimit të periudhës është 69 µs (ose 138 µs me një cikël pune prej 50%).
Me hyrjen në modalitetin USART, gjenerimi i pulseve fillon në përputhje me cilësimet e ruajtura në memorien Flash. Prandaj, me cilësime të caktuara që ndryshojnë nga ato të fabrikës, gjenerimi mund të fillojë edhe përpara se komanda përkatëse të dërgohet nëpërmjet USART (shih më poshtë për cilësimet e memories Flash).
Koment. Pas një komande të vlefshme Write to Flash (“2D”), parametrat e gjeneratës së re hyjnë në fuqi menjëherë (si pas komandës “22”). Megjithatë, kjo pasohet nga një pauzë, gjatë së cilës mikroqarku shkruan parametrat në memorien jo të paqëndrueshme dhe nuk i përgjigjet ndryshimeve të sinjalit të jashtëm dhe karaktereve të reja USART (gjenerimi vazhdon në modalitetin e specifikuar). Kohëzgjatja e pauzës është rreth 23 ms. Megjithatë, duke qenë se kohët e shkrimit në memorien jo të paqëndrueshme mund të ndryshojnë, rekomandohet që të prisni 25-30 ms përpara se të dërgoni komanda të reja përmes USART.
KONTROLLI I KOHËZGJATJES SË PULSIT NËPËRMJET MEMORISE FLASH
Modaliteti USART/Flash zgjidhet duke aplikuar ato logjike në të dy hyrjet M0 dhe M1. Në të njëjtën kohë, për të punuar në modalitetin Flash, hyrja RX duhet të ketë gjithashtu një njësi logjike të vazhdueshme.
Cilësimet e ruajtura në memorien Flash korrespondojnë me konstantat CC (konfigurimi i pinit), LLLL (kohëzgjatja e pulsit) dhe PPPP (kohëzgjatja e pauzës së pulsit) nga tabela e mësipërme, të cilat vendosen nga prodhuesi ose programohen përmes modalitetit USART.
Nëse konstanta CC ka bit C0=1 dhe C3=1, gjenerimi do të fillojë menjëherë pas kalimit në modalitetin Flash dhe do të vazhdojë për të gjithë kohën që është në të. Nëse biti C0=0, gjenerimi do të aktivizohet/çaktivizohet nga hyrja Run, me gjendjen e papunë të konfiguruar nga bitet C1 dhe C4 (shih shembujt më lart).
Modaliteti Flash është i përshtatshëm për krijimin e gjeneratorëve autonome me frekuencë konstante që nuk kërkojnë akordim të jashtëm (nëpërmjet tensionit ose USART) dhe ka stabilitet më të lartë të frekuencës sesa me kontrollin e tensionit (për shkak të mungesës së ndërhyrjes në hyrjen Ur).
Cilësimet e paracaktuara të fabrikës në memorien flash:
CC = 00 (gjenerimi i kontrollit të sinjaleve Run dhe IdleState);
LLLL = dhjetore 7245 (korrespondon me 500 ms);
PPPP = 7245 dhjetore (korrespondon me 500 ms).
Kështu, si parazgjedhje, mikroqarku është konfiguruar si një gjenerator frekuence prej 1 Hz (50% cikli i punës), i kontrolluar nga hyrjet Run dhe IdleState.
Pas dorëzimit, ne mund ta konfigurojmë mikroqarkun sipas dëshirave tuaja (më shumë detaje më poshtë), ose ju mund ta rikonfiguroni në mënyrë të pavarur një herë ose shumë herë nëpërmjet USART (kërkon pajisje të përshtatshme). Memoria e integruar jo e paqëndrueshme e mikroqarkut siguron të paktën 100,000 cikle rishkrimi (zakonisht deri në 1,000,000).
GJENERATOR I SHPËRTHIMIT
Një gjenerator i shpërthimit të pulsit mund të zbatohet duke përdorur dy çipa identikë të gjeneratorit të impulseve, me daljen Pulses të çipit të parë të lidhur me hyrjen Run të të dytit dhe hyrjen IdleState të çipit të parë të tokëzuar (shih diagramin në të djathtë).
Aktivizimi dhe çaktivizimi i gjenerimit të shpërthimeve të pulseve kryhet duke përdorur hyrjen Run të mikroqarkut të parë, dhe gjendja e pushimit kur gjenerimi është i fikur kryhet nga hyrja IdleState e mikroqarkut të dytë.
Hyrjet Ur / RX, M0 dhe M1 të mikroqarkut të parë përcaktojnë parametrat e shpërthimeve, dhe hyrjet Ur / RX, M0 dhe M1 të mikroqarkut të dytë përcaktojnë parametrat e pulseve brenda shpërthimeve. Në këtë rast, nëse është e nevojshme, mikroqarqet e parë dhe të dytë mund të funksionojnë në mënyra të ndryshme (për shembull, një nga potenciometri dhe tjetri sipas cilësimeve të memories Flash).
Aplikimi i mundshëm i gjeneratorëve të shpërthimit: sinjalizimi i ndërprerë i zërit, treguesi i dritës me ndërprerje me kontrollin e ndriçimit dhe më shumë.
KARAKTERISTIKA TE TJERA
Karakteristikat elektrike dhe termike të mikroqarqeve korrespondojnë me mikrokontrolluesin PIC12F675, një përshkrim i të cilit mund të gjendet në Rusisht (format PDF).
Karakteristikat kryesore elektrike të gjeneratorit të pulsit janë si më poshtë:
· Tensioni i furnizimit Vdd: nga 2,5 në 5,5 V (duke përfshirë 3,3 V, 5 V).
· Gama e temperaturës së funksionimit: -40 deri +85 °C.
· Rryma maksimale e shkarkimit/burimit në daljen e Pulses: 25 mA.
· Konsumi i rrymës: 4 mA ose më pak (zakonisht 1 mA) plus rrymë në daljen e Pulses.
Tërhiqni kunjat e papërdorura në Vdd për të zvogëluar tërheqjen aktuale.
POROSITJA E MIKROKONTROLLERIT ME SOFTUER
KUJDES! Këtu mund të blini një mikrokontrollues PIC12F675 me një program të gjenerimit të frekuencës tashmë të ndezur me një çmim fiks - 250 rubla!
Kur porositni më shumë se 5 copë, çmimi ulet; për lotet me shumicë, çmimi është disa herë më i ulët (në varësi të madhësisë së lotit: plotësoni formularin e mëposhtëm për të zbuluar çmimin).
Nëse dëshironi, mund të blini gjithashtu vetë një kontrollues PIC12F675 bosh në një rrjet me pakicë dhe të porositni vetëm firmware-in e tij nga ne (kostoja është në normën e përgjithshme).
Kur porositni, mund të specifikoni cilësimet që ruhen në memorien Flash (kohëzgjatja e pulsit, mënyra e funksionimit, konfigurimi i kunjave Run dhe IdleState) që gjeneratori i pulsit të funksionojë në modalitetin Flash. Konfigurimi i çipit sipas dëshirës tuaj kryhet plotësisht falas për çdo sasi porosie (nga 1 copë).
POROSITJA
Përdorni formularin e mëposhtëm për të dërguar një porosi për një mikrokontrollues me firmware-in e mësipërm. Ju lutemi plotësoni sa më plotësisht të jetë e mundur.
Për të gjeneruar një sinjal video, mjafton vetëm një mikrokontrollues dhe dy rezistorë. Kjo do të thotë, ju mund të bëni fjalë për fjalë një gjenerator të sinjalit video xhepi me madhësinë e një zinxhiri çelësash. Një pajisje e tillë është e dobishme për telemaster. Mund të përdoret kur përzieni kineskopin, rregulloni pastërtinë dhe linearitetin e ngjyrës.
Funksionimi i gjeneratorit dhe karakteristikat e tij.
Gjeneratori është i lidhur me hyrjen video të televizorit, zakonisht një lidhës "tulipan" ose "SCART".
Instrumenti gjeneron gjashtë fusha:
- fushë teksti prej 17 rreshtash;
- rrjetë 8x6;
- rrjetë 12x9;
- fushë e vogël shahu 8x6;
- fushë e madhe shahu 2x2;
- fushë e bardhë.
Ndërrimi ndërmjet fushave kryhet duke shtypur butonin S2 për një kohë të shkurtër (më pak se 1 s.). Mbajtja e shtypur e këtij butoni për një kohë më të gjatë (më shumë se 1 s.) fik gjeneratorin (mikrokontrolluesi kalon në gjendjen "SLEEP"). Gjeneratori ndizet duke shtypur butonin S1. Statusi i pajisjes (ndezur / fikur) sinjalizohet nga LED.
Karakteristikat teknike të pajisjes:
- frekuenca e orës - 12 MHz;
- tensioni i furnizimit 3 - 5 V;
- konsumi aktual në modalitetin e funksionimit:
- në një tension furnizimi prej 3V - rreth 5 mA;
- në një tension furnizimi prej 5 V - rreth 12 mA;
- shpejtësia e kornizës - 50 Hz;
- numri i rreshtave në një kornizë - 625.
Skema.
Qarku është shumë i thjeshtë.
Të gjithë punojnë në formacion
sinjal video
ekzekutuar nga programi
të qepura në mikrokon-
troler. Dy rezistorë
së bashku me rezistencën
Hyrja e videos në TV
të sigurojë të nevojshmen
nivelet e mia të tensionit
sinjal video:
- 0 V - niveli i sinkronizimit;
- 0,3 V - niveli i zi;
- 0,7 V - niveli gri;
- 1 V - niveli i bardhë.
Për të formuar një sinjal video, përdoret biti zero i PORTA dhe i gjithë PORTB. (Kjo portë funksionon në modalitetin e zhvendosjes. Edhe pse sinjalizohet vetëm biti i tij zero, programi e përdor të gjithë atë. Prandaj, të gjithë bitët PORTB janë konfiguruar si dalje.) Biti i parë i PORTA përdoret për të treguar gjendjen e gjeneratorit. Kur pajisja është e ndezur, LED është ndezur. Kur pajisja është e fikur, LED është i fikur. Biti i tretë i PORTA përdoret për të ndërruar mënyrat e funksionimit të gjeneratorit dhe për ta fikur atë. Një shtypje e shkurtër e butonit S2 ju lejon të lëvizni nga një fushë e gjeneratorit në tjetrën. Duke mbajtur të shtypur këtë buton për më shumë se 1 s. pajisja fiket (mikrokontrolluesi hyn në gjendjen "SLEEP"). Për të ndezur gjeneratorin, duhet të kryeni një rivendosje. Kjo bëhet duke shtypur butonin S1. Tensioni i furnizimit të pajisjes mund të zgjidhet brenda intervalit 3 - 5 V. Në këtë rast, vlerat e rezistencës duhet të zgjidhen në përputhje me rrethanat.
3V...– R5=456Ω dhe R6=228Ω
3.5V - R5=571Ω dhe R6=285Ω
4V...– R5=684Ω dhe R6=342Ω
4,5 V - R5 \u003d 802 Ohm dhe R6 \u003d 401 Ohm
5V...- R5=900Ω dhe R6=450Ω
Këtu janë vlerat e llogaritura. Në realitet, mund të instaloni rezistorë nga diapazoni standard, për shembull, për 5V - 910 Ohm dhe 470 Ohm, dhe për 3V - 470 Ohm dhe 240 Ohm.
Tensioni i furnizimit të gjeneratorit mund të jetë më i vogël se 3 V. Për çdo PIC specifike, minimumi duhet të përcaktohet eksperimentalisht. Për shembull, për mua, PIC 20 MHz i lëshimit të vitit 2001 funksionoi në 2.3 V.
Programi.
Programi gjeneron 6 fusha. Çdo fushë përbëhet nga 301 rreshta (300 linja informacioni + një e zezë). Në përgjithësi, numri i llogaritur është 305 (625 rreshta raster - 15 rreshta inkuadrimi = 610. Informacioni në kornizë shfaqet çdo rresht (për më shumë rreth kësaj, shihni këtu), pra 610 / 2 = 305). Por me këtë numër linjash, madhësia vertikale e rasterit rezulton të jetë pak më e madhe se ajo që formon sinjalin video të transmetuar nga qendra televizive.
Rreshti i parë në secilën fushë është i zi. Në këtë kohë, anketohet gjendja e butonit S2, llogaritet koha e mbajtjes së shtypur dhe përcaktohet nevoja për të kaluar nga një fushë në tjetrën.
Ka një shtrembërim të lehtë të vijës vertikale në fushat grafike. Kjo për faktin se gjatësia e disa linjave është disa cikle më e gjatë se të tjerat për shkak të nevojës për të vendosur numërues të ciklit. Në përgjithësi, nënprogramet që formojnë fushat grafike janë shumë të thjeshta, kështu që nuk ka nevojë t'i komentoni ato.
Le të hedhim një vështrim më të afërt në pjesën e programit që formon fushën e tekstit. Ky është seksioni më kompleks i programit, ai zë pjesën më të madhe të tij, përdor burimet maksimale të mikrokontrolluesit (e gjithë memoria e të dhënave dhe një pjesë e konsiderueshme e RAM). Kjo përdor copa kodi të marra nga loja Pong e shkruar nga Rickard Gunee.
Fusha e tekstit përbëhet nga 17 rreshta, secila prej të cilave mund të përmbajë jo më shumë se tetë karaktere. Karakteret shfaqen përmes rreshtit, domethënë, një rresht teksti zë 17 rreshta të rasterit. (Ky ekran është për shkak të kufizimeve të PIC.) Informacioni rreth grafikut të karaktereve ruhet në kujtesën e programit në seksionin e tabelës. Informacioni për tekstin e rreshtave ruhet në memorien e të dhënave (64 fjalë = 8 rreshta me 8 karaktere). Për shembull, rreshti 08h (me adresa nga 08h deri në 0Fh) përmban sa vijon: .20.60.48.50.90.58.20 20. Çdo vlerë është një koordinatë (i zhvendosur nga fillimi) e një karakteri në tabelë. Vlera.20. përputhet me një hapësirë, .60. - shkronja "B", .48. - shkronja "Unë", e kështu me radhë. Dhe të gjitha së bashku formojnë "_VIDEO__".
Le të shohim një shembull se si shfaqet teksti. Sipas programit, në rreshtin e 12-të të tekstit të ekranit, është e nevojshme të shfaqet informacioni i referuar nga linja e kujtesës së të dhënave 28h (A0 B8 68 C8 D8 70 E0 D0). Kështu, në 17 rreshtat e ardhshëm të rasterit duhet të shfaqet teksti: " p i c 1 6 f 8 4 ". Kjo ndodh në mënyrën e mëposhtme. E para nga 17 rreshtat shfaq vetëm nivelin e zi. Në këto 64 µs, ndërsa në ekran shfaqet një vijë e zezë, "vlerat e sipërme" të karaktereve shkruhen në regjistrat e RAM-it: 00h nga "p", 08h nga "i", 00h nga "c" 18h nga " 1" dhe kështu me radhë. Gjatë rreshtit tjetër, këto të dhëna transferohen në mënyrë sekuenciale në PORTB, domethënë në daljen e videos. Rreshti i tretë është përsëri i zi. Gjatë ekzekutimit të tij, vlerat e karakterit "e dyta nga lart" shkruhen në bufer: 00h nga "p", 00h nga "i", 00h nga "c" 1Ch nga "1" ... Në rreshtin e katërt , këto të dhëna shfaqen në ekran. Dhe kështu me radhë, derisa të shfaqet e gjithë rreshti.
Nënprogrami i inkuadrimit është marrë tërësisht nga loja Pong e shkruar nga Rickard Gunee. Kjo nënprogram është e shkurtër, por mjaft e ndërlikuar. Nëse shpjegoni se si funksionon, atëherë do të dalë edhe më e gjatë dhe më konfuze. Është më mirë të vendosni tekstin e nënprogramit dhe vizatimin e formës së valës së sinkronizimit vertikal krah për krah dhe të merrni kohën tuaj për të analizuar çdo rresht kodi. Mund të them vetëm se nënprogrami fillon të funksionojë jo nga linja e sipërme, por nga mesi (:-)), nga etiketa "vertsync".
Overclocking PIC16F84.
Siç mund të shihet nga diagrami në këtë projekt, mikrokontrolluesi funksionon në një frekuencë prej 12 MHz. Deri më sot, tre versione të PIC16F84 janë në dispozicion: në 4MHz, në 10MHz dhe në 20MHz. (Që nga 1/1/2002 raporti i çmimit është afërsisht 3,5 $, 5,3 $ dhe 6,3 $) Në projektin e tij Pong, Rickard Gunee pretendon se ka përdorur një PIC16F84 4 MHz dhe ka punuar për orë të tëra në 12 MHz pa asnjë problem. E provova, dhe me të vërtetë PIC 4 MHz funksionon mirë në një frekuencë që është tre herë (!!!) më e lartë se frekuenca e lejuar (edhe pse nuk e tundova fatin dhe ndeza gjeneratorin vetëm për disa minuta). Në të njëjtën kohë, PIC 4 MHz konsumoi rrymë me 10 .. 20% më shumë se ai 20 MHz (prandaj, me sa duket, kufizimi i frekuencës). Unë mendoj se një mikrokontrollues 10 MHz mund të mbingarkohet në 12 MHz pa rrezik, por kjo, natyrisht, nuk ia vlen të bëhet në projektet tregtare.
Prodhimtaria.
Specifikimet e gjeneratorit:
Përgjigja e frekuencës: 11Hz - 60kHz
Kontroll dixhital i frekuencës me 3 hapa të ndryshëm
Forma e valës: sinus, trekëndësh, katror, puls, shpërthim, fshirje, zhurmë
Gama e tensionit të daljes: ±15V për sinus dhe delta, 0-5V për të tjerët
Sinkronizimi: dalje për sinjalin e pulsit.
Pajisja mundësohet nga një transformator 12 volt, i cili siguron një tension mjaft të lartë (më shumë se 18 V) DC të nevojshëm për funksionimin normal të stabilizuesve 78L15 dhe 79L15. Një furnizim prej ±15 V është i nevojshëm në mënyrë që op-amp LF353 të nxjerrë një gamë të plotë sinjalesh me një ngarkesë 1 kΩ. Kur përdorni një furnizim ±12 V, kjo rezistencë duhet të jetë së paku 3 kΩ.
Sensori i rrotullimit (koder rrotullues) që kam përdorur është ALPS SRBM1L0800 në formën e dy çelësave në një rreth në diagram. Autori ndoshta ka përdorur një tjetër, kështu që disa ndryshime në kodin e programit të kontrolluesit ishin të nevojshme. Sensori im ka dy grupe kontaktesh: OFF dhe ON (kur rotori lëviz në drejtimin përkatës). Prandaj, një ndërprerje e ndryshimit të PORTB duhet të krijohet nëse njëra nga palët e kunjave është e shkurtuar. Kjo arrihet duke lidhur të dy grupet e kontakteve me kontaktet PIC16 (RB4 - RB7), të cilat kontrollohen nga programi për një ndryshim në gjendje. Për fat të mirë, RB4 nuk u përdor në modelin origjinal, kështu që unë thjesht e ridrejtova RB3 në RB4. Një modifikim tjetër është për shkak të përdorimit të një koduesi rrotullues, kështu që ndryshova pak ndërprerjet e firmuerit. Bëra që rregullatori të mbajë gjendjen për 100 matje të njëpasnjëshme në vend të 10 në modelin origjinal. Vini re se disa kunja PIC përdoren për të ridrejtuar +5V për të thjeshtuar paraqitjen e PCB-së, kështu që ato janë konfiguruar si hyrje porti.
Pllaka e qarkut të printuar siguron tre montime rezistencash. One - R / 2R - për DAC nga seria Bourns 4310R. Montimi i rezistorëve DAC mund të ndërtohet edhe në rezistorë diskrete sipas diagramit të mësipërm. Duhet të përdoren rezistorë me një tolerancë prej ±1% ose më të mirë. Rezistenca kufizuese LED të Serisë Bourns 4306R. Shkëlqimi i LED-ve mund të rritet duke ndryshuar rezistencën e rezistorëve kufizues deri në 220 - 330 ohms.
Gjeneratori është montuar në një kuti plastike 179x154x36 mm me panele alumini të përparme dhe të pasme. Niveli i sinjalit të daljes rregullohet nga një rezistor i ndryshueshëm Alfa 1902F. Të gjithë komponentët e tjerë janë montuar në panelet e përparme dhe të pasme (butonat, lidhësit, asambletë LED, lidhësin e energjisë). Pllakat janë ngjitur në kasë me bulona 6 mm me ndarëse plastike.
Gjeneratori prodhon 9 forma të ndryshme valore dhe funksionon në tre mënyra, të cilat zgjidhen duke përdorur butonin "Zgjidh" dhe treguesi i tyre shfaqet në tre LED-të e sipërm (sipas diagramit). Sensori i rrotullimit korrigjon parametrat e sinjalit sipas tabelës së mëposhtme:
Menjëherë pas ndezjes, gjeneratori kalon në modalitetin 1 dhe gjeneron një valë sinus. Megjithatë, frekuenca e fillimit është mjaft e ulët dhe të paktën një klikim i çelësit është i mjaftueshëm për ta rritur atë.
P.S. Unë do të shtoj vetë: kur përsëris pajisjen me bordin e qarkut të printuar të autorit, pajisja refuzoi të niste (ndoshta ka një gabim në tabelën e qarkut të printuar), dhe kur u montua në një tabelë, gjeneratori filloi të funksiononte menjëherë.
Më poshtë mund të shkarkoni burime asm, firmware dhe skedarë PCB (Eagle)
Shkarkoni arkivin:
Ju nuk keni akses për të shkarkuar skedarë nga serveri ynë