Мазмұны:

AVR Assembler оқулығы 9: 7 қадамдар
AVR Assembler оқулығы 9: 7 қадамдар

Бейне: AVR Assembler оқулығы 9: 7 қадамдар

Бейне: AVR Assembler оқулығы 9: 7 қадамдар
Бейне: Lesson 2: Getting Arduino Software and using Documentation for SunFounder Arduino Kit | SunFounder 2024, Шілде
Anonim
AVR құрастырушы оқулығы 9
AVR құрастырушы оқулығы 9

9 -оқулыққа қош келдіңіз.

Бүгін біз ATmega328P және AVR құрастыру тілінің коды арқылы 7 сегментті дисплейді де, 4 таңбалы дисплейді қалай басқаруға болатынын көрсетеміз. Бұл әрекетті орындау барысында біз байланыстыру қажет регистрлер санын азайту үшін стекті қалай пайдалану керектігін білуге мәжбүр боламыз. Біз пернетақтадағы шуды азайту үшін бірнеше конденсатор қосамыз. Біз бірнеше транзистордан кернеу күшейткішін жасаймыз, осылайша біздің INT0 үзіліс қосқышы пернетақтаның төменгі жолындағы төменгі кернеу түймелері үшін жақсы жұмыс істейді. Біз заттардың дұрыс жұмыс істеуі үшін дұрыс резисторларды алуға тырысып, басымызды қабырғаға соғамыз.

Біз 7 -оқулықтағы пернетақтаны қолданамыз

Бұл оқулықты орындау үшін стандартты материалдардан басқа сізге қажет:

  1. 7 сегментті дисплей

    www.sparkfun.com/products/8546

  2. 4 таңбалы дисплей

    www.sparkfun.com/products/11407

  3. Түйме

    www.sparkfun.com/products/97

  4. Дисплейге арналған мәліметтер кестесі, оларды жоғарыда көрсетілген сәйкес беттерден жүктеуге болады.
  5. 68 pf керамикалық конденсатор, 104 жұп конденсатор, резисторлар шоғыры, екі 2N3904 NPN транзисторы.

Міне менің AVR құрастырушы оқулықтарының толық жинағына сілтеме:

1-қадам: Дисплейдің 7 сегменттерін қосу

7 сегментті дисплейдің сымдары
7 сегментті дисплейдің сымдары
7 сегментті дисплейдің сымдары
7 сегментті дисплейдің сымдары
7 сегментті дисплейдің сымдары
7 сегментті дисплейдің сымдары

Біз 7-оқулықта 7 сегментті дисплейді басқару үшін пернетақтада қолданған кодты қолданамыз. Сондықтан сіз оның көшірмесін жасауыңыз керек, біз оны өзгертеміз.

Біз сегментті микроконтроллердің түйреуіштеріне келесідей салыстырамыз:

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

мұнда сегменттердің әріптері суретте жалпы 5В сәйкес келетін түйреуішпен және дисплейдің төменгі оң жағындағы ондық нүктені (dp) қосқандағы жарықдиодты сегменттердің әрқайсысымен бірге көрсетілген. Мұның себебі - біз бүкіл санды бір регистрге енгізе аламыз және сегменттерді жарықтандыру үшін В және D порттарына тіркелетін шығарамыз. Көріп отырғаныңыздай, биттер 0 -ден 7 -ге дейін ретпен нөмірленеді, сондықтан олар жеке биттерді орнатпай және тазартпай -ақ, дұрыс түйреуіштермен салыстырылады.

Келесі қадамда біз қосқан код бойынша көріп отырғанымыздай, біз дисплей режимін макросқа ауыстырдық және келесі оқулықта болашақта қолдану үшін SDA мен SCL түйреуіштерін босаттық.

Дисплейдің жалпы анод пен 5В рельсінің арасына резистор қою керек екенін қосқым келеді. Мен әдеттегідей 330 Ом резисторды таңдадым, бірақ егер қаласаңыз, дисплейден қуырусыз максималды жарықтықты алу үшін қажетті ең төменгі қарсылықты есептей аласыз. Міне, мұны қалай жасауға болады:

Алдымен деректер парағына қараңыз және бірінші бетте ол дисплейдің әр түрлі қасиеттерін беретінін байқаңыз. Маңызды шамалар - «Алға ток» (I_f = 20мА) және «Алға кернеу» (V_f = 2,2В). Бұл дисплейдегі кернеудің төмендеуі, егер ток тура токқа тең болса, болады. Бұл дисплей қуырусыз алатын максималды ток. Бұл сонымен қатар сегменттерден шығуға болатын максималды жарықтық.

Ендеше, максималды жарықтықты алу үшін дисплеймен қатар қандай минималды қарсылық қою керектігін анықтау үшін Ом заңы мен Кирхгоф циклінің ережесін қолданайық. Кирхгоф ережесі бойынша, тізбектегі тұйық контур айналасындағы кернеудің қосындысы нөлге тең, ал Ом заңы қарсылық резисторындағы кернеудің төмендеуі мынаны айтады: V = I R, мұнда I - резистор арқылы өтетін ток.

Осылайша, V кернеуінің кернеуі берілген және біздің тізбекті айналдыра отырып, бізде:

V - V_f - I R = 0

(V - V_f)/I = R. дегенді білдіреді, сондықтан максималды жарықтықты алу үшін қажет қарсылық (және, мүмкін, сегменттерді қуыру):

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

Егер сіз қаласаңыз, 150 омды алаңсыз қолдана аласыз. Алайда, менің ойымша, 140 ом оны өзіме ұнамды етеді, сондықтан мен 330 омды қолданамын (бұл светодиоды үшін жеке Goldilocks кедергісі)

2 -қадам: Жинау коды мен бейне

Мен құрастыру кодын және дисплеймен пернетақтаның жұмысын көрсететін бейнені тіркедім. Көріп отырғаныңыздай, біз қайта теру пернесін «r» -ге, флэш -кілтті «F» -ке, жұлдызшаны «А» -ға және хэшті «H» -ке салыстырдық. Оларды СКД дисплейде немесе 4 таңбалы дисплейлерде сандарды теру үшін пернетақтаны пайдалануды жалғастырғыңыз келсе, артқа шегіну, енгізу және басқаша сияқты әр түрлі әрекеттермен салыстыруға болады. Мен бұл жолы кодты тізбектеп өтпеймін, себебі бұл алдыңғы оқулықтарда жасаған нәрсеге өте ұқсас. Айырмашылықтар-бұл үзіліс пен іздеу кестелері сияқты қалай істеу керектігін білетін нәрселер. Сіз кодты қарап шығып, біз қосқан жаңа нәрселерге және өзгерген нәрселерге қарап, оны сол жерден анықтауыңыз керек. Біз келесі оқулықта AVR микроконтроллерлерінде құрастыру тілін кодтаудың жаңа аспектілерін енгізгенде, саптық талдауға ораламыз.

Енді 4 таңбалы дисплейге назар аударайық.

3-қадам: 4 таңбалы дисплейді қосу

4 таңбалы дисплейді қосу
4 таңбалы дисплейді қосу
4 таңбалы дисплейді қосу
4 таңбалы дисплейді қосу

Мәліметтер кестесіне сәйкес, 4 таңбалы дисплейде 60 мА тура ток және 2,2 вольттық тура кернеу бар. Осылайша, егер мен қаласам, бұрынғыдай 47 ом резисторды қолдана аламын. Оның орнына мен… hrm қолданамын … көрейін … 330 Ом туралы.

Төрт таңбалы дисплейдің сымды қосылу әдісі-әрбір анод үшін 4 анод бар, ал басқа түйреуіштер әрқайсысында қандай сегмент пайда болатынын басқарады. Сіз бір уақытта 4 цифрды көрсете аласыз, себебі олар мультиплексті. Басқаша айтқанда, біз жұп сүйектер үшін жасағандай, біз анодтардың әрқайсысы бойынша қуатты айналдырамыз және ол оларды бірінен соң бірі жыпылықтатады. Бұл соншалықты тез жасайды, біздің көзіміз жыпылықтағанын көрмейді және барлық төрт цифр қосулы сияқты болады. Дегенмен, кодтау әдісі - бұл барлық төрт цифрды орнату, содан кейін анодтарды орнату, жылжыту, орнату, жылжыту және т..

Әзірге сегменттердің барлығы жұмыс істейтінін тексерейік.

330 Ом резисторды нан тақтасының оң релесі мен дисплейдегі бірінші анодтың арасына қойыңыз. Деректер кестесі түйреуіштердің төменгі сол жақтан бастап сағат тіліне қарсы 1-ден 16-ға дейін нөмірленгенін көрсетеді (дисплейге қалыпты қараған кезде.. төменгі жағында ондық нүктелері бар) және анодтардың түйреуіш нөмірлері 6 екенін көрсетеді, 8, 9 және 12.

Біз 6 -штыруды 5В -ке қосамыз, содан кейін GND рельсінен теріс сым алып, оны басқа түйреуіштердің барлығына бекітеміз және барлық сегменттер сәйкес келетін санға жанып тұрғанын көреміз (бұл шын мәнінде екінші сан) құқық). Барлық сегменттер мен ондық нүктені жарықтандыратынына көз жеткізіңіз.

Енді сегменттердің бірін жарықтандыру үшін GND сымын түйреуіштердің біріне бекітіңіз, бұл жолы резисторды басқа 3 анодқа жылжытыңыз және сол сегмент басқа цифрлардың әрқайсысында жанатынын көріңіз.

Ерекше нәрсе бар ма?

Мәліметтер парағындағы түйреу қате екені белгілі болды. Себебі, бұл 12 істікшелі, 4 таңбалы дисплейге арналған деректер кестесі мен түйін. Яғни қос нүктесі жоқ немесе ондық үтірі жоқ. Мен тапсырыс берген кезде алған дисплей-бұл 16 істікшелі, 4 таңбалы дисплей. Іс жүзінде шахтада анодтар 1, 2, 6 және 8 түйреуіштерде орналасқан. Қос нүктелі анод - 4 түйреуіш (катодты түйреуіш 12) және жоғарғы нүктелік анод 10 түйреуіш (катод 9 түйреуіш)

1 -жаттығу: Резистор мен жерге қосқыш сымды қолданып, дисплейде қандай түйіннің қай сегментке және ондық нүктеге сәйкес келетінін анықтау үшін оны кодтаған кезде дұрыс сегменттер жарықтандырылады.

Біз сегменттің картасын кодтағымыз келетін әдіс дәл жоғарыдағы 7-разрядты бір таңбалы дисплейдегідей-бізге кодтағы нәрсені өзгертудің қажеті жоқ, біз өзгерте алатын жалғыз нәрсе-сымдардың қосылуы. тақтада. Микроконтроллердегі дұрыс портты түйреуішті 4 таңбалы дисплейдегі сәйкес істікке қосыңыз, осылайша, PB0 әлі де а сегментіне сәйкес түйреуішке өтеді, PB1 В сегментіне өтеді және т.

Жалғыз айырмашылық мынада, енді бізге анодтар үшін 4 қосымша түйреуіш қажет, өйткені біз енді 5В рельске бара алмаймыз. Бізге микроконтроллер шырынды қай цифр алатынын шешуі керек.

Сондықтан біз 4 цифрлы анодтарды басқару үшін PC1, PC2, PC3 және PD4 қолданамыз.

Сіз сымдарды жалғастыра аласыз. (анод сымдарындағы 330 Ом резисторларды ұмытпаңыз!)

4-қадам: 4 таңбалы дисплейді кодтау

4 таңбалы дисплейді кодтау
4 таңбалы дисплейді кодтау

Бұл дисплейді қалай кодтағымыз келетіні туралы ойланайық.

Біз пайдаланушы пернетақта түймелерін басуды және сандар дисплейде әр түймені басқан кезде олардың ретімен шығуын қалаймыз. Егер мен 1 -ден кейін 2 -ге дейін бассам, ол дисплейде 12 -де көрсетіледі. Мен де сол мәнді, 12 -ді ішкі пайдалану үшін сақтағым келеді, бірақ біз оған сәл кейін жетеміз. Әзірге мен сіздің пернелеріңізді басып, оларды көрсететін жаңа макросты жазғым келеді. Алайда, бізде тек 4 цифр болғандықтан, бұл тек төрт санды теруге мүмкіндік беретініне көз жеткізгім келеді.

Тағы бір мәселе-мультиплексті 4 таңбалы дисплейдің жұмыс әдісі-анодтарды велосипедпен айналдыру, осылайша әрбір цифр келесі секундты көрсетпей тұрып, секунд ішінде қосылады, сосын келесі және ақырында біріншіге қайта оралады. бұны кодтау әдісі қажет.

Біз сондай -ақ келесі цифрды тергенде «курсорды» оң жаққа жылжытқанын қалаймыз. Егер мен, мысалы, 1234 тергім келсе, мен 1 тергеннен кейін курсор жылжиды, сондықтан келесі 7 сегментті дисплейде мен енгізген келесі сан пайда болады. Бұл орын алған кезде мен әлі де тергенімді көргім келеді, сондықтан ол цифрлар арқылы велосипедпен өтіп, оларды көрсетуі керек.

Бұл үлкен тапсырыс сияқты ма?

Іс жүзінде одан да нашар. Бізге көрсеткіміз келетін 4 цифрдың ағымдағы мәндерін сақтау үшін қолдануға болатын тағы 4 жалпы мақсаттағы регистрлер қажет (егер біз олар арқылы айналатын болсақ, оларды бір жерде сақтап қалуымыз керек) және бұл мәселе бізде жалпы мақсаттағы регистрлерді ақылсыз сияқты қолдандық, ал егер біз сақтамасақ, бізде қалмайды. Сондықтан бұл мәселені тезірек шешіп, стек арқылы регистрлерді қалай босатуға болатынын көрсеткен дұрыс болар.

Мәселені сәл жеңілдетуден бастайық, стекті қолданыңыз және кейбір регистрлерді босатыңыз, содан кейін біз өз нөмірлерімізді 4 таңбалы дисплейде оқу және көрсету тапсырмасын орындауға тырысамыз.

5 -қадам: Попты итеріңіз

Попты итеріңіз
Попты итеріңіз

Бізде бар бірнеше «Жалпы мақсатты регистрлер» бар, және олар қолданылғаннан кейін олар жоқ. Сондықтан оларды порттарға және SRAM -дан оқуға және жазуға қажет уақытша сақтау орны ретінде пайдаланылатын бірнеше айнымалылар үшін ғана қолдану жақсы бағдарламалау тәжірибесі, немесе сізге барлық жерде кіші бағдарламаларда қажет болады. оларды атаңыз. Сонымен, мен енді Stack -ті инициализациялауды және үйренуді үйреніп жатқанда, мен не істедім - бұл кодты қарап шығу және тек бір ішкі бағдарламада немесе үзілісте пайдаланылатын және кодта басқа еш жерде алмастырылмайтын жалпы мақсаттағы регистрлерді табу. оларды біздің температуралық регистрлердің бірімен және стекке басу арқылы жіберіңіз. Шын мәнінде, егер сіз шағын микроконтроллерлер үшін жазылған кодты қарасаңыз немесе барлық чиптер кішірек болған уақытқа оралсаңыз, сіз бәріне қолдануға болатын бірнеше жалпы мақсаттағы регистрлерді көресіз. құндылықты сол жерде сақтаңыз және оны жалғыз қалдырыңыз, өйткені сізге басқа нәрселер үшін бұл регистр қажет екеніне сенімді болдыңыз. Осылайша сіз кодтың барлық жерінде pushin және poppin көресіз. Мүмкін, мен AX және BX жалпы мақсаттағы регистрлерін өткен күндерге құрметпен тағзым етуім керек еді.

Мысал мұны түсінікті етуге көмектеседі.

Аналогты -цифрлық түрлендірудің ADC_int толық үзілісінде біз ADCH мәнін жүктеу үшін HH түймешігі бар жалпы мақсатты регистрді қолданатынымызды және оны аналогты іздеу кестесімен түймені басу түрлендіруімен салыстыратындығымызға назар аударыңыз. Біз бұл батырманы ғана қолданамыз ADC_int ішкі бағдарламасында және басқа жерде жоқ. Сондықтан оның орнына біз уақытша айнымалы ретінде қолданатын temp2 айнымалы мәнін қолданамыз, оны кез келген берілген бағдарламада қолдануға болады және оның мәні бұл қосалқы бағдарламадан тыс ештеңеге әсер етпейді (яғни біз оны ADC_int -те берген мән еш жерде қолданылмайды) басқа).

Тағы бір мысал біздің кешіктіру макросымызда. Бізде «миллисекундтар» деп аталатын тізілім бар, онда миллисекундта кешігу уақыты бар. Бұл жағдайда ол макросте болады және біз еске саламыз, макростың жұмыс әдісі - бұл ассемблер макро -кодтың барлығын ол шақырылған бағдарламаның орнына орналастырады. Бұл жағдайда біз «миллисекундтар» айнымалысын алып тастап, оны уақытша айнымалы мәндердің біріне ауыстырғымыз келеді. Бұл жағдайда мен айнымалының мәні басқа жерде қажет болса да, оны стек арқылы қалай қолдануға болатынын көрсету үшін мен мұны басқаша жасаймын. Сондықтан миллисекундтардың орнына біз «temp» қолданамыз және температураның мәнін пайдаланатын басқа нәрселерді бұрмаламау үшін біз «кешіктіру» макросын стекке температураны «итеру» арқылы бастаймыз, содан кейін біз оны қолданамыз миллисекундтардың орнына, содан кейін макростың соңында біз оның бұрынғы мәнін стектен «шығарамыз».

Таза нәтиже - біз уақытша пайдалану үшін temp және temp2 «қарызға» алдық, содан кейін біз оларды аяқтаған кезде оларды бұрынғы мәндеріне қалпына келтірдік.

Міне, бұл өзгерісті енгізгеннен кейін ADC_int үзілу тәртібі:

ADC_int:

басу температурасы; temp сақтаңыз, себебі біз оны өзгертеміз, temp2; temp2 lds temp2, ADCH сақтау; ldi ZH пернесін басу, жоғары (2*сан) ldi ZL, төмен (2*сан) cpi temp2, 0 breq қайтару; егер шуды іске қосатын құралдар 7segnumber setkey пернесін өзгертпесе: lpm temp, Z+; кестеден жүктеме және post increment clc cp temp2, temp; пернетақтаны brlo PC+4 кестесімен салыстыру; егер ADCH төмен болса, lpm 7segnumber, Z қайталап көріңіз; әйтпесе кілт мәні кестесін жүктеу; rjmp қайтару цифрлық санын көбейту; және ZH әдетін қайтарыңыз: ZL, 1; қадамды көбейту Z rjmp; және жоғарғы қайтарымға оралу: pop temp2; temp2 pop temp температурасын қалпына келтіру; temp reti қалпына келтіру

Стек жұмысының әдісі бірінші қосылу соңғы үзіліс екеніне назар аударыңыз. Қағаз бумасы сияқты. Сіз көресіз, біздің алғашқы екі жолда біз temp мәнін стекке жібереміз, содан кейін temp2 -ді стекке жібереміз, содан кейін оларды ішкі бағдарламада басқа нәрселер үшін қолданамыз және ақырында оларды бұрынғы мәндеріне қалпына келтіреміз. алдымен pop2 temp2 өшіріледі (өйткені ол соңғысы стектің жоғарғы жағында орналасқан және біз бірінші болып шығарамыз), содан кейін temp.

Сондықтан бұдан былай біз бұл әдісті үнемі қолданатын боламыз. Біз реестрді уақытша айнымалыдан басқа нәрсеге тағайындайтын жалғыз уақыт - бұл бізге барлық жерде қажет болады. Мысалы, «толып кетулер» деп аталатын регистр - біз оны бағдарламаның бірнеше жерінде қолданамыз, сондықтан біз оған атау бергіміз келеді. Әрине, біз оны temp және temp2 қалай қолдансақ, солай қолдана аламыз, өйткені біз оның мәнін аяқтағаннан кейін қалпына келтіреміз. Бірақ бұл нәрселерді шамадан тыс спагетизациялайды. Олар белгілі бір себептермен аталған және бізде бұл жұмысқа арналған temp және temp2 бар.

6-қадам: төмен өтетін сүзгілер мен кернеу күшейткіші

Төмен өтетін сүзгілер мен кернеу күшейткіші
Төмен өтетін сүзгілер мен кернеу күшейткіші
Төмен өтетін сүзгілер мен кернеу күшейткіші
Төмен өтетін сүзгілер мен кернеу күшейткіші

Шуды аздап тазарту және пернетақтаның жұмысын жақсарту үшін біз төмен өтетін бірнеше сүзгіні қосқымыз келеді. Олар жоғары жиілікті шуды сүзеді және төмен жиілікті сигналдың өтуіне мүмкіндік береді. Мұны істеудің негізгі әдісі - аналогтық кіріс пен жерге қосу үшін 68 pf конденсаторды, сонымен қатар PD4 (INT0) үзіліс пен жерге қосу арасындағы 0,1 микрофарадты (яғни 104) конденсаторды қосу. Егер сіз пернетақтадағы түймелерді басқанда осылармен ойнайтын болсаңыз, сіз олардың не істеп жатқанын көре аласыз.

Содан кейін біз кернеу күшейткішін жасағымыз келеді. Анықталғандай, пернетақтадағы пернелердің төменгі қатары (сонымен қатар қайта теру пернесі) INT0 үзілісін өшіру үшін тым төмен кернеуді шығарады. Аналогтық порт осы кілттердің төмен кернеуін оқу үшін жеткілікті сезімтал, бірақ біз бұл түймені басқан кезде үзу үшін үзіліс түйреуіші жақсы көтеріле алмайды. Сондықтан біз кернеудің жақсы көтерілу жиегі PD4 -ке түсетініне сенімдіміз, бірақ төмен кернеу ADC0 -ге түседі. Бұл өте жоғары тапсырыс, өйткені екі сигнал да біздің пернетақтаның бір шығыс сымынан келеді. Мұны істеудің бірнеше күрделі әдістері бар, бірақ біз бұл оқудан кейін пернетақтаны қолданбаймыз, сондықтан жұмыс істейтін әдісті біріктірейік (әрең).

INT0 үзілісін ауыстыру үшін алдымен сыртқы түймені қосу керек және дисплейді пернетақтадағы пернені басып тұрып, түймені басу арқылы басқару керек. Бұл пернетақтаға қатысты мәселелерді азайтады және кернеу пернетақтаны іздеу кестесінде дұрыс орнатылғанына сенімді болуға мүмкіндік береді. Пернетақтаның дұрыс қосылғанын білгеннен кейін, түймені алып тастап, INT0 үзілісін орнына қойыңыз. Пернетақтаны осылайша басқаратын шу мен кернеудің елеулі мәселелері бар, сондықтан болашақ проблемаларды INT0 пернесіне оқшаулау үшін бәрі жұмыс істейтінін білу жақсы.

Пернетақтаны және кернеуді күшейткішті қосқанда, мен қолданған резистордың мәндері жұмыс істемейді. Сізге сәйкес келетін құндылықтарды алу үшін сізге бірнеше тәжірибе жасау керек болады.

Егер мен осы қадамға қосқан диаграмманы қарасаңыз, кернеу күшейткішінің қалай жұмыс істейтінін көресіз. Біз бірнеше резистор мен екі транзисторды қолданамыз. Транзисторлардың жұмыс әдісі (деректер парақтарын қараңыз!) - бұл транзистордың негізгі түйреуішіне (ортаңғы түйреуіш) енгізу қажет ең аз кернеу, ол оны қанықтырады және коллекторлық түйреуіш пен эмитент арасында ток өтуіне мүмкіндік береді. түйреу. Біз қолданатын 2N3904 транзисторы жағдайында кернеу 0,65В. Енді біз кернеуді пернетақтадан шығарамыз және біз бұл шығуды өзгерткіміз келмейді, сондықтан біз пернетақтаның шығысы мен бірінші транзистордың негізі арасында үлкен резистор қоямыз (мен 1Mohm қолдандым). Мен мұны диаграммада R_1 деп белгіледім. Содан кейін біз кернеуді бөлгішті транзистордың негізі 0,65 вольтты құрайтындай етіп орнатқымыз келеді, ал шамалы ғана шамасы оны үстінен итеріп, қанықтырады. Біз түймені басқан кезде бұл кішкене пернетақта шығысынан шығады. Пернетақтаның төменгі пернелері шамалы кернеуді шығаратындықтан, біз олардың жеткілікті болуы үшін қанықтыруға өте жақын болуымыз керек. Диаграммада кернеу бөлгіш қарсыластар R_a және R_b деп белгіленген. Мен R_a = 1Mohm және R_b = 560Kohm қолдандым, бірақ оны орнату үшін бұл сандармен ойнауға тура келетіні анық. Сізге жақын жерде басыңызды қағатын қабырға мен қолыңызда екі немесе үш стакан скотч болғанын қалауыңыз мүмкін (мен Лафроайг ұсынар едім - қымбат, бірақ егер сіз темекі шегуді ұнататын болсаңыз, оған тұрарлық. Егер шынымен ақылға сыймайтын болса, құмыраны алыңыз) BV және түнде тұрыңыз)

Енді транзисторлар бізге INT0 кілтіне жақсы көтерілу жағын қалай әкелетінін және перне басу үзілісін тудыратынын қарастырайық. Алдымен мен пернені баспаған кезде не болатынын қарастырайық. Бұл жағдайда бірінші транзистор (диаграммада T1 деп белгіленген) өшірулі. Сондықтан коллектор мен эмиттер түйреуіштері арасында ток өтпейді. Осылайша, басқа транзистордың негізі (T2 таңбасы бар) жоғары тартылады, осылайша ол түйреуіштер арасында ток өтуіне мүмкіндік береді. Бұл T2 эмитенті төмен тартылатынын білдіреді, себебі ол жерге қосылған коллекторға қосылған. Осылайша, біздің INT0 пернесін басу түйініне (PD4) түсетін шығыс төмен болады және үзіліс болмайды.

Енді мен пернені басқанда не болады? Сонымен, T1 негізі 0,65 В -тан жоғары болады (төменгі пернелер жағдайында ол әрең жоғары көтеріледі!), Содан кейін ток өтеді, ол T2 негізін төмен кернеуге түсіреді және бұл T2 өшіреді. Бірақ біз T2 өшірілген кезде шығыс жоғары тартылатынын көреміз, демек біз INT0 түйреуішіне 5В сигналын аламыз және бұл үзіліс тудырады.

Мұнда қандай таза нәтиже бар екеніне назар аударыңыз. Егер біз 1 пернесін бассақ, біз ADC0 шығуын айтарлықтай өзгертпестен PD4 -ке 5В барамыз, ал одан да маңыздысы, егер біз жұлдызша, 0, хэш немесе қайта теруді бассақ та, INT0 -ге 5В сигналын аламыз. үзіліс тудырады! Бұл өте маңызды, өйткені егер біз тікелей пернетақтаның шығысынан INT0 түйреуішіне өтетін болсақ, онда бұл кілттер кернеуді тудырмайды және олар үзіліс түйреуішін іске қосу үшін жеткіліксіз болады. Біздің кернеуді күшейткіш бұл мәселені шешті.

7-қадам: 4 сандық дисплей коды мен бейне

Мұның бәрі 9 -оқулыққа арналған! Мен кодты және операцияны көрсететін бейнені тіркедім.

Бұл аналогтық пернетақтаны соңғы рет қолданатын боламыз (құдайға шүкір). Қолдану өте қиын болды, бірақ аналогты-цифрлық түрлендіру, аналогтық порттар, үзілістер, мультиплекстеу, шу сүзгілері, кернеу күшейткіштері және іздеу кестелерінен таймерге/есептегіштерге дейін жинауды кодтаудың көптеген аспектілері туралы білуге көмектесу өте пайдалы болды. және т.б. Сондықтан да біз оны қолдануды шештік. (сонымен қатар заттарды тазалау қызықты).

Енді біз қарым-қатынасты қайта қарастырамыз және 7 сегменті мен 4 таңбалы дисплейлерімізге сүйек ролигіндегі сүйек орамдарын біздің реестр анализаторы сияқты оқуға мүмкіндік береміз. Бұл жолы біз морзалық кодты бұзу әдісін емес, екі сымды интерфейсті қолданамыз.

Бізде байланыс орнатылғаннан кейін және дисплейде шығыршықтар пайда болғаннан кейін біз түпкілікті өнімнің бірінші бөлігін жасай аламыз. Сіз барлық аналогтық портсыз біздің код айтарлықтай қысқа болатынын және оқуға оңай болатынын байқайсыз.

Сіздер үшін өршіл адамдар үшін. Міне, сіз осы нұсқаулықтың барлығын осы уақытқа дейін өткізген болсаңыз, сізде міндетті түрде біліміңіз бар екеніне көз жеткізуге болатын «жоба»:

Жоба: Калькулятор жасаңыз! 4 таңбалы дисплей мен пернетақтаны қолданыңыз және «енгізу» пернесі сияқты әрекет ететін сыртқы түймені басыңыз. Жұлдызшаны «уақытқа», қайта теруді «плюске» және жарқылды «минусқа» бөлуге арналған хэшті салыңыз және барлық инженерлерде болған HP -дің «кері лак» ескі калькуляторларының біріндей әрекет ететін калькуляторды жазыңыз. сол күні. Яғни олардың жұмыс әдісі - сіз нөмірді енгізіп, «енгізу» түймесін басыңыз. Бұл нөмірді стекке жібереді, содан кейін сіз екінші нөмірді енгізесіз және «енгізу» батырмасын басасыз, ол екінші нөмірді стекке шығарады. Ақырында сіз X, /, + немесе - сияқты амалдардың бірін басасыз, ол сол операцияны стектің жоғарғы екі санына қолданады, нәтижені көрсетеді және нәтижені стекке шығарады, егер сіз оны қайтадан қолдансаңыз сияқты Мысалы, 2+3 қосу үшін сіз: 2, «enter», 3, «enter», «+» және дисплейде 5 оқылады. Сіз стекті, дисплейді, пернетақтаны қалай пайдалануды білесіз. фондық кодтың көп бөлігі бұрыннан бар. Енгізу пернесін және калькуляторға қажет кіші бағдарламаларды қосыңыз. Бұл сіз ойлағаннан әлдеқайда күрделі, бірақ көңілді және мүмкін.

Келесі кездескенше!

Ұсынылған: