Satura rādītājs:

AVR Assembler apmācība 9: 7 soļi
AVR Assembler apmācība 9: 7 soļi

Video: AVR Assembler apmācība 9: 7 soļi

Video: AVR Assembler apmācība 9: 7 soļi
Video: you can become a GIGACHAD assembly programmer in 10 minutes (try it RIGHT NOW) 2024, Jūlijs
Anonim
AVR montētāja apmācība 9
AVR montētāja apmācība 9

Laipni lūdzam apmācībā 9.

Šodien mēs parādīsim, kā kontrolēt gan 7 segmentu displeju, gan četrciparu displeju, izmantojot mūsu ATmega328P un AVR montāžas valodas kodu. To darot, mums būs jāpārbauda, kā izmantot steku, lai samazinātu reģistru skaitu, kas mums ir jāsasaista. Mēs pievienosim pāris kondensatorus (zemas caurlaidības filtrus), lai mēģinātu samazināt mūsu tastatūras troksni. Mēs izveidosim sprieguma pastiprinātāju no pāris tranzistoriem, lai mūsu INT0 pārtraukšanas slēdzis labāk darbotos zemākā sprieguma pogām tastatūras apakšējā rindā. Un mēs nedaudz dauzīsim galvu pret sienu, mēģinot iegūt pareizos rezistorus, lai lieta darbotos pareizi.

Mēs izmantosim mūsu tastatūru no 7. apmācības

Lai veiktu šo apmācību, papildus standarta lietām jums būs nepieciešams:

  1. 7 segmentu displejs

    www.sparkfun.com/products/8546

  2. 4 ciparu displejs

    www.sparkfun.com/products/11407

  3. Spiedpoga

    www.sparkfun.com/products/97

  4. Displeja datu lapas, kuras var lejupielādēt no attiecīgajām lapām, kas saistītas ar iepriekš minēto.
  5. 68 pf keramikas kondensators, pāris 104 kondensatori, virkne rezistoru, divi 2N3904 NPN tranzistori.

Šeit ir saite uz visu manu AVR montāžas apmācību kolekciju:

1. darbība: 7 segmentu displeja savienošana ar vadu

Elektroinstalācija 7 segmentu displejā
Elektroinstalācija 7 segmentu displejā
Elektroinstalācija 7 segmentu displejā
Elektroinstalācija 7 segmentu displejā
Elektroinstalācija 7 segmentu displejā
Elektroinstalācija 7 segmentu displejā

Lai kontrolētu 7 segmentu displeju, mēs izmantosim to pašu kodu, ko izmantojām 7. apmācībā. Tātad jums būs jāizveido tā kopija, un mēs to mainīsim.

Mēs segmentēsim mūsu mikrokontrollera tapas šādi:

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

kur attēlā ir parādīti segmentu burti kopā ar kontaktdakšu, kas atbilst parastajam 5 V, un katrs no LED segmentiem, ieskaitot decimālzīmi (dp) displeja apakšējā labajā stūrī. Iemesls tam ir tāds, ka mēs varam ievadīt visu numuru vienā reģistrā un izvadīt, kas reģistrējas portos B un D, lai iedegtos segmenti. Kā redzat, biti ir numurēti secīgi no 0 līdz 7, tāpēc tie tiks kartēti līdz pareizajām tapām, nenosakot un notīrot atsevišķus bitus.

Kā redzat ar kodu, ko pievienojām nākamajā darbībā, esam pārcēluši savu displeja rutīnu uz makro un esam atbrīvojuši SDA un SCL tapas turpmākai izmantošanai nākamajā apmācībā.

Jāpiebilst, ka starp displeja kopējo anodu un 5V sliedi jums jāievieto rezistors. Es izvēlējos 330 omu rezistoru kā parasti, bet, ja vēlaties, varat aprēķināt minimālo pretestību, kas nepieciešama, lai no displeja iegūtu maksimālu spilgtumu, to neapcepot. Lūk, kā to izdarīt:

Vispirms apskatiet datu lapu un ievērojiet, ka pirmajā lapā tā sniedz dažādas displeja īpašības. Svarīgi daudzumi ir "Forward Stream" (I_f = 20mA) un "Forward Voltage" (V_f = 2.2V). Tie norāda, ka vēlaties, lai sprieguma kritums visā displejā būtu, ja strāva ir vienāda ar priekšējo strāvu. Šī ir maksimālā strāva, ko displejs uzņems bez cepšanas. Līdz ar to tas ir arī maksimālais spilgtums, ko varat iegūt no segmentiem.

Tātad, izmantosim Ohma likumu un Kirhofa cilpas likumu, lai noskaidrotu, kāda minimālā pretestība mums būtu nepieciešama sērijveidā ar displeju, lai iegūtu maksimālo spilgtumu. Kirhofa noteikums saka, ka sprieguma izmaiņu summa ap slēgtu ķēdi ķēdē ir vienāda ar nulli, un Oma likums saka, ka sprieguma kritums pret rezistoru R ir: V = I R, kur I ir strāva, kas plūst caur rezistoru.

Tātad, ņemot vērā avota spriegumu V un ap mūsu ķēdi, mums ir:

V - V_f - I R = 0

kas nozīmē (V - V_f)/I = R. Tātad maksimālā spilgtuma iegūšanai (un, iespējams, segmentu cepšanai) nepieciešamā pretestība būtu:

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

Tātad, ja jūs to vēlētos, jūs varētu laimīgi izmantot 150 omus bez raizēm. Tomēr es domāju, ka 140 omi padara to pārāk spilgtu manai gaumei, un tāpēc es izmantoju 330 omus (kas ir sava veida mana personīgā zelta zelta pretestība)

2. darbība: montāžas kods un video

Esmu pievienojis montāžas kodu un video, kurā parādīta tastatūras darbība ar displeju. Kā redzat, mēs vienkārši esam nosaukuši atkārtotā numura sastādīšanas taustiņu uz "r", zibatmiņas taustiņu uz "F", zvaigznīti uz "A" un jaukšanas zīmi uz "H". Tos var saistīt ar dažādām darbībām, piemēram, atpakaļatkāpes taustiņu, ievadīšanu un ko citu, ja vēlaties turpināt izmantot tastatūru, lai LCD displejos vai četrciparu displejos ierakstītu ciparus. Šoreiz es neizmeklēšu kodu pa rindām, jo tas ir ļoti līdzīgs tam, ko mēs jau esam paveikuši iepriekšējās apmācībās. Atšķirības galvenokārt ir tikai tās pašas lietas, kuras mēs jau zinām, piemēram, pārtraukumi un uzmeklēšanas tabulas. Jums vienkārši jāizmeklē kods un jāaplūko jaunās lietas, kuras esam pievienojuši, un lietas, kuras esam mainījuši, un no turienes jāizdomā. Mēs atgriezīsimies pie rindas analīzes nākamajā apmācībā, kad mēs iepazīstināsim ar jauniem montāžas valodas kodēšanas aspektiem AVR mikrokontrolleros.

Tagad apskatīsim 4 ciparu displeju.

3. darbība: 4 ciparu displeja savienošana ar vadu

4 ciparu displeja vadu savienošana
4 ciparu displeja vadu savienošana
4 ciparu displeja vadu savienošana
4 ciparu displeja vadu savienošana

Saskaņā ar datu lapu, četrciparu displeja priekšējā strāva ir 60 mA un priekšējais spriegums ir 2,2 volti. Tātad, pēc tāda paša aprēķina kā iepriekš, es varētu izmantot 47 omu rezistoru, ja es to vēlētos. Tā vietā es izmantošu … hrm.. ļaujiet man redzēt … kā par 330 omiem.

Četrciparu displeja vadu veids ir tāds, ka ir 4 anodi, pa vienam katram cipariem, un citi tapas kontrolē, kurš segments tiek ieslēgts katrā. Jūs varat vienlaikus parādīt 4 ciparus, jo tie ir multipleksēti. Citiem vārdiem sakot, tāpat kā mēs darījām kauliņu pārim, mēs vienkārši cikliski izslēdzam jaudu caur katru no anodiem, un tas mirgo viens pēc otra. Tas tiks darīts tik ātri, ka mūsu acis neredzēs mirgošanu un izskatīsies, ka visi četri cipari ir ieslēgti. Tomēr, lai pārliecinātos, kodēšanas veids ir visu četru ciparu iestatīšana, pēc tam cikla anodi, nevis iestatīšana, pārvietošana, iestatīšana, pārvietošana utt. Tādā veidā mēs varam iegūt precīzu laiku starp katra cipara iedegšanu.

Pagaidām pārbaudīsim, vai visi segmenti darbojas.

Novietojiet 330 omu rezistoru starp maizes dēļa pozitīvo sliedi un displeja pirmo anodu. Datu lapā ir norādīts, ka tapas ir numurētas no 1 līdz 16 pretēji pulksteņrādītāja virzienam, sākot no apakšējā kreisā stūra (ja parasti skatāties uz displeju.. ar komatu apakšā), un tajā ir norādīts, ka anodi ir tapu skaitļi 6, 8, 9 un 12.

Tāpēc mēs savienojam tapu 6 līdz 5 V, un pēc tam no jūsu GND sliedes ņemam negatīvu vadu un ievietojam to visās pārējās tapās un redzam, ka visi segmenti iedegas uz cipara, kuram tas atbilst (kas faktiski ir otrais cipars no labā puse). Pārliecinieties, ka iedegas visi 7 segmenti un aiz komata.

Tagad pielīmējiet GND vadu vienā no tapām, lai iedegtos viens no segmentiem, un šoreiz pārvietojiet rezistoru uz pārējiem 3 anodiem un redziet, ka viens un tas pats segments iedegas visos citos ciparos.

Kaut kas neparasts?

Izrādās, ka datu lapa ir nepareiza. Tas ir tāpēc, ka tā ir datu lapa un kontaktinformācija 12 kontaktu 4 ciparu displejam. T.i. viens bez resnās zarnas vai augšējās zīmes aiz komata. Displejs, ko saņēmu pasūtot, ir 16 kontaktu 4 ciparu displejs. Faktiski manējā segmenta anodi atrodas 1., 2., 6. un 8. tapā. Resnās zarnas anods ir 4. tapa (katoda tapa 12), un augšējais dp anods ir 10. tapa (katods ir 9. tapa)

1. uzdevums: izmantojiet pretestību un zemējuma vadu, lai atrastu, kura tapa atbilst kādam displeja segmentam un decimāldaļai, lai mēs kodējot iegūtu pareizos segmentus.

Veids, kādā mēs vēlamies kodēt segmentu karti, ir tieši tāds pats kā iepriekšējā viencipara 7 segmentu displejā-mums nekas nav jāmaina kodā, vienīgais, ko mēs mainām, ir vadu savienošana uz klāja. Vienkārši pievienojiet pareizo mikrokontrollera porta tapu četrciparu displeja atbilstošajai tapai, lai, piemēram, PB0 joprojām nonāktu pie tapas, kas atbilst segmentam a, PB1-segmentam B utt.

Vienīgā atšķirība ir tāda, ka tagad mums ir vajadzīgas 4 papildu tapas anodiem, jo mēs vairs nevaram vienkārši doties uz 5V sliedi. Mums ir nepieciešams mikrokontrolleris, lai izlemtu, kurš cipars iegūst sulu.

Tātad, lai kontrolētu 4 ciparu anodus, mēs izmantosim PC1, PC2, PC3 un PD4.

Jūs varētu arī iet uz priekšu un pieslēgt vadus. (neaizmirstiet 330 omu rezistorus uz anoda vadiem!)

4. solis: 4 ciparu displeja kodēšana

4 ciparu displeja kodēšana
4 ciparu displeja kodēšana

Padomāsim par to, kā mēs vēlamies kodēt šo displeju.

Mēs vēlamies, lai lietotājs, nospiežot katru pogu, nospiež tastatūras pogas un numuri parādās secīgi displejā. Tātad, nospiežot 1, kam seko 2, tas displejā parādīsies kā 12. Es arī vēlētos saglabāt šo vērtību 12 iekšējai lietošanai, bet mēs pie tā nonāksim nedaudz vēlāk. Pagaidām es tikai vēlos uzrakstīt jaunu makro, kas nospiež taustiņus un parāda tos. Tomēr, tā kā mums ir tikai 4 cipari, es vēlos pārliecināties, ka tas ļauj ievadīt tikai četrus ciparus.

Cita problēma ir tā, ka multipleksētais 4 ciparu displejs darbojas, ciklējot anodus tā, lai katrs cipars būtu ieslēgts tikai sekundes daļu, pirms tiek parādīts nākamais un pēc tam nākamais, un beidzot atkal pie pirmā utt. nepieciešams veids, kā to kodēt.

Mēs arī vēlamies, lai, ievadot nākamo ciparu, kursors tiktu pārvietots pa labi. Tātad, ja es vēlos ierakstīt, piemēram, 1234, pēc 1 ievadīšanas kursors pārvietosies tā, lai nākamais manis ierakstītais cipars parādītos nākamajā 7 segmentu displejā un tā tālāk. Visu šo laiku es vēlos, lai es varētu redzēt, ko esmu ierakstījis, tāpēc tam joprojām ir jābūt riteņbraukšanai pa cipariem un to parādīšanai.

Izklausās pēc augsta pasūtījuma?

Patiesībā lietas ir vēl sliktākas. Mums ir vajadzīgi 4 vispārīgāki reģistri, kurus mēs varam izmantot, lai saglabātu pašreizējās 4 ciparu vērtības, kuras mēs vēlamies parādīt (ja mēs tās pārvietosim, mums tās kaut kur jāglabā), un problēma ir tā, ka mums ir ir izmantojis vispārējas nozīmes reģistrus kā traks, un, ja neskatīsimies, mums to vairs nebūs. Tāpēc, iespējams, ir laba ideja risināt šo problēmu agrāk nekā vēlāk un parādīt, kā atbrīvot reģistrus, izmantojot kaudzīti.

Tātad, sāksim ar lietu vienkāršošanu, izmantosim kaudzīti un atbrīvosim dažus reģistrus, un tad mēs centīsimies izpildīt uzdevumu-nolasīt un parādīt mūsu numurus četrciparu displejā.

5. solis: Push 'n Pop

Push 'n Pop
Push 'n Pop

Mūsu rīcībā ir tikai daži "vispārējas nozīmes reģistri", un pēc to izmantošanas to vairs nav. Tāpēc ir laba programmēšanas prakse tos izmantot tikai dažiem mainīgajiem lielumiem, kas tiek izmantoti kā pagaidu krātuve, kas nepieciešama lasīšanai no portiem un SRAM, kā arī ierakstīšanai ar tiem, vai arī tiem, kas jums būs nepieciešami apakšprogrammās visur. nosauciet tos. Tātad, ko es esmu darījis, tagad, kad esam inicializējuši un mācāmies izmantot kaudzīti, ir iziet kodu un atrast nosauktos vispārējus reģistrus, kas tiek izmantoti tikai vienā apakšprogrammā vai pārtraukumā un nekur citur kodā un aizstāt tos ar vienu no mūsu temp reģistriem un push un pop uz kaudzīti. Patiesībā, ja paskatās uz kodu, kas rakstīts mazākiem mikrokontrolleriem, vai atgriežoties laikā, kad visas mikroshēmas bija mazākas, jūs redzēsit tikai pāris vispārējas nozīmes reģistrus, kas bija jāizmanto visam, tāpēc jūs nevarējāt vienkārši glabājiet tur vērtību un atstājiet to mierā, jo jums noteikti bija nepieciešams šis reģistrs citām lietām. Tātad jūs redzēsit spiedienu un poppin 'visā koda vietā. Varbūt man vajadzēja nosaukt mūsu pagaidu vispārējos reģistrus AX un BX kā cieņu pagātnes dienām.

Piemērs palīdzēs to padarīt skaidrāku.

Ņemiet vērā, ka mūsu pārveides no analogā uz digitālo pilnīgu pārtraukšanu ADC_int mēs izmantojam vispārēju reģistru, ko esam nosaukuši par poguH, ko izmantojām, lai ielādētu ADCH vērtību un salīdzinātu to ar mūsu analogu tabulas un pogas nospiešanas reklāmguvumu tabulu. Mēs izmantojam šo poguH reģistru tikai ADC_int apakšprogrammā un nekur citur. Tā vietā mēs izmantosim savu mainīgo temp2, ko mēs izmantojam kā pagaidu mainīgo, ko varam izmantot jebkurā dotajā apakšprogrammā, un tā vērtība neietekmēs neko ārpus šīs apakšprogrammas (ti, vērtība, ko mēs tam piešķiram ADC_int, netiks izmantota nekur citādi).

Vēl viens piemērs ir mūsu kavēšanās makro. Mums ir reģistrs, kuru mēs esam nosaukuši par "milisekundēm", kas satur mūsu aizkavēšanās laiku milisekundēs. Šajā gadījumā tas ir makro, un mēs atceramies, ka makro darbs ir tāds, ka montētājs ievieto visu makro kodu programmas vietā, kur to sauc. Šajā gadījumā mēs vēlētos atbrīvoties no mainīgā "milisekundes" un aizstāt to ar kādu no mūsu pagaidu mainīgajiem. Šajā gadījumā es darīšu mazliet savādāk, lai parādītu, kā pat tad, ja mainīgā vērtība būs nepieciešama citur, mēs joprojām varam to izmantot, izmantojot kaudzīti. Tātad milisekundes vietā mēs izmantojam "temp" un, lai netiktu sabojātas citas lietas, kurās tiek izmantota arī temp vērtība, mēs vienkārši sākam "delay" makro, "nospiežot" temp uz kaudzes, tad mēs to izmantojam milisekundes vietā, un pēc tam makro beigās mēs "izlecam" iepriekšējo vērtību no kaudzes.

Rezultāts ir tāds, ka mēs esam "aizņēmušies" temp un temp2 pagaidu lietošanai un pēc tam atjaunojuši iepriekšējās vērtības, kad esam pabeiguši.

Šeit ir ADC_int pārtraukšanas rutīna pēc šo izmaiņu veikšanas:

ADC_int:

spiediena temperatūra; saglabāt temp, jo mēs to šeit modificējam, spiediet temp2; saglabāt temp2 lds temp2, ADCH; ielādēt taustiņu nospiešanu ldi ZH, augsts (2*skaitļi) ldi ZL, zems (2*skaitlis) cpi temp2, 0 breq return; ja trokšņa trigeri nemainās 7 ciparu iestatīšanas atslēga: lpm temp, Z+; slodze no galda un post pieaugums clc cp temp2, temp; salīdziniet taustiņu nospiešanu ar galdu brlo PC+4; ja ADCH ir zemāks, mēģiniet vēlreiz lpm 7segnumber, Z; citādi ielādējiet atslēgu vērtību tabulu ar ciparu; palieliniet ciparu skaitli rjmp return; un atgriezties adiw ZH: ZL, 1; pieaugums Z rjmp setkey; un atgriezties augšpusē atgriezties: pop temp2; atjaunot temp2 pop temp; atjaunot temp reti

Ņemiet vērā, ka kaudze darbojas tā, ka pirmā ieslēgšana ir pēdējā. Gluži kā papīra kaudze. Jūs redzat, ka pirmajās divās rindās mēs nospiežam temp vērtību uz kaudzīti, tad mēs spiedām temp2 uz kaudzīti, pēc tam mēs tos izmantojam apakšprogrammā citām lietām un, visbeidzot, mēs atkal atjaunojam to iepriekšējās vērtības vispirms popping temp2 off (tā kā tas bija pēdējais, kas uz tā tika uzspiests, ir kaudzes augšdaļā un būs pirmais, kuru mēs atlaidīsim) un tad popping temp.

Tāpēc no šī brīža mēs vienmēr izmantosim šo metodi. Vienīgā reize, kad mēs faktiski izraudzīsim reģistru kaut kam citam, nevis temp mainīgajam, ir tad, kad mums tas būs vajadzīgs visur. Piemēram, reģistrs ar nosaukumu "pārpildes" ir tāds, ko mēs izmantojam vairākās dažādās programmas vietās, un tāpēc mēs vēlētos tam piešķirt nosaukumu. Protams, mēs joprojām varētu to izmantot tā, kā mēs to darījām ar temp un temp2, jo mēs atjaunosim tā vērtību pēc tam, kad būsim pabeiguši. Bet tas pārāk daudz lietu apšaubītu. Tie ir nosaukti kāda iemesla dēļ, un mums šim darbam jau ir norādīta temp un temp2.

6. darbība: zemas caurlaides filtri un sprieguma pastiprinātājs

Zemas caurlaidības filtri un sprieguma pastiprinātājs
Zemas caurlaidības filtri un sprieguma pastiprinātājs
Zemas caurlaidības filtri un sprieguma pastiprinātājs
Zemas caurlaidības filtri un sprieguma pastiprinātājs

Lai mazliet attīrītu troksni un uzlabotu mūsu tastatūras darbību, mēs vēlamies pievienot pāris zemas caurlaidības filtrus. Tie filtrē augstfrekvences troksni un ļauj zemfrekvences signālam iziet cauri. Būtībā veids, kā to izdarīt, ir vienkārši pievienot 68 pf kondensatoru starp mūsu analogo ieeju un zemi, kā arī 0,1 mikrofarad (ti, 104) kondensatoru starp mūsu PD4 (INT0) pārtraukumu un zemējumu. Ja jūs spēlējat ar tiem, vienlaikus nospiežot tastatūras pogas, jūs varēsit redzēt, ko viņi dara.

Tālāk mēs vēlamies izveidot sprieguma pastiprinātāju. Izrādās, ka tastatūras apakšējā taustiņu rinda (kā arī pārzvanīšanas taustiņš) rada pārāk zemu spriegumu, lai izslēgtu INT0 pārtraukumu. Analogais ports ir pietiekami jutīgs, lai nolasītu zemo spriegumu no šiem taustiņiem, taču mūsu pārtraukšanas tapa nesaņem pietiekami labu augšupejošu malu, lai pārtrauktu, nospiežot šos taustiņus. Tāpēc mēs gribētu kaut kādā veidā pārliecināties, ka jauka sprieguma pieauguma mala skar PD4, bet tas pats zemspriegums sasniedz ADC0. Tas ir diezgan augsts pasūtījums, jo abi signāli nāk no viena tastatūras izejas vada. Ir vairāki sarežģīti veidi, kā to izdarīt, taču pēc šīs apmācības mēs vairs neizmantosim tastatūru, tāpēc vienkārši apvienosim metodi, kas darbojas (tik tikko).

Vispirms jāpieslēdz ārējā poga, lai aizstātu INT0 pārtraukumu un kontrolētu displeju, turot tastatūras taustiņu un noklikšķinot uz pogas. Tam ir mazāk tastatūras problēmu, un jūs varēsit būt pārliecināti, ka spriegums ir pareizi iestatīts uz tastatūras uzmeklēšanas tabulas. Kad zināt, ka tastatūra ir pareizi pievienota vadam, atbrīvojieties no pogas un ievietojiet INT0 pārtraukumu atpakaļ. Tastatūru šādā veidā kontrolē dažas nopietnas trokšņa un sprieguma problēmas, tāpēc ir labi zināt, ka viss darbojas tā, lai nākotnes problēmas varētu izolēt ar taustiņu INT0.

Pieslēdzot tastatūru un sprieguma pastiprinātāju, ir ļoti iespējams, ka tās pašas rezistoru vērtības, kuras esmu izmantojis, nedarbosies. Tāpēc jums būs jāveic daži eksperimenti, lai iegūtu jums piemērotas vērtības.

Ja paskatās uz shēmu, kuru esmu pievienojis šim solim, jūs redzēsit, kā sprieguma pastiprinātājs darbosies. Mēs izmantojam dažus rezistorus un divus tranzistorus. Tranzistoru darbības veids (skatiet datu lapas!) Ir minimālais spriegums, kas jums jāievada tranzistora pamattapā (vidējā tapa), kas to piesātinās un ļaus strāvai plūst starp kolektoru tapu un emitētāju pin. Šeit izmantotā 2N3904 tranzistora spriegums ir 0,65 V. Tagad mēs ņemam šo spriegumu no mūsu izejas no tastatūras, un mēs nevēlamies mainīt šo izeju, tāpēc mēs ievietosim lielu rezistoru starp izeju no tastatūras un pirmā tranzistora pamatni (es izmantoju 1Mohm). Diagrammā esmu to apzīmējis kā R_1. Tad mēs vēlamies uzstādīt sprieguma dalītāju tā, lai tranzistora pamatne jau būtu "gandrīz" pie 0,65 voltiem un tikai maziņš nedaudz vairāk to pārspiestu virsū un piesātinātu. Šis mazais bits nāks no tastatūras izvades, kad nospiežam pogu. Tā kā tastatūras apakšējie taustiņi rada tikai nelielu spriegumu, mums jau jābūt ļoti tuvu piesātinājumam, lai tie būtu pietiekami. Sprieguma dalītāja rezistori diagrammā ir apzīmēti ar R_a un R_b. Es izmantoju R_a = 1Mohm un R_b = 560Kohm, taču ir gandrīz droši, ka jums būs jāspēlējas ar šiem skaitļiem, lai tas būtu piemērots jūsu iestatīšanai. Iespējams, vēlēsities, lai tuvumā būtu siena, ar kuru sist galvu, un divas vai trīs glāzes skoču pie rokas (es ieteiktu Laphroaig - dārgi, bet tā vērts, ja jums patīk smēķēt. BV un apmesties uz nakti)

Tagad aplūkosim, kā tranzistori iegūs mums jauku augšupejošu malu INT0 taustiņam un ģenerēs mūsu taustiņu nospiešanas pārtraukumu. Vispirms apskatīsim, kas notiek, ja es nespiežu taustiņu. Tādā gadījumā pirmais tranzistors (diagrammā apzīmēts ar T1) ir izslēgts. Tātad starp kolektoru un izstarotāja tapām neplūst strāva. Tādējādi otra tranzistora (ar apzīmējumu T2) pamatne tiks pacelta augstu un tādējādi piesātinās, ļaujot strāvai plūst starp tapām. Tas nozīmē, ka T2 emitētājs tiks samazināts zemu, jo tas ir savienots ar kolektoru, kas pats ir savienots ar zemi. Tādējādi izeja, kas nonāk mūsu INT0 taustiņu nospiešanas pārtraukšanas tapā (PD4), būs zema un pārtraukuma nebūs.

Kas tagad notiek, nospiežot taustiņu? Tad T1 bāze pārsniedz 0,65 V (apakšējo taustiņu gadījumā tas tik tikko paceļas virs!), Un tad tiks ļauts plūst strāvai, kas novirzīs T2 pamatni uz zemu spriegumu, un tas izslēgs T2. Bet mēs redzam, ka tad, kad T2 ir izslēgts, izeja tiek pacelta augstu, un līdz ar to mēs saņemsim 5 V signālu, kas nonāk mūsu INT0 tapā, un tas izraisīs pārtraukumu.

Ievērojiet, kāds ir neto rezultāts šeit. Ja mēs nospiežam taustiņu 1, mēs saņemam 5 V pāreju uz PD4, būtiski nemainot izeju uz ADC0, un vēl svarīgāk, pat ja mēs nospiežam Asterisk, 0, Hash vai Redial, mēs saņemam arī 5 V signālu, kas iet uz INT0 un arī izraisot pārtraukumu! Tas ir svarīgi, jo, ja mēs vienkārši pārietu no tastatūras izejas uz INT0 tapu, šie taustiņi gandrīz nerada spriegumu, un ar tiem nepietiks, lai aktivizētu šo pārtraukšanas tapu. Mūsu sprieguma pastiprinātājs ir atrisinājis šo problēmu.

7. darbība: 4 ciparu displeja kods un video

Tas viss ir 9. apmācībai! Esmu pievienojis kodu un video, kurā parādīta darbība.

Šī būs pēdējā reize, kad izmantosim analogo tastatūru (paldies dievam). To bija grūti izmantot, taču tas bija arī ļoti noderīgi, lai palīdzētu mums uzzināt par analogo ciparu pārveidošanu, analogiem portiem, pārtraukumiem, multipleksēšanu, trokšņa filtriem, sprieguma pastiprinātājiem un daudziem montāžas kodēšanas aspektiem, sākot no uzmeklēšanas tabulām līdz taimerim/skaitītājiem., utt. Tāpēc mēs nolēmām to izmantot. (turklāt ir jautri izmētāt mantas).

Tagad mēs atkal aplūkosim komunikāciju un iegūsim 7 segmentu un četrciparu displejus, lai no kauliņu rullīša nolasītu mūsu kauliņu ruļļus tāpat kā ar reģistra analizatoru. Šoreiz mēs izmantosim divu vadu saskarni, nevis mūsu uzlauztās morzes koda metodi.

Kad sakari darbojas un displejos parādās ruļļi, mēs beidzot varam izgatavot savu galaprodukta pirmo gabalu. Jūs pamanīsit, ka bez visa analogā porta satura mūsu kods būs ievērojami īsāks un, iespējams, vieglāk lasāms.

Tiem no jums, kuri ir ambiciozi. Šeit ir "projekts", kuru jūs varētu izmēģināt, un jums noteikti ir zināšanas, kas šajā brīdī ir jādara, ja līdz šim esat izgājis visas šīs apmācības:

Projekts: izveidojiet kalkulatoru! Izmantojiet mūsu 4 ciparu displeju un mūsu tastatūru un pievienojiet ārēju pogas spiedienu, kas darbosies kā ievadīšanas taustiņš. Kartējiet zvaigznīti ar "laikiem", jauku, lai atkārtoto numuru "sadalītu" uz "plus" un zibspuldzi - uz "mīnus", un uzrakstiet kalkulatora rutīnu, kas darbojas kā viens no tiem vecajiem HP "reversās polijas" kalkulatoriem, kas bija visiem inženieriem agrāk. T.i. kā viņi strādā, ir tas, ka jūs ievadāt numuru un nospiediet "enter". Tas nospiež šo skaitli uz kaudzīti, tad jūs ievadāt otro numuru un nospiediet "enter", kas otro numuru nospiež uz kaudzīti. Visbeidzot, jūs nospiežat kādu no darbībām, piemēram, X, /, + vai -, un šī darbība tiks piemērota kaudzes diviem augšējiem skaitļiem, parādīs rezultātu un pārbīdīs rezultātu uz kaudzes, lai to varētu izmantot vēlreiz, ja patīk. Piemēram, lai pievienotu 2+3, jūs darītu: 2, "ievadiet", 3, "ievadiet", "+", un displejā būtu redzams 5. Jūs zināt, kā izmantot kaudzīti, displeju, tastatūru un lielākā daļa fona koda jau ir uzrakstīta. Vienkārši pievienojiet ievadīšanas taustiņu un kalkulatoram nepieciešamās apakšprogrammas. Tas ir nedaudz sarežģītāk, nekā jūs varētu domāt sākumā, bet tas ir jautri un paveicami.

Tiksimies nākamreiz!

Ieteicams: