Orodha ya maudhui:

Mafunzo ya Mkusanyiko wa AVR 9: 7 Hatua
Mafunzo ya Mkusanyiko wa AVR 9: 7 Hatua

Video: Mafunzo ya Mkusanyiko wa AVR 9: 7 Hatua

Video: Mafunzo ya Mkusanyiko wa AVR 9: 7 Hatua
Video: DHAMBI KUU 2 MUNGU HAWEZI KUKUSAMEHE!! KUWA MAKINI SANA 2024, Novemba
Anonim
Mafunzo ya Mkusanyiko wa AVR 9
Mafunzo ya Mkusanyiko wa AVR 9

Karibu kwenye Mafunzo 9.

Leo tutakuwa tukionyesha jinsi ya kudhibiti onyesho la sehemu-7 na onyesho la tarakimu nne kwa kutumia nambari yetu ya lugha ya mkutano wa ATmega328P na AVR. Wakati wa kufanya hivi itabidi tuchukue mabadiliko katika jinsi ya kutumia mpororo kupunguza idadi ya sajili ambazo tunahitaji kuzifunga. Tutaongeza capacitors kadhaa (vichungi vya kupita chini) kujaribu kupunguza kelele kwenye keypad yetu. Tutaunda kipaza sauti kutoka kwa transistors kadhaa ili kitufe chetu cha kukatiza cha INT0 kifanye kazi vizuri kwa vifungo vya chini vya voltage kwenye safu ya chini ya kitufe. Na tutapiga vichwa vyetu kwenye ukuta kidogo kujaribu kupata vipinga sahihi ili kitu kifanye kazi vizuri.

Tutatumia keypad yetu kutoka kwa Mafunzo ya 7

Ili kufanya mafunzo haya, pamoja na vitu vya kawaida, utahitaji:

  1. Onyesho la sehemu 7

    www.sparkfun.com/products/8546

  2. Onyesho la tarakimu nne

    www.sparkfun.com/products/11407

  3. Kitufe cha kushinikiza

    www.sparkfun.com/products/97

  4. Hifadhidata za maonyesho ambazo zinaweza kupakuliwa kutoka kwa kurasa zao zilizounganishwa na hapo juu.
  5. Capacitor ya kauri ya pf ya 68, capacitors kadhaa ya 104, rundo la vipinga, transistors mbili za 2N3904 NPN.

Hapa kuna kiunga cha mkusanyiko kamili wa mafunzo yangu ya kukusanyika ya AVR:

Hatua ya 1: Wiring onyesho la se-7

Wiring onyesho la se-7
Wiring onyesho la se-7
Wiring onyesho la se-7
Wiring onyesho la se-7
Wiring onyesho la se-7
Wiring onyesho la se-7

Tutatumia nambari ile ile ambayo tulitumia kwenye Mafunzo ya 7 kwa keypad kudhibiti onyesho la sehemu 7. Kwa hivyo utahitaji kutengeneza nakala ya hiyo na tutarekebisha.

Tutapanga ramani za sehemu kwenye pini za mdhibiti wetu mdogo kama ifuatavyo:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

ambapo herufi za sehemu zinaonyeshwa kwenye picha pamoja na pini inayolingana na 5V ya kawaida na kila sehemu ya LED ikiwa ni pamoja na nukta ya decimal (dp) kulia chini ya onyesho. Sababu ya hii ni ili tuweze kuingiza nambari nzima kwenye daftari moja na pato ambalo husajili kwenye bandari B na D kuwasha sehemu. Kama unavyoona vipande vimehesabiwa kwa mfuatano kutoka 0 hadi 7 na kwa hivyo wataweka ramani kwenye pini sahihi bila kuweka na kusafisha bits binafsi.

Kama unavyoona kwa nambari ambayo tumeambatisha katika hatua inayofuata, tumehamisha utaratibu wetu wa kuonyesha kwa jumla na tumeachilia pini za SDA na SCL kwa matumizi ya baadaye katika Mafunzo yajayo.

Ninapaswa kuongeza kuwa unahitaji kuweka kontena kati ya anode ya kawaida ya onyesho na reli ya 5V. Nilichagua 330 ohm resistor kama kawaida lakini ikiwa unapenda unaweza kuhesabu upinzani mdogo unahitajika kupata mwangaza wa juu nje ya onyesho bila kukaanga. Hapa kuna jinsi ya kufanya hivyo:

Kwanza angalia karatasi ya data na uone kuwa kwenye ukurasa wa kwanza inatoa mali anuwai ya onyesho. Kiasi muhimu ni "Mbele ya Sasa" (I_f = 20mA) na "Mbele ya Voltage" (V_f = 2.2V). Hizi zinakuambia unataka kushuka kwa voltage kwenye onyesho itakuwa ikiwa sasa ni sawa na ya mbele. Huu ndio upeo wa sasa ambao onyesho litachukua bila kukaanga. Kwa hivyo pia ni mwangaza wa juu zaidi unaweza kutoka kwenye sehemu.

Kwa hivyo wacha tutumie sheria ya Ohm na sheria ya kitanzi ya Kirchoff kujua ni upinzani gani wa chini ambao tungehitaji kuweka katika safu na onyesho ili kupata mwangaza mwingi. Utawala wa Kirchoff unasema kuwa jumla ya mabadiliko ya voltage karibu na kitanzi kilichofungwa katika mzunguko ni sawa na sifuri na sheria ya Ohm inasema kuwa kushuka kwa voltage kwenye kinzani ya upinzani R ni: V = I R ambapo mimi ni sasa inapita kupitia kontena.

Kwa hivyo kutokana na voltage ya chanzo ya V na kuzunguka mzunguko wetu tuna:

V - V_f - I R = 0

ambayo inamaanisha (V - V_f) / I = R. Kwa hivyo upinzani unahitajika kupata mwangaza wa juu (na labda kukaranga sehemu) itakuwa:

R = (V - V_f) / I_f = (5.0V - 2.2V) /0.02A = 140 ohms

Kwa hivyo ikiwa ungetaka unaweza kutumia kwa furaha ohms 150 bila wasiwasi. Walakini, nadhani 140 ohms inafanya kuwa mkali sana kwa kupenda kwangu na kwa hivyo ninatumia 330 ohms (ambayo ni aina ya upinzani wangu wa kibinafsi wa Goldilocks kwa LEDs)

Hatua ya 2: Msimbo wa Mkutano na Video

Nimeambatanisha nambari ya kusanyiko na video inayoonyesha utendaji wa kitufe na onyesho. Kama unavyoona tumeweka tu kifunguo cha Redial kwa "r", kitufe cha "F", kinyota hadi "A" na ishara ya hashi kwa "H". Hizi zinaweza kupangiliwa ramani kwa shughuli anuwai kama nafasi ya nyuma, ingiza, na sio-ikiwa ungependa kuendelea kutumia kitufe cha kuandika namba kwenye maonyesho ya LCD au maonyesho ya tarakimu nne. Sitapita kwa njia ya msimbo-na-mstari wakati huu kwani ni sawa na yale ambayo tayari tumefanya katika mafunzo ya hapo awali. Tofauti ni zaidi tu ya mambo yale yale ambayo tayari tunajua jinsi ya kufanya kama usumbufu na meza za kutazama. Unapaswa tu kupitia nambari hiyo na uangalie vitu vipya ambavyo tumeongeza na vitu ambavyo tumebadilisha na kuigundua kutoka hapo. Tutarudi kwenye uchambuzi wa mstari na mstari kwenye mafunzo yafuatayo wakati tutakapowasilisha hali mpya za usimbuaji wa lugha ya mkutano kwenye watawala wadhibiti wa AVR.

Wacha tuangalie onyesho la tarakimu nne.

Hatua ya 3: Wiring Onyesho la tarakimu nne

Wiring Onyesho la tarakimu nne
Wiring Onyesho la tarakimu nne
Wiring Onyesho la tarakimu nne
Wiring Onyesho la tarakimu nne

Kulingana na hati ya data, onyesho la tarakimu 4 lina Mbele ya Sasa ya 60 mA na voltage ya mbele ya volts 2.2. Kwa hivyo, kwa hesabu sawa na hapo awali, ningeweza kutumia kontena la 47 ohm ikiwa nilitaka. Badala yake nitatumia… hrm.. wacha nione… vipi kuhusu 330 ohms.

Njia ambayo onyesho la tarakimu nne lina waya ni kwamba kuna anode 4, moja kwa kila nambari, na pini zingine zinadhibiti sehemu ambayo inakuja katika kila moja. Unaweza kuonyesha nambari 4 wakati huo huo kwa sababu zina mseto. Kwa maneno mengine, kama vile tulivyofanya kwa jozi ya kete, tunazunguka tu nguvu kupitia kila anode kwa zamu na itawaangazia mmoja baada ya mwingine. Itafanya hivi haraka sana kwamba macho yetu hayataona kupepesa na itaonekana kama tarakimu zote nne ziko. Walakini, ili tu kuwa na hakika, njia ambayo tutaweka nambari ni kuweka nambari zote nne, kisha kuzungusha anodi, badala ya kuweka, kusonga, kuweka, kusonga, nk Kwa njia hiyo tunaweza kupata muda sahihi kati ya kuwasha kila tarakimu.

Kwa sasa, wacha tujaribu kwamba sehemu zote zinafanya kazi.

Weka kontena yako ya 330 ohm kati ya reli chanya ya ubao wako wa mkate na anode ya kwanza kwenye onyesho. Jedwali linatuambia kuwa pini zimehesabiwa kutoka 1 hadi 16 kinyume na saa kuanzia chini kushoto (wakati unatazama onyesho kawaida.. na alama za desimali chini) na inasema kwamba anode ni nambari za pini 6, 8, 9, na 12.

Kwa hivyo tunaunganisha pini 6 hadi 5V na kisha uchukue risasi mbaya kutoka kwa reli yako ya GND na uiingize kwenye pini zingine zote na uone kwamba sehemu zote zinaangazia nambari ambayo inalingana nayo (ambayo kwa kweli ni nambari ya pili kutoka haki). Hakikisha unapata sehemu zote 7 na nambari ya desimali kuwasha.

Sasa weka waya wako wa GND kwenye moja ya pini ili kuwasha sehemu moja na wakati huu songa kontena karibu na anode zingine 3 na uone kuwa sehemu hiyo hiyo inaangazia kila tarakimu zingine.

Kitu chochote cha kawaida?

Inageuka kuwa pinout kwenye data ya data ni sahihi. Hii ni kwa sababu ni daftari la data na pini kwa onyesho la pini 12, tarakimu nne. Yaani. moja isiyo na koloni au sehemu ya juu ya decimal. Maonyesho ambayo nilipata wakati niliamuru ni pini 16, onyesho la tarakimu nne. Kwa kweli, kwenye mgodi, sehemu za anode ziko kwenye pini 1, 2, 6, na 8. Anode ya koloni ni pini 4 (cathode pin 12) na anode ya juu ya dp ni pin 10 (cathode ni pin 9)

Zoezi la 1: Tumia kontena lako na waya wa ardhini kuchora ramani ambayo pini inalingana na sehemu gani na nukta ya desimali kwenye onyesho ili tupate sehemu sahihi zinawaka tunapoiandika.

Njia ambayo tunataka kuweka alama kwenye ramani ya sehemu ni kama vile tulivyofanya na onyesho moja la sehemu ya 7 hapo juu - sio lazima kubadilisha kitu kwenye nambari, kitu pekee tunachobadilisha ni jinsi waya zinavyounganishwa. kwenye bodi. Ingiza tu pini sahihi ya bandari kwenye microcontroller hadi pini inayolingana kwenye onyesho la tarakimu nne ili, kwa mfano, PB0 bado iende kwenye pini inayolingana na sehemu a, PB1 iende kwa sehemu B, nk.

Tofauti pekee ni kwamba sasa tunahitaji pini 4 za ziada kwa anode kwani hatuwezi kwenda kwa reli ya 5V tena. Tunahitaji mdhibiti mdogo kuamua ni nambari gani inayopata juisi.

Kwa hivyo tutatumia PC1, PC2, PC3, na PD4 kudhibiti anode za nambari 4.

Unaweza pia kuendelea na kuziba waya. (usisahau 330 ohm resistors kwenye waya za anode!)

Hatua ya 4: Kuandika Nambari ya kuonyesha 4

Kuandika Nambari 4 ya Onyesho
Kuandika Nambari 4 ya Onyesho

Wacha tufikirie juu ya jinsi tunataka kuweka alama kwenye onyesho hili.

Tungependa mtumiaji asukume vitufe vya vitufe na nambari zionekane mfululizo kwenye onyesho wanaposukuma kila kitufe. Kwa hivyo nikisukuma 1 ikifuatiwa na 2 itaonekana kwenye onyesho kama 12. Ningependa pia kuhifadhi hiyo thamani, 12, kwa matumizi ya ndani lakini tutafika hapo baadaye. Kwa sasa ninataka tu kuandika jumla mpya ambayo inachukua vifungo vyako na kuzionyesha. Walakini, kwa kuwa tuna nambari 4 tu nataka kuhakikisha inakuruhusu tu kuchapa nambari nne.

Suala jingine ni kwamba njia ambayo onyesho lenye nambari 4 linalofanya kazi nyingi ni kwa kuendesha baisikeli anodi ili kila tarakimu iwe tu kwa sekunde ya mgawanyiko kabla ya kuonyesha inayofuata na kisha inayofuata na mwishowe kurudi kwa ya kwanza tena, n.k. unahitaji njia ya kuweka nambari hii.

Tunataka pia ihamishe "mshale" kwenda kulia wakati tunapoandika nambari inayofuata. Ili kwamba ikiwa ninataka kuchapa 1234 kwa mfano, baada ya kucharaza 1, kielekezi kitasogea juu ili nambari inayofuata nitaandika itaonekana kwenye onyesho linalofuata la sehemu 7 na kadhalika. Wakati yote haya yanatokea bado ninataka kuweza kuona kile nilichoandika kwa hivyo inabidi iwe inaendesha baiskeli kupitia nambari na kuzionyesha.

Sauti kama mpangilio mrefu?

Kwa kweli mambo ni mabaya zaidi. Tunahitaji rejista 4 za madhumuni ya jumla ambazo tunaweza kutumia kuhifadhi maadili ya sasa ya nambari 4 tunayotaka kuonyesha (ikiwa tutazunguka kwa njia hiyo lazima tuzihifadhi mahali pengine) na shida na hii ni kwamba tuna tumekuwa tukitumia rejista za kusudi la jumla kama wazimu na ikiwa hatutaangalia hatutakuwa na kushoto. Kwa hivyo labda ni wazo nzuri kushughulikia shida hiyo mapema kuliko baadaye na kukuonyesha jinsi ya kufungua rejista kwa kutumia stack.

Kwa hivyo wacha tuanze kwa kurahisisha vitu kidogo, tumia mkusanyiko, na tuwe na rejista kadhaa na kisha tutajaribu kutimiza jukumu la kusoma na kuonyesha nambari zetu kwenye onyesho la tarakimu nne.

Hatua ya 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Kuna "Daftari za Kusudi la Jumla" chache tu ambazo tunazo na mara tu zikitumika hakuna zaidi. Kwa hivyo ni mazoezi mazuri ya programu kuzitumia tu kwa anuwai kadhaa ambazo hutumiwa kama uhifadhi wa muda ambao unahitaji kusoma kutoka, na kuandikia, bandari na SRAM na, au zile zingine ambazo utahitaji katika sehemu ndogo ndogo kila mahali na kwa hivyo wewe wape jina. Kwa hivyo kile nilichofanya, sasa kwa kuwa tumeanzisha na tunajifunza kutumia Stack, ni kupitia nambari hiyo na kupata rejista za madhumuni ya jumla ambazo zinatumika tu ndani ya subroutine moja au kukatiza na hakuna mahali pengine kwenye nambari na kuchukua nafasi wao na moja ya rejista zetu za temp na kushinikiza na pop kwenye stack. Kwa kweli, ukiangalia nambari iliyoandikwa kwa wadhibiti wadogo wadogo, au ukirudi zamani wakati chips zote zilikuwa ndogo, utaona tu rejista kadhaa za kusudi la jumla ambazo zilipaswa kutumiwa kwa kila kitu, kwa hivyo haukuweza tu weka thamani ndani na uiache peke yake kwani ulikuwa na uhakika wa kuhitaji rejista hiyo kwa vitu vingine. Kwa hivyo utaona pushin 'na poppin' kila mahali kwenye nambari. Labda ningepaswa kutaja madaftari yetu ya madhumuni ya jumla ya AX na BX kama sifa ya heshima kwa siku hizo zilizopita.

Mfano utasaidia kuifanya hii iwe wazi zaidi.

Kumbuka kuwa katika ubadilishaji wetu wa Analog to Digital unakatiza kabisa ADC_int tunatumia rejista ya madhumuni ya jumla ambayo tumetaja buttonH ambayo tulikuwa tukipakia thamani ya ADCH na kuilinganisha na meza yetu ya kutazama ya analog kwa ubadilishaji wa kitufe cha waandishi wa habari. Tunatumia tu usajili huu wa kifungoH ndani ya eneo ndogo la ADC_int na mahali pengine popote. Kwa hivyo badala yake tutatumia temp2 yetu inayobadilika ambayo tunatumia kama anuwai ya muda ambayo tunaweza kutumia ndani ya sehemu yoyote iliyopewa na thamani yake haitaathiri kitu chochote nje ya hiyo subroutine (yaani thamani tunayoipa katika ADC_int haitatumika mahali popote. (mwingine).

Mfano mwingine ni katika ucheleweshaji wetu wa jumla. Tunayo rejista tuliyoipa jina la "milliseconds" ambayo ina wakati wetu wa kuchelewa kwa milliseconds. Katika kesi hii iko kwa jumla na tunakumbuka kwamba jinsi kazi ya jumla ni kwamba mkusanyaji huweka nambari nzima jumla mahali pa programu ambapo inaitwa. Katika kesi hii tungependa kuondoa tofauti ya "milliseconds" na kuibadilisha na moja ya anuwai ya muda mfupi. Katika kesi hii nitafanya tofauti kidogo kukuonyesha jinsi hata ikiwa thamani ya utaftaji itahitajika mahali pengine bado tunaweza kuitumia kwa kutumia mpororo. Kwa hivyo badala ya milliseconds tunatumia "temp" na ili tusizuie vitu vingine ambavyo pia vinatumia thamani ya temp tunaanza tu "kuchelewesha" jumla kwa "kusukuma" temp kwenye stack, kisha tunaitumia badala ya milliseconds, na kisha mwisho wa jumla sisi "pop" thamani yake ya awali nyuma kutoka stack.

Matokeo halisi ni kwamba "tumekopa" temp na temp2 kwa matumizi ya muda mfupi na kisha kuwarejeshea maadili yao ya zamani tukimaliza.

Hapa kuna ADC_int kukatiza utaratibu baada ya kufanya mabadiliko haya:

ADC_int:

kushinikiza temp; kuokoa temp kwani tunaibadilisha hapa kushinikiza temp2; kuokoa temp2 lds temp2, ADCH; kitufe cha kupakia ldi ZH, juu (nambari 2 * ldi ZL, chini (nambari 2 *) cpi temp2, 0 kurudi kwa breq; ikiwa vichocheo vya kelele havibadilishi 7segnumber setkey: lpm temp, Z +; mzigo kutoka kwa meza na nyongeza ya posta clc cp temp2, temp; kulinganisha kitufe na meza ya brlo PC + 4; ikiwa ADCH iko chini, jaribu tena lpm 7segnumber, Z; vinginevyo mzigo meza ya thamani inc inc; kuongeza nambari ya rjmp kurudi; na kurudi adiw ZH: ZL, 1; nyongeza Z rjmp setkey; na kurudi kurudi juu: pop temp2; kurejesha temp2 pop temp; rejesha temp reti

Ona kwamba njia ambayo stack inafanya kazi ni kwamba wa kwanza ndiye wa mwisho. Kama mkusanyiko wa karatasi. Unaona kuwa katika mistari yetu miwili ya kwanza tunasukuma thamani ya temp kwenye stack, kisha tunasukuma temp2 kwenye stack, kisha tunaitumia kwenye subroutine kwa vitu vingine, na mwishowe tunawarejeshea maadili yao ya zamani tena kwa kwanza kuibuka temp2 (kwa kuwa ilikuwa ya mwisho kusukuma juu yake iko juu ya stack na itakuwa ya kwanza sisi kurudi nyuma) na kisha kuibuka temp.

Kwa hivyo kuanzia sasa tutatumia njia hii kila wakati. Wakati pekee ambao kwa kweli tutachagua rejista ya kitu kingine isipokuwa kutofautiana kwa wakati ni wakati tutahitaji kila mahali. Kwa mfano, rejista inayoitwa "kufurika" ni ile tunayotumia katika maeneo tofauti kwenye programu na kwa hivyo tungependa kuipatia jina. Kwa kweli tunaweza bado kuitumia kwa njia ambayo tumefanya na temp na temp2 kwani tungerudisha thamani yake baada ya kumaliza. Lakini hiyo ingefanya spaghettify vitu kupita kiasi. Wameitwa kwa sababu na tuna temp na temp2 tayari iliyoteuliwa kwa kazi hiyo.

Hatua ya 6: Vichujio vya kupita chini na Amplifier ya Voltage

Vichungi vya kupitisha chini na Amplifier ya Voltage
Vichungi vya kupitisha chini na Amplifier ya Voltage
Vichungi vya kupitisha chini na Amplifier ya Voltage
Vichungi vya kupitisha chini na Amplifier ya Voltage

Ili kusafisha kelele kidogo na kufanya keypad yetu ifanye kazi vizuri tunataka kuongeza vichungi vichache vya kupita. Hizi huchuja kelele ya masafa ya juu na huruhusu ishara ya masafa ya chini kupita. Kwa kweli njia ya kufanya hivyo ni kuongeza tu capacitor ya 68 pf kati ya pembejeo yetu ya analog na ardhi na pia microfarad 0.1 (i.e. Ikiwa unacheza karibu na hizi wakati wa kushinikiza vifungo kwenye kitufe utaweza kuona wanachofanya.

Ifuatayo tunataka kutengeneza amplifier ya voltage. Inageuka kuwa safu ya chini ya funguo kwenye kitufe (na kitufe cha kupiga tena) inazalisha chini sana ya voltage kusafiri kukatika kwa INT0. Bandari ya Analog ni nyeti ya kutosha kusoma volti za chini kutoka kwa funguo hizi lakini pini yetu ya kukatiza haipatikani makali ya kutosha ya kukatiza wakati tunasukuma funguo hizo. Kwa hivyo tungependa njia fulani ya kuhakikisha kuwa kizingiti kizuri cha kupanda kwa voltage kinapiga PD4 lakini voltage sawa sawa hupiga ADC0. Huu ni utaratibu mrefu sana kwani ishara zote zinatoka kwa waya sawa wa pato la keypad yetu. Kuna njia kadhaa za kisasa za kufanya hivyo, lakini hatutatumia kitufe chetu tena baada ya mafunzo haya kwa hivyo wacha tuunganishe njia inayofanya kazi (ngumu).

Kwanza unapaswa kubonyeza kitufe cha nje kuchukua nafasi ya usumbufu wa INT0 na kudhibiti onyesho kwa kushikilia kitufe kwenye kitufe na kubofya kitufe. Hii ina shida chache za vitufe na itakuruhusu kuwa na uhakika kwamba voltages zako zimewekwa kwa usahihi kwenye meza ya kutazama vitufe. Mara tu unapojua kitufe kimefungwa waya kwa usahihi kisha ondoa kitufe na uweke usumbufu wa INT0 nyuma. Kuna maswala mazito ya kelele na voltage kudhibiti keypad kwa njia hii kwa hivyo ni vizuri kujua kwamba kila kitu kinafanya kazi ili shida za baadaye ziweze kutengwa kwa kitufe cha INT0.

Unapoweka keypad yako na kipaza sauti chako cha voltage, kuna uwezekano mkubwa kwamba maadili yale yale ambayo nimetumia hayatafanya kazi. Kwa hivyo italazimika kufanya majaribio kadhaa kupata maadili yanayokufaa.

Ukiangalia mchoro ambao nimeambatanisha na hatua hii utaona jinsi kipaza sauti cha voltage kitafanya kazi. Tunatumia vipingaji na transistors mbili. Njia ambayo transistors hufanya kazi (angalia karatasi za data!) Kuna voltage ya chini ambayo unahitaji kuingiza kwenye pini ya msingi kwenye transister (pini ya kati) ambayo itaijaza na kuruhusu sasa kutiririka kati ya pini ya ushuru na mtoaji. pini. Katika kesi ya 2N3904 transistor ambayo tunatumia hapa voltage ni 0.65V. Sasa tunachukua voltage hiyo kutoka kwa pato letu kutoka kwa keypad na hatutaki kubadilisha hiyo pato kwa hivyo tutaweka kontena kubwa kati ya pato kutoka kwa kitufe na msingi wa transistor ya kwanza (nilitumia 1Mohm). Nimeitaja hii kama R_1 kwenye mchoro. Kisha tunataka kuanzisha mgawanyiko wa voltage ili msingi wa transistor uwe "karibu" kwa volts 0.65 tayari na ni kidogo tu ya weeny zaidi itaisukuma juu na kuijaza. Hiyo teeny weeny kidogo itatoka kwa pato la kitufe tunapobonyeza kitufe. Kwa kuwa funguo za chini kwenye keypad zinaweka tu voltage ndogo tunahitaji kuwa karibu sana na kueneza tayari ili iwe ya kutosha. Resitors za mgawanyiko wa voltage zimeandikwa R_a na R_b kwenye mchoro. Nilitumia R_a = 1Mohm na R_b = 560Kohm lakini ni hakika kwamba itabidi ucheze karibu na nambari hizi ili iwe sawa kwa usanidi wako. Unaweza kutaka kuwa na ukuta karibu ili kugonga kichwa chako na glasi mbili au tatu za alama mkononi (ningependekeza Laphroaig - ghali, lakini inafaa ikiwa unapenda moshi. Ikiwa vitu vichaa sana, basi pata jagi tu ya BV na kukaa kwa usiku)

Sasa hebu tuangalie jinsi transistors watatupatia makali mazuri ya kupanda kwenda kwenye kitufe cha INT0 na kutoa kitufe chetu kukatiza. Kwanza hebu tuangalie kinachotokea wakati siko kubonyeza kitufe. Katika kesi hiyo transistor ya kwanza (iliyoandikwa T1 kwenye mchoro) imezimwa. Kwa hivyo hakuna mkondo unaotiririka kati ya mtoza ushuru na pini. Kwa hivyo msingi wa transistor nyingine (iliyoandikwa T2) itavutwa juu na kwa hivyo itajaa kuruhusu sasa kutiririka kati ya pini zake. Hii inamaanisha kuwa mtoaji wa T2 atavutwa chini kwani imeunganishwa na mtoza ambayo yenyewe imeunganishwa ardhini. Kwa hivyo, pato linaloenda kwenye kitufe chetu cha kukatiza kitufe cha INT0 (PD4) litakuwa chini na hakutakuwa na usumbufu.

Sasa inakuwaje nikishinikiza ufunguo? Kweli basi msingi wa T1 huenda juu ya 0.65V (kwa hali ya funguo za chini huenda tu juu!) Na kisha sasa itaruhusiwa kutiririka ambayo itavuta msingi wa T2 kwa voltage ya chini na hii itazima T2. Lakini tunaona kuwa wakati T2 imezimwa, basi pato limetolewa juu na kwa hivyo tutapata ishara ya 5V kwenda kwenye pini yetu ya INT0 na itasababisha usumbufu.

Angalia matokeo ya wavu iko hapa. Ikiwa tunasukuma kitufe 1, tunapata 5V kwenda PD4 bila kubadilisha sana pato kwenda ADC0, na muhimu zaidi, hata ikiwa tunasukuma Asterisk, 0, Hash, au Redial, pia tunapata ishara ya 5V kwenda INT0 na pia kusababisha usumbufu! Hii ni muhimu kwani ikiwa tulienda moja kwa moja kutoka kwa kitufe cha keypad hadi kwenye pini ya INT0, funguo hizo hazizalishi voltage yoyote na hazitatosha kuchochea pini hiyo ya kukatiza. Amplifier yetu ya voltage imetatua shida hii.

Hatua ya 7: Nambari ya kuonyesha ya Nambari 4 na Video

Hiyo yote ni kwa mafunzo 9! Nimeambatanisha nambari hiyo na video inayoonyesha operesheni hiyo.

Hii itakuwa mara ya mwisho tutatumia keypad ya analog (asante mungu). Ilikuwa ngumu kutumia, lakini pia ilikuwa muhimu sana kutusaidia kujifunza juu ya ubadilishaji wa analojia-kwa-dijiti, bandari za Analog, kukatiza, kuzidisha, vichungi vya kelele, viboreshaji vya voltage, na mambo mengi ya usimbuaji wa mkutano kutoka kwa meza za kutazama hadi saa / kaunta., nk Ndio sababu tuliamua kuitumia. (pamoja na ni raha kutafuna vitu).

Sasa tutaangalia mawasiliano tena na kupata sehemu yetu ya 7 na maonyesho yetu ya tarakimu nne kusoma safu zetu za kete kutoka kwa roller yetu ya kete kwa njia ile ile ambayo tulifanya na analyzer yetu ya rejista. Wakati huu tutatumia kiunganishi cha waya mbili badala ya njia yetu ya kificho ya pamoja.

Mara tu tutakapokuwa na mawasiliano yanayofanya kazi na safu zinazojitokeza kwenye maonyesho tunaweza hatimaye kutengeneza kipande cha kwanza cha bidhaa yetu ya mwisho. Utagundua kuwa bila vitu vyote vya bandari ya Analog nambari yetu itakuwa fupi sana na labda rahisi kusoma.

Kwa wale ambao wana tamaa. Hapa kuna "mradi" ambao unaweza kujaribu kuwa hakika una maarifa ya kufanya wakati huu ikiwa umepitia mafunzo haya yote hadi hapa:

Mradi: Tengeneza kikokotoo! Tumia onyesho letu la tarakimu nne na keypad yetu na ongeza kitufe cha nje ambacho kitakuwa kama kitufe cha "ingiza". Ramani kinyota kwa "nyakati", hashi ya "kugawanya" redial kwa "plus" na flash kwa "minus" na andika utaratibu wa kikokotozi ambao hufanya kama moja ya hesabu za zamani za "reverse polish" za HP ambazo wahandisi wote walikuwa nazo nyuma katika siku. Yaani. jinsi wanavyofanya kazi ni kwamba unaingiza nambari na bonyeza "ingiza". Hii inasukuma nambari hiyo kwenye ghala, kisha unaingiza nambari ya pili na kushinikiza "ingiza", ambayo inasukuma nambari ya pili kwenye ghala. Mwishowe bonyeza moja ya shughuli kama X, /, + au - na itatumia operesheni hiyo kwa nambari mbili za juu kwenye ghala, onyesha matokeo, na ubonyeze matokeo kwenye ghala ili uweze kuitumia tena ikiwa kama. Kwa mfano kuongeza 2 + 3 ungefanya: 2, "ingiza", 3, "ingiza", "+" na onyesho lingesomeka 5. Unajua jinsi ya kutumia mpororo, onyesho, keypad, na wewe kuwa na nambari nyingi za usuli zilizoandikwa tayari. Ongeza tu kitufe cha kuingiza na sehemu ndogo zinazohitajika kwa kikokotoo. Ni ngumu zaidi kuliko vile unaweza kufikiria mwanzoni, lakini ni ya kufurahisha na inayoweza.

Tutaonana wakati mwingine!

Ilipendekeza: