Агуулгын хүснэгт:

AVR Assembler заавар 9: 7 алхам
AVR Assembler заавар 9: 7 алхам

Видео: AVR Assembler заавар 9: 7 алхам

Видео: AVR Assembler заавар 9: 7 алхам
Видео: 🌹Вяжем шикарный женский джемпер спицами по многочисленным просьбам! Подробный видео МК! Часть 3. 2024, Долдугаар сарын
Anonim
AVR Assembler заавар 9
AVR Assembler заавар 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)

Зураг дээр сегментүүдийн үсгийг нийтлэг 5V -т харгалзах зүү болон дэлгэцийн баруун доод хэсэгт аравтын бутархай (dp) оруулаад LED сегмент тус бүрийг харуулав. Үүний шалтгаан нь бид бүхэл тоог нэг регистрт оруулж, сегментүүдийг гэрэлтүүлэхийн тулд B, D портод бүртгэдэг гаралт юм. Таны харж байгаагаар битүүдийг 0 -ээс 7 хүртэл дараалан дугаарласан тул битүүдийг тохируулах, цэвэрлэхгүйгээр зөв зүү рүү буулгах болно.

Дараагийн алхамд хавсаргасан кодоос харахад бид дэлгэцийн горимоо макро руу шилжүүлж, дараагийн зааварт цаашид ашиглах SDA болон SCL зүүг сулласан болно.

Дэлгэцийн нийтлэг анод ба 5В төмөр замын хооронд резистор оруулах шаардлагатай гэдгийг нэмж хэлмээр байна. Би ердийнхөөрөө 330 ом эсэргүүцэл сонгосон боловч хэрвээ та хүсвэл шарахгүйгээр дэлгэцээс хамгийн их тод байдлыг авахын тулд шаардлагатай хамгийн бага эсэргүүцлийг тооцоолж болно. Үүнийг хэрхэн яаж хийхийг энд харуулав.

Эхлээд мэдээллийн хуудсыг хараад эхний хуудсан дээр дэлгэцийн янз бүрийн шинж чанарыг харуулаарай. Чухал хэмжигдэхүүнүүд нь "Урагш гүйдэл" (I_f = 20mA) ба "Урд хүчдэл" (V_f = 2.2V) юм. Эдгээр нь хэрэв гүйдэл нь урагшаа гүйдэлтэй тэнцүү байвал дэлгэц дээрх хүчдэлийн уналт болно гэж хэлдэг. Энэ бол дэлгэцийг шарахгүйгээр авах хамгийн их гүйдэл юм. Үүний үр дүнд сегментээс гаргаж авах хамгийн дээд тод байдал юм.

Тиймээс хамгийн их тод байдлыг олж авахын тулд дэлгэцийн хамт хамгийн бага эсэргүүцлийг цувралаар хийх шаардлагатай байгааг олж мэдэхийн тулд Ohm -ийн хууль ба Kirchoff -ийн давталтын дүрмийг ашиглая. Кирхофын дүрэмд хэлхээний хаалттай хүрдний эргэн тойрон дахь хүчдэлийн нийлбэр нь 0 -тэй тэнцүү гэж хэлдэг бөгөөд Ом -ийн хуулиар R эсэргүүцлийн эсэргүүцэл дэх хүчдэлийн уналт нь: 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 ом ашигладаг (энэ нь LED -ийн хувьд миний хувийн Goldilocks эсэргүүцэл юм)

Алхам 2: Ассемблейн код ба видео

Би угсрах код болон дэлгэцийн товчлуурын ажиллагааг харуулсан видеог хавсаргав. Таны харж байгаагаар бид дахин залгах товчлуурыг "r", флэш түлхүүрийг "F", одоор "А", хэш тэмдгийг "H" гэж дүрсэлсэн болно. Хэрэв та LCD дэлгэц эсвэл 4 оронтой дэлгэц дээр дугаар бичихийн тулд товчлуурыг үргэлжлүүлэн ашиглахыг хүсвэл backspace, enter, not-not гэх мэт янз бүрийн үйлдлүүдийг зураглаж болно. Энэ удаад би кодуудыг дараалан уншихгүй, учир нь энэ нь бидний өмнөх хичээл дээр хийсэн зүйлтэй маш төстэй юм. Ялгаа нь ихэвчлэн тасалдал, харах хүснэгт гэх мэт хэрхэн хийхийг мэддэг зүйлүүдээс илүү их зүйл юм. Та зүгээр л кодыг нэвтэрч, бидний нэмж оруулсан зүйлс, бидний өөрчилсөн зүйлсийг хараад тэндээс олж мэдэх хэрэгтэй. Бид 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 -р зүүг 5V -т холбож, дараа нь таны GND төмөр замаас сөрөг тугалга авч, бусад бүх тээглүүр рүү залгаад бүх сегментүүд харгалзах цифр дээр асаж байгааг харах болно (энэ нь үнэндээ хоёр дахь орон юм) зөв). Бүх 7 сегмент болон аравтын бутархайг гэрэлтүүлэхийн тулд авсан эсэхээ шалгаарай.

Нэг сегментийг гэрэлтүүлэхийн тулд GND утсаа нэг тээглүүр рүү залгаад энэ удаад резисторыг бусад 3 анод руу шилжүүлээд ижил сегмент нь бусад орон тус бүрт асаж байгааг олж хараарай.

Ер бусын зүйл байна уу?

Мэдээллийн хүснэгтэд хийсэн холболт буруу байна. Учир нь энэ нь 12 зүү, 4 оронтой дэлгэцийн мэдээллийн хуудас ба зүү юм. Өөрөөр хэлбэл бүдүүн гэдэс, аравтын бутархай цэггүй нэг. Захиалга өгөхдөө авсан дэлгэц бол 16 зүү, 4 оронтой дэлгэц юм. Үнэн хэрэгтээ миний хувьд сегмент анодууд 1, 2, 6, 8 -р зүү дээр байрладаг. Бүдүүн гэдэсний анод нь 4 -р зүү (катодын 12 -р зүү), дээд dp анод нь 10 -р зүү (катод нь 9 -р зүү) юм.

Дасгал 1: Эсэргүүцэл ба газардуулгын утсыг ашиглан аль зүү нь аль сегмент, аравтын бутархайтай тохирч байгааг олж мэдээрэй.

Сегментийн газрын зургийг кодчилох арга нь дээр дурдсан 7 оронтой нэг оронтой дэлгэцтэй адил юм-бид кодонд ямар нэгэн зүйлийг өөрчлөх шаардлагагүй, бидний хийдэг цорын ганц зүйл бол утаснуудын холболт юм. самбар дээр. Микроконтроллер дээрх зөв портын зүүг 4 оронтой дэлгэц дээрх харгалзах зүү рүү залгаарай, ингэснээр жишээлбэл, PB0 нь a сегментэд харгалзах зүү рүү, PB1 нь В сегмент рүү орно.

Ганц ялгаа нь бид одоо 5В төмөр зам руу явах боломжгүй тул анодод 4 нэмэлт зүү хэрэгтэй болно. Шүүсийг аль цифрээс авахаа шийдэхийн тулд бидэнд микроконтроллер хэрэгтэй.

Тиймээс бид 4 оронтой анодуудыг хянахын тулд PC1, PC2, PC3, PD4 -ийг ашиглах болно.

Та цаашаа явж, утсыг залгаарай. (анодын утсан дээрх 330 ом эсэргүүцлийг бүү мартаарай!)

Алхам 4: 4 оронтой дэлгэцийг кодлох

4 оронтой дэлгэцийг кодлох
4 оронтой дэлгэцийг кодлох

Энэ дэлгэцийг хэрхэн кодлохыг хүсч байгаагаа бодцгооё.

Хэрэглэгч товчлуур бүрийг дарахад товчлууруудыг дарж, тоонууд дэлгэц дээр дараалан гарч ирэхийг бид хүсч байна. Тиймээс хэрэв би 1 -ийг дараад 2 -ыг дарвал энэ нь 12 -р хэлбэрээр гарч ирнэ. Би мөн 12 -ийг дотоод хэрэглээнд хадгалахыг хүсч байна, гэхдээ бид үүнийг дараа нь авах болно. Одоогоор би таны товчлуурыг дарж харуулдаг шинэ макро бичихийг хүсч байна. Гэсэн хэдий ч, бид зөвхөн 4 оронтой тооноос бүрдсэн тул энэ нь зөвхөн дөрвөн тоог бичих боломжийг танд олгохыг хүсч байна.

Өөр нэг асуудал бол 4 оронтой олон талт дэлгэцийн ажиллах арга нь анодыг дугуйгаар эргүүлэх явдал бөгөөд ингэснээр цифр бүрийг хэдхэн секундын турш асаах бөгөөд дараа нь дараа нь дараагийнхыг харуулах болно. Үүнийг кодлох арга хэрэгтэй байна.

Дараагийн цифрийг бичихдээ "курсорыг" баруун тийш зай руу шилжүүлэхийг бид хүсч байна. Тиймээс, хэрэв би жишээ нь 1234 гэж бичихийг хүсч байвал 1-ийг бичсний дараа курсор шилжих бөгөөд ингэснээр миний бичсэн дараагийн орон нь дараагийн 7 сегментийн дэлгэц дээр гарч ирэх болно. Энэ бүх зүйл тохиолдож байхад би бичсэн зүйлээ харахыг хүсч байна, тиймээс тоонуудаар дугуй унаж, тэдгээрийг харуулах шаардлагатай хэвээр байна.

Өндөр захиалга шиг сонсогдож байна уу?

Байдал үнэндээ бүр муу байна. Бидэнд харуулахыг хүссэн 4 оронтой тоонуудын одоогийн утгыг хадгалахын тулд ашиглаж болох 4 өөр ерөнхий зориулалтын бүртгэл хэрэгтэй болно (хэрэв бид тэдгээрийг эргүүлэх гэж байгаа бол тэдгээрийг хаа нэг газар хадгалах ёстой), үүнтэй холбоотой асуудал бол бидэнд байгаа асуудал юм. галзуурсан гэх мэт ерөнхий зориулалтын бүртгэлийг ашиглаж байсан бөгөөд хэрэв бид анхаарахгүй бол бидэнд үлдэх зүйл байхгүй болно. Тиймээс энэ асуудлыг удалгүй шийдэж, стекийг ашиглан бүртгэлийг хэрхэн чөлөөлөх талаар зааж өгөх нь зүйтэй болов уу.

Эхлээд жаахан хялбарчилж, стекийг ашиглаж, зарим бүртгэлийг суллаж эхэлж, дараа нь 4 оронтой дэлгэц дээр тоонуудаа уншиж, харуулах үүргийг биелүүлэхийг хичээх болно.

Алхам 5: Попыг дарна уу

Түлхэх поп
Түлхэх поп

Бидэнд байгаа хэдхэн "Ерөнхий зориулалтын бүртгэлүүд" байдаг бөгөөд тэдгээрийг ашигласны дараа дахиж байхгүй болно. Тиймээс тэдгээрийг зөвхөн портууд болон SRAM -ээс унших, бичих, бусад програмуудад ашиглах шаардлагатай түр хадгалалт болгон ашигладаг хэд хэдэн хувьсагчдад ашиглах нь програмчлалын сайн практик юм. тэднийг нэрлэ. Миний хийсэн зүйл бол одоо бид стекийг эхлүүлж, ашиглаж сурч байгаа бол кодыг судалж, зөвхөн нэг дэд програм эсвэл тасалдал дотор ашигладаг ерөнхий зориулалтын бүртгэлүүдийг хайж олох явдал юм. тэдгээрийг манай нэг температурын бүртгэлээр дарж стек рүү түлхэж оруулна уу. Үнэн хэрэгтээ, хэрэв та жижиг микроконтроллеруудад зориулж бичсэн кодыг харвал эсвэл бүх чипүүд жижиг байсан үе рүүгээ буцвал бүх зүйлд ашиглах ёстой хэд хэдэн ерөнхий зориулалтын бүртгэлийг харах болно. Тэнд үнэ цэнээ хадгалаад ганцааранг нь үлдээгээрэй, учир нь танд өөр зүйлд бүртгэл хэрэгтэй болно. Тиймээс та кодын хаа сайгүй түлхэх, нээхийг харах болно. Магадгүй би өнгөрсөн үеийнхээ хүндэтгэлийг хүлээсэн ерөнхий зориулалтын ерөнхий бүртгэлийн AX ба BX гэж нэрлэх ёстой байсан юм болов уу.

Жишээ нь үүнийг илүү тодорхой болгоход тусална.

ADC_int аналогийг дижитал руу хөрвүүлэх бүрэн тасалдалд бид ADCH -ийн утгыг ачаалж, товчлуурыг дарж хөрвүүлэх хүснэгтийг харьцуулахын тулд ашигладаг buttonH нэртэй ерөнхий зориулалтын бүртгэлийг ашигладаг болохыг анхаарна уу. Бид энэ buttonH бүртгэлийг зөвхөн ADC_int дэд програм дотор ашигладаг бөгөөд өөр хаана ч байхгүй. Тиймээс үүний оронд бид түр зуурын хувьсагч болгон ашиглаж буй temp2 хувьсагчаа ямар ч дэд програмд ашиглах боломжтой бөгөөд түүний утга нь энэ дэд програмаас гадуур юу ч нөлөөлөхгүй (өөрөөр хэлбэл бидний ADC_int -д өгсөн утга хаана ч ашиглагдахгүй. өөр).

Өөр нэг жишээ бол бидний хойшлуулсан макро юм. Бидэнд "миллисекунд" гэж нэрлэсэн бүртгэл байгаа бөгөөд энэ нь миллисекундээр хоцрох хугацааг агуулдаг. Энэ тохиолдолд энэ нь макро хэлбэртэй байгаа бөгөөд угсрагч нь макро кодыг бүхэлд нь програмын нэр дээр байрлуулдаг болохыг бид санаж байна. Энэ тохиолдолд бид "миллисекунд" хувьсагчийг арилгаж, түүнийгээ түр зуурын хувьсагчуудын нэгээр солихыг хүсч байна. Энэ тохиолдолд би хувьсагчийн утга өөр газар хэрэгтэй байсан ч гэсэн үүнийг стек ашиглан хэрхэн ашиглаж болохыг харуулахын тулд үүнийг арай өөрөөр хийх болно. Тиймээс миллисекундын оронд бид "temp" -ийг ашигладаг бөгөөд температурын утгыг ашигладаг бусад зүйлийг хоослохгүйн тулд бид "саатал" макрог стек рүү "түлхэх" замаар эхлүүлж, дараа нь ашигладаг. миллисекундын оронд, дараа нь макрогийн төгсгөлд бид өмнөх утгыг стекээс буцааж "харуулдаг".

Цэвэр үр дүн нь бид түр зуурын хэрэгцээнд зориулан temp and 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 өгөөжийн оронтой тоог нэмэгдүүлэх; мөн adiw ZH -ийг буцаана: ZL, 1; Z rjmp тохиргоог нэмэгдүүлэх; ба буцах дээд рүү буцах: pop temp2; temp 2 поп температурыг сэргээх; temp reti сэргээх

Стекийн ажиллах арга нь эхний асаах сүүлчийн унтраалга гэдгийг анхаарна уу. Яг л овоолсон цаас шиг. Эхний хоёр мөрөнд бид temp -ийн утгыг стек рүү түлхэж, дараа нь temp2 -ийг стек дээр дарж, дараа нь тэдгээрийг дэд програмд өөр зүйлд ашиглаж, эцэст нь өмнөх утга руу нь буцааж сэргээдэг болохыг та харж байна. эхлээд pop2 temp2 унтраана (сүүлчийнх нь түлхэгдсэн тул стекийн дээд талд байгаа бөгөөд бид буцааж унтраадаг анхных байх болно), дараа нь температур гарч ирнэ.

Тиймээс одооноос бид энэ аргыг үргэлж ашиглах болно. Темпер хувьсагчаас өөр зүйлд бүртгэл хийх цорын ганц хугацаа бол бидэнд хаа сайгүй хэрэгтэй байх болно. Жишээлбэл, "халих" гэж нэрлэгддэг бүртгэл бол бидний програмын хэд хэдэн өөр газарт ашигладаг бүртгэл бөгөөд үүнийг нэрлэхийг хүсч байна. Мэдээжийн хэрэг, бид үүнийг temp болон temp2 дээр хийж байсан шигээ ашиглаж болно, учир нь дууссаны дараа түүний үнэ цэнийг сэргээх болно. Гэхдээ энэ нь аливаа зүйлийг хэт их спагетифик хийх болно. Тэд ямар нэг шалтгаанаар нэрлэгдсэн бөгөөд бидэнд энэ ажилд зориулагдсан temp and 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 унтарсан үед гаралт өндөр болж, 5V дохио INT0 зүү рүүгээ орох бөгөөд энэ нь тасалдал үүсгэх болно гэдгийг бид харж байна.

Энд цэвэр үр дүн нь юу болохыг анхаарч үзээрэй. Хэрэв бид 1 товчлуурыг дарвал ADC0 руу гарах гарцыг мэдэгдэхүйц өөрчлөхгүйгээр 5V PD4 рүү шилжих болно, хамгийн чухал нь бид од, 0, хэш, эсвэл дахин залгах товчлуурыг дарсан ч гэсэн 5V дохиог INT0 руу дамжуулах болно. тасалдал үүсгэж байна! Хэрэв бид товчлуурын гаралтаас INT0 зүү рүү шууд очсон бол эдгээр түлхүүрүүд бараг хүчдэл үүсгэдэггүй бөгөөд энэ нь таслах зүүг ажиллуулахад хангалтгүй болно. Манай хүчдэлийн өсгөгч энэ асуудлыг шийдсэн.

Алхам 7: 4 оронтой дэлгэцийн код ба видео

Энэ бол 9 -р хичээлд зориулагдсан болно! Би код болон үйлдлийг харуулсан видеог хавсаргав.

Энэ нь бид аналог товчлуурыг хамгийн сүүлд ашиглах болно (Бурханд талархъя). Ашиглахад хэцүү байсан ч аналоги-тоон хэлбэрт шилжүүлэх, аналог порт, тасалдал, мультиплекс, дуу чимээний шүүлтүүр, хүчдэлийн өсгөгч, хайлтын хүснэгтээс таймер/тоолуур хүртэл угсрах кодчиллын олон талын талаар сурахад бидэнд туслах нь маш хэрэгтэй байсан. гэх мэт. Тиймээс л бид үүнийг ашиглахаар шийдсэн. (дээрээс нь юм хог хаях нь хөгжилтэй байдаг).

Одоо бид харилцаа холбоог дахин судалж, 7 сегмент ба 4 оронтой дэлгэцээ шооны өнхрүүлгээс манай регистр анализатортой ижил аргаар уншиж өгөх болно. Энэ удаад бид морзын кодын хакердах аргыг бус харин хоёр утастай интерфэйсийг ашиглах болно.

Харилцаа холбоо ажиллаж, өнхрүүлгийг дэлгэц дээр харуулсны дараа бид эцсийн бүтээгдэхүүнийхээ эхний хэсгийг хийж чадна. Бүх аналог порт байхгүй бол бидний код мэдэгдэхүйц богиносох бөгөөд уншихад хялбар болно гэдгийг та анзаарах болно.

Амбицтай хүмүүсийн хувьд. Хэрэв та эдгээр бүх зааварчилгааг өнөөг хүртэл даван туулсан бол танд яг одоо хийх мэдлэг байгаа эсэхийг туршиж үзэх "төсөл" энд байна:

Төсөл: Тооцоологч хий! Манай 4 оронтой дэлгэц болон товчлуурыг ашиглаад "enter" товчлуур шиг ажиллах гадаад товчлуурыг нэмнэ үү. Оддыг "цагууд", дахин залгах тоог "нэмэх", флэшийг "хасах" болгон хувааж, бүх инженерүүдэд байсан хуучин HP "урвуу өнгөлөх" тооны машинуудын нэгэн адил ажилладаг тооны машиныг бичнэ үү. тэр өдөртөө. Өөрөөр хэлбэл Тэдний ажиллах арга бол та дугаар оруулаад "enter" дарна уу. Энэ нь тухайн дугаарыг стек рүү түлхэж, дараа нь та хоёр дахь дугаарыг оруулаад "enter" товчлуурыг дарахад хоёр дахь дугаарыг стек рүү түлхдэг. Эцэст нь та X, /, + эсвэл - гэх мэт үйлдлүүдийн аль нэгийг дарахад энэ үйлдлийг стек дээрх хамгийн дээд хоёр тоонд хэрэглэж, үр дүнг харуулаад үр дүнг стек рүү түлхэх бөгөөд ингэснээр та үүнийг дахин ашиглах боломжтой болно. гэх мэт. Жишээлбэл, 2+3 нэмэхийн тулд та дараах зүйлийг хийх ёстой: 2, "enter", 3, "enter", "+", дараа нь дэлгэц 5. Унших болно. Та стек, дэлгэц, товчлуурыг хэрхэн ашиглахаа мэддэг. дэвсгэр кодын ихэнх хэсгийг аль хэдийн бичсэн байна. Тооцоологчдод оруулах түлхүүр болон дэд програмыг нэмэхэд л хангалттай. Энэ нь таны бодож байгаагаас арай илүү төвөгтэй боловч хөгжилтэй, хийх боломжтой юм.

Дараа уулзая!

Зөвлөмж болгож буй: