256 товчлуурыг микроконтроллерт хэрхэн холбох вэ. Гадаад төхөөрөмжийг микроконтроллерт хэрхэн найдвартай холбох вэ? Бага чадлын LED-г холбож байна

Бид Proteus програмын хэлхээг дуурайж, LED-ийг анивчуулж, виртуал микроконтроллероо хэрхэн гэрэлтүүлэх талаар сурсан. Уншигчдын олонх нь "MK-д холбогдсон товчлуурыг ашиглан LED-ийг анивчуулах боломжтой юу?" гэсэн бодол төрсөн нь лавтай.

Тийм ээ, мэдээжийн хэрэг боломжтой. Энэ нь нэлээд амархан хэрэгждэг. Түүнээс гадна товчлуурыг бэхэлгээтэй болон бэхэлгээгүйгээр дуурайх боломжтой. Түүнчлэн, Proteus програм дээр та ижил товчлуурын макро ашиглан хоёр төрлийн товчлуурыг ашиглаж болно. Ямар тохиолдолд энэ нь ашигтай байж болох вэ? Жишээлбэл, бид төхөөрөмжийн ажиллагааны горимуудыг сонгох хэрэгтэй. Үүнийг микроконтроллер ашиглан хэрхэн хэрэгжүүлэх талаар нарийвчлан авч үзээд Proteus программ дээр дууриацгаая.


Бидэнд үнэхээр хоёр горимын сонголт байгаа гэдгийг нүдээр харуулахын тулд нэг товчлуурын удирдлагатай 4 LED дээр энгийн хэлхээг угсарна. Эхний хувилбарт бид эхнийхээс дөрөв дэх LED хүртэл ээлжлэн асдаг. Хоёрдахь хувилбарт ижил зүйл, гэхдээ урвуу дарааллаар, өөрөөр хэлбэл дөрөв дэхээс эхнийх хүртэл. Миний тодруулахыг хүссэн цорын ганц зүйл бол эффект эхлэхийн өмнөхөн манай товчлуурыг дарах эсвэл суллахын тулд санал асуулга явуулдаг. Эффект нь ажлаа дуусгах хүртэл програм нь товчлуурыг дарах эсвэл суллахад хариу өгөхгүй.

Тиймээс бизнес рүү. Proteus програм дээр бидний схем иймэрхүү харагдаж байна (томруулахын тулд дарна уу):

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

Бид аль хэдийн ярилцсанчлан "Терминал" таб дээр цахилгаан авч, газарддаг. Тэдгээрийг бид Хүч ба Газар гэж тус тус тэмдэглэсэн.

Бид хэлхээний тэжээлийн хангамжийг өндрөөр нь хуваах шугамаар гурвалжингаар тэмдэглэнэ. Ойролцоох зураг дээр товчлуурын тэмдэглэгээг харуулав. Товчлуурын баруун талд бид хоёр толгойтой сумтай дүүргэсэн улаан тойрог харагдаж байна. Хэрэв та эмуляц хийх явцад үүн дээр дарвал товчлуурыг засч, байнга дарах болно. Үүнийг дахин дарсны дараа бэхэлгээг арилгана.


Ашиглахын өмнө бид номын сангийн товчлуурыг бусад дэлгэрэнгүй мэдээлэлтэй адил сонгох хэрэгтэй. Үүнийг хийхийн тулд "Маск" талбарт "гэхдээ" гэсэн үгийг бичнэ үү. Дараа нь "Үр дүн" талбарт "ТОВЧЛОЛУУД" гэсэн үг:


Үүний дараа товчлуур нь төсөлд ашигласан сонгосон хэсгүүдийн хамт бидний жагсаалтад гарч ирнэ.

Төсөлд бид ямар портуудыг ашигладаг вэ. Зураг дээр бид RA0, PB0, PB1, PB2, PB3 портуудаас гарах шугамуудыг харж байна. Бид В порттой холбогдсон LED, А порттой товчлууртай.

Тиймээс, дарагдсан үед бид +5 вольтыг PA0 порт болон резисторын дээд терминал руу холбосон хэлхээг хаадаг. Бидэнд яагаад резистор байдаг юм бэ? Баримт нь товчлуурын хэлхээг хаах ёстой. Бид резисторыг суулгасны дараа гүйдэл нь цахилгаан тэжээлийн нэмэлтээс товчлуур, резистор болон цааш газар руу урсдаг.

Эсэргүүцлийн утга нь 200 Ом-той тэнцүү байхад хангалттай. Тиймээс бид товчлуурыг дарснаар PA0 портыг +5 вольтын тэжээлд холбодог бөгөөд хэрэв бид PA0 пин дээр хүчдэл авах эсэх талаар санал асуулга хийвэл бид програмынхаа гүйцэтгэлд нөлөөлж чадна.

Манай програмын тексттэй дэлгэцийн агшинг би доор өгөв.


Тиймээс өмнөх төслөөс ялгаатай нь бид RA портын бүх 8 зүүг оролтод тохируулж, PB0 - PB3 портын зүүг гаралт руу, PB4 - PB7 оролтыг тохируулдаг.


Дараа нь бид програмдаа нөхцөл шалгах аргыг ашигладаг.хэрэв"


Тиймээс бид "хэрэв" гэсэн мөрний дараа, хаалтанд гүйцэтгэх нөхцөлийг харж байна. Хэрэв бид PA0 порт дээр логик тэг буюу тэг вольттой бол доорх кодыг гүйцэтгэнэ. Хаалтанд байгаа энэ текст нь портын битийн шилжилт юм. Бид дараах нийтлэлүүдийн аль нэгэнд дүн шинжилгээ хийх болно, гэхдээ одоохондоо үүнийг хийснээр бид товчлуурыг шалгаж байна гэдэгт итгэхэд хангалттай. шахах. Дараа нь буржгар хаалтанд тухайн нөхцөл үнэн бол хэрэгждэг програмын текст байна. Нөхцөл буруу байвал программыг үргэлжлүүлэн ажиллуулж, буржгар хаалтанд бичсэн текстийг алгасах болно.

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

Мөн "sishnik" файл, HEX болон Proteus файлууд байрладаг.

Мөн энд видео байна

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

Нэгдүгээр арга - уламжлалт

зураг1а зураг1б

Хэрэв цөөн тооны товчлуур байгаа бөгөөд бичил тээглүүр дутагдалтай байвал бид уламжлалт холболтын аргыг ашигладаг.

Товчлуурыг суллахад резистороор дамжуулан микроны гаралт нь тэжээлийн тэжээлийн "нэмэх" хэсэгт холбогддог (Зураг 1a). Товчлуурыг дарахад микро гаралт газартай холбогдоно. R1 татах резистор нь шилжүүлэгчийн хэлхээний гүйдлийг хязгаарладаг. Хэрэв энэ нь байхгүй байсан бол товчлуурыг дарахад бид зүгээр л цахилгааны эх үүсвэрээ богино холболт хийх болно.

Ихэнх орчин үеийн микроконтроллерууд нь суурилуулсан татах резисторуудтай байдаг тул гадны резисторуудыг орхигдуулж болно (Зураг 1b). Микроконтроллерийн програмд ​​та ашигласан зүүг оролтод тохируулах, дотоод татах резисторыг идэвхжүүлэх шаардлагатай болно.

Микроконтроллерийн зүү гаралтын горимд байвал яах вэ? Энэ нь тухайн зүүний төлөв байдлаас хамаарна. Хэрэв гаралт нь "логик тэг" бол муу зүйл тохиолдохгүй, учир нь - эхний тохиолдолд (Зураг 1а) ирж буй гүйдлийн хэмжээ R1 резистороор хязгаарлагддаг бөгөөд хоёр дахь тохиолдолд (Зураг 1б) гүйдэл гарахгүй. бүх. Товчлуурыг дарахад юу ч болохгүй, учир нь энэ тохиолдолд гаралт ба "газар" хоёрын хоорондох боломжит зөрүү тэгтэй тэнцүү байх болно.

Хэрэв гаралт дээр "логик нэгж" байгаа бөгөөд товчлуурыг дарвал микроконтроллерийн гаралтаар хэдэн арван миллиамперийн гүйдэл газар руу урсаж, портын гаралт "шатаж" болно. Баримт бичгийн дагуу AVR микроконтроллерийн гаралтын хамгийн их зөвшөөрөгдөх гүйдэл нь 40 мА байна. Тиймээс заримдаа MK гаралт ба товчлуурын хооронд хэдэн зуун Ом-ын нэрлэсэн утгатай резистор, жишээлбэл 330 (Зураг 1в) тавих нь газаргүй биш юм. Жишээлбэл, STK500 дибаг хийх самбар дээрх товчлуурууд холбогдсон байна. Энэ нь хэрэглэгч туршилтын явцад микроконтроллерыг санамсаргүйгээр шатаахгүйн тулд хийгддэг.

Гэхдээ та энэ резисторгүйгээр хийж болно.

Хоёр дахь арга - диод ашиглах

Энэ нь хоёроос олон товчлуур байгаа үед хэрэглэгддэг бөгөөд та дүгнэлтээ хадгалахыг хүсч байна. Энэ тохиолдолд товчлуур бүр өөрийн гэсэн дижитал кодтой бөгөөд N тээглүүр дээр ийм байдлаар өлгөх товчлуурын тоо mk = 2 N - 1. Өөрөөр хэлбэл 7 товчлуурыг гурван зүү дээр, 15 товчлуурыг дөрвөн зүү дээр өлгөх боломжтой. , гэх мэт ... гэхдээ би 7-оос илүү өлгөхгүй. Нэмэлт гадаад бүрэлдэхүүн хэсгүүдийн тоо нэмэгдэж, микрокомпьютерийн схем, програм улам төвөгтэй болж байна. Нэмж дурдахад олон тооны товчлууруудын хувьд бусад шилжих схемүүд байдаг. Татах резисторыг диаграммд харуулаагүй бөгөөд дотоод резисторыг ашигладаг гэж үздэг.

Дашрамд хэлэхэд диодоор дамжуулан товчлууруудаас гадна хянагчийн тасалдлын гаралт руу дохио илгээх боломжтой хэвээр байна (Зураг 3). Аливаа товчлуурыг дарах үед диодоор дамжих гадаад тасалдлын гаралт нь газардуулгатай холбогдож, тасалдал үүсгэдэг (мэдээж үүнийг тохируулж, идэвхжүүлсэн тохиолдолд). Тиймээс хянагч товчлууруудыг байнга санал асуулга хийх шаардлагагүй бөгөөд энэ процедурыг зөвхөн гадны тасалдлын үйл явдлаар өдөөх болно.

Энэ схем нь бүх AVR микроконтроллеруудад хамаарахгүй, учир нь микроконтроллерын зарим загварт ямар ч зүү дээрх аливаа өөрчлөлтөд гадны тасалдал үүсч болно. (жишээ нь ATmega164P дээр)

Гурав дахь арга нь матрицын гар юм

Энэ холболтын сонголтыг ихэвчлэн матрицын хэлхээнд бүтцийн хувьд нэгтгэж, цахилгаанаар холбосон хэд хэдэн товчлуурын блокуудад ашигладаг. Гэхдээ энгийн товчлууруудыг асаахад энэ схемийг ашиглахыг хэн ч хориглодоггүй, гэхдээ товчлуурын тоогоор бодит хэмнэлт өгдөг үү? есөн.

PC0, PC1, PC2, PC3 гаралт нь матрицын мөр, PB0, PB1, PB2 гаралт нь матрицын багана юм. Товчлуурыг мөр болон баганаар санал асуулга явуулж болно. Бид тэдгээрийг багана тус бүрээр нь асууж байна гэж бодъё. Санал хураах үйл явц дараах байдалтай байна. Бүх тээглүүрүүдийн анхны төлөв нь татах резистор асаалттай оролт юм. PB0 зүүг гаралтын горимд тохируулж, тэг болгож тохируулна уу. Одоо S1, S2, S3, S4 товчлууруудыг дарснаар PC0, PC1, PC2, PC3 гаралтыг 0 болгож хаах болно. Бид эдгээр дүгнэлтийг шалгаж, ямар нэгэн товчлуур дарагдсан эсэхийг тодорхойлно Энэ мөч. PB0 зүүг гаралтын горимд тохируулж, татах резисторыг асаана уу. PB1 гаралтыг гаралтын горимд тохируулж, тэг болгож тохируулна уу. Дахин хэлэхэд бид PC0, PC1, PC2, PC3 дүгнэлтүүдийг шалгадаг. Одоо S5, S6, S7, S8 товчлууруудыг дарснаар PC0, PC1, PC2, PC3 гаралт хаагдана. Бид товчлууруудын сүүлчийн баганыг ижил аргаар байцаадаг.

Матрицын мөрүүдийг диодоор дамжуулж гадны тасалдлын гаралт руу хөтөлж болно. Тэгвэл программын логикийг ингэж барьж болно. Хэрэв гарыг хэдэн минутын турш ашиглахгүй бол микроконтроллер бага чадлын горимд ордог. Энэ тохиолдолд PB0, PB1, PB2 гаралтыг тэг логик түвшинтэй гаралт болгон тохируулна. Товчлууруудын аль нэгийг дарахад диодын тасалдлын гаралт тэг хүртэл хаагдана. Энэ нь гадаад тасалдлыг өдөөж, микроконтроллер сэрж, гарыг сканнердах таймерыг эхлүүлнэ. Үүний зэрэгцээ аль нэг товчлуурыг дарах үед цагийн тоолуур ажиллаж эхэлдэг. Энэ нь халимагц микроконтроллер дахин бага чадлын горимд шилждэг.

Эхний хичээлээр бид микроконтроллерийн хөлөөр хүчдэлийг хэрхэн хангах талаар сурсан. Одоо та микроконтроллерыг анивчихгүйгээр хэрхэн удирдах талаар сурах хэрэгтэй.

Энэ яагаад хэрэгтэй вэ? Жишээлбэл, та микроконтроллер дээр цаг хийсэн, та цагийг тохируулах хэрэгтэй, гэхдээ цаг буруу эргэх бүрт дахин асаах нь маш эвгүй байдаг. Товчлуурыг ашиглах нь илүү тохиромжтой, жишээлбэл, нэг цаг, өөр минут өөрчлөх.

Эхний хичээл дээр бид хөлийг гаралт болгон тохируулсан гэдгийг санаарай. бид түүнд эрч хүч өгч чадна. Тиймээс хөлийг оролт болгон тохируулж болно. Энэ горимд та үүн дээр хүчдэл байгаа эсэхийг шалгаж болно.

Жишээ нь: төслийн шидтэнг ашиглан төсөл үүсгэх. Бид эхний хөлийг гарц, хоёр дахь хөлийг орц болгон тавьсан. Төслийн шидтэнг үүсгэхдээ бид PB1 хөл нь оролт байх болно гэдгийг харуулж, үүн дээр татах резисторыг асаана, үүнийг дараах байдлаар хэрэгжүүлнэ.

Төслийг үүсгэсний дараа кодыг энэ хэлбэрт оруулъя:

#оруулна #оруулна хүчингүй гол(void ) ( PORTB= 0x02 ; DDRB= 0x01 ; while (1 ) ( if (PINB.1== 0 ) ( PORTB.0= 1 ; delay_ms(100 ) ; PORTB.0= 0 ; delay_ms(100) ;))) ;)

#оруулна #оруулна хүчингүй гол(void) ( PORTB=0x02; DDRB=0x01; while (1) ( if(PINB.1==0) ( PORTB.0=1; delay_ms(100); PORTB.0=0; delay_ms(100) ;))))

Бидний харж байгаагаар портын тохиргоо эхний хичээлтэй харьцуулахад өөрчлөгдсөн байна.

хэрэв(PINB.1==0) ()

Энэ мөрийг дараах байдлаар унших ёстой - хэрэв газар B портын 1-р зүү (0 боломжит) руу холбогдсон бол буржгар хаалтанд кодыг гүйцэтгэнэ. Бидний жишээнд энэ бол эхний хичээлийн код юм. Хэрэв товчлуур хаагдахгүй бол юу ч хийхгүй. Та Proteuse дээр загварчилж болно.

Товчлуурын оронд та LED-ийн оронд мэдрэгч, реле гэх мэтийг байрлуулж болно - дохиолол, дохиолол.

Програм хангамж болон proteus файл бүхий архив боломжтой

Шинэчлэлт 1: Та яагаад порт татах хэрэгтэй байна вэ?
MK оролт нь их хэмжээний эсэргүүцэлтэй байдаг, тэр ч байтугай хөндлөнгийн урсгалаас үүдэлтэй микро гүйдэл ч гэсэн Ohm-ийн хуулийн дагуу U \u003d R * I, энэ нь оролт дээр лог 1 гарч ирэхэд хүргэдэг. AVR микроконтроллеруудад ийм асуудал гарахаас зайлсхийхийн тулд , та хөлийг татах резистороор дамжуулан нэмэлт тэжээлд холбож болно. Энэ тохиолдолд, тэр ч байтугай, ажлын логик нь эсрэгээрээ өөрчлөгддөг, гэхдээ хэрэв хөндлөнгийн оролцоо гарч ирвэл энэ нь бидэнд хамаагүй, учир нь бид оролтод аль хэдийн логик нэгжтэй болсон.

Яагаад резистороор холбогддог вэ? Бид эерэг оролтыг резисторгүйгээр шууд холбосон гэж бодъё. Товчлуур асаахад оролтыг газардуулах тул оролт дээр + болон газрын хооронд богино зай үүснэ. Хэрэв резистор байгаа бол товчлуурыг нэг талдаа хаах үед энэ нь +-тэй холбогдсон хэвээр байх бөгөөд нөгөө талд нь товчлуураас газар гарч ирнэ. Эсэргүүцлээр гүйдэл гүйх боловч түүний утга нь тийм ч их биш байх болно.

Шинэчлэлт 2: Хичээлийн материалыг хэр сайн сурснаа шалгах тест нэмэгдлээ

Энэ кинонд Flash Player 9 шаардлагатай

Микроконтроллерийн программыг мэргэжлийн хөгжүүлэгч болж, өндөр цалинтай ажилд ороход хялбар болгох ур чадварын түвшинд хүрэхийн тулд юу шаардлагатай вэ (ОХУ-д 2017 оны эхэнд микроконтроллерийн програмистын дундаж цалин 80,000 рубль). ...

Би микроконтроллерийн оролтод дискрет дохиог хэрхэн ашиглах талаар ярьсан. Энэ арга нь бүрэн ажиллагаатай бөгөөд жишээлбэл, транзистор эсвэл өөр микроконтроллерийг дохионы эх үүсвэр болгон ашигладаг бол зорилгоо бүрэн биелүүлэх болно.

Гэсэн хэдий ч, хэрэв та микроконтроллерийн оролт руу товчлуур эсвэл реле контактыг ийм байдлаар холбовол төхөөрөмжийн эвдрэл, янз бүрийн доголдол зэрэг гэнэтийн үр дагавар таныг хүлээж магадгүй юм. Мөн эдгээр үр нөлөө нь иймэрхүү үзэгдлээс үүдэлтэй байх болно холбоо барих үсрэлт.

Энэ нийтлэлд би микроконтроллерт холбогдсон контактуудын уналтыг хэрхэн арилгах талаар ярих болно. Гэхдээ эхлээд (энэ хэллэгийг анх удаа сонсож байгаа хүмүүсийн хувьд) би энэ холбоо барих нь юу болохыг шууд хэлэх болно.


Харилцаа холбоо барих эсвэл нээх үед контактын үсрэлт үүсдэг. Зураг луу хар:

Харилцагч эхэндээ нээлттэй байна.

Бид контактыг хааж эхлэхэд (товчлуур дээр дар) хаагдах нь нэн даруй тохиолддоггүй.

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

Хэрэв бид энэ товчлуураар гэрлийн чийдэнг асаавал энэ түр зуурын үйл явцыг анзаарахгүй байх болно. Товчлуурыг дарсны дараа гэрлийн чийдэн нэн даруй ассан юм шиг бидэнд санагдах болно.

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

Нэг товчлуур дарах нь микроконтроллерийн оролтыг нэг удаа солих болно гэж бид найдаж байна. Гэвч үнэндээ тийм биш. Учир нь холбоо барих нь инженерүүдийн амьдралын нарийн төвөгтэй байдалд хувь нэмэр оруулдаг.

Бидний товчлуурууд нь утасны гар гэж төсөөлөөд үз дээ. Бид 8 дугаарыг дарах нь энэ дугаарыг утсаар нэг удаа залгах болно гэсэн үг юм. Гэвч утасны хөгжүүлэгчид холбоо барихаас хамгаалах гэж санаа зовоогүй тул утас 5 эсвэл 10 наймыг залгадаг. Та энэ утсыг ашиглах уу?

Эцэст нь хэлэхэд, холбоо барих хугацаа нь контактуудын чанараас хамаардаг бөгөөд ихэвчлэн 10-100 мс хооронд хэлбэлздэг.

Холбоо барих үсрэхийг арилгах

Хэрэв таны микроконтроллерын оролтод механик контактууд холбогдсон бол таны төхөөрөмж ямар нэгэн байдлаар контактын уналттай ажиллах ёстой гэдгийг тайлбарлах шаардлагагүй гэж би бодож байна.

Холбоо барих довтолгоотой тэмцэх хоёр арга бий:

  1. Техник хангамж
  2. Програм

Техник хангамжийн уналтыг дарах

Техник хангамжийн яриаг дарах нь энэхүү таагүй нөлөөг арилгах боломжийг олгодог хэлхээний шийдэл юм. Ихэнхдээ энэ нь энгийн RC хэлхээ эсвэл ерөнхийдөө зөвхөн нэг конденсатор юм.

Ийм хэлхээний үйл ажиллагааны зарчим нь энгийн: конденсаторыг цэнэглэхэд (эсвэл цэнэггүй) хэсэг хугацаа шаардагдана. Энэ хооронд бүрэн цэнэглэгдээгүй, хүссэн дохиог микроконтроллерийн оролтод хүлээн авахгүй. Энэ хугацаа нь шилжилтийн үйл явцыг дуусгахад хангалттай. Тиймээс яриа дарах ажлыг гүйцэтгэдэг.

Холбоо барих уналтыг арилгах энгийн схемийг зурагт үзүүлэв.

Элементийн утгууд нь ойролцоо байна. Онолын хувьд тэдгээрийг тохиолдол бүрт тооцох ёстой. Гэхдээ ихэнх тохиолдолд тэд зүгээр байдаг.

Тооцоолол шаарддаггүй контактыг дарах илүү төвөгтэй схемүүд байдаг, учир нь тэдгээрийг дижитал элементүүд дээр гүйцэтгэдэг. Жишээлбэл, RS флип-флоп дээрх хэлхээ. Гэхдээ микроконтроллер дээр суурилсан төхөөрөмжүүдэд ийм заль мэхийг ашиглах нь утгагүй юм.

Програм хангамжийн холбоо барих уналтыг дарах

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

Микроконтроллер дээр суурилсан төхөөрөмжид техник хангамжийг устгах нь маш ховор тохиолдолд л утга учиртай байдаг. Жишээлбэл, хэрэв микроконтроллер нь бага чадалтай, тэр ч байтугай үндсэн ажилд зарцуулагдахгүй бол нөөцөө өчүүхэн ч гэсэн зарцуулах нь зохисгүй юм.

Хамгийн энгийн бөгөөд нийтлэг програм хангамжийн шийдэлчалчаатай тэмцэх - энэ бол цаг хугацааны хоцрогдол юм. Алгоритм нь энгийн:

  1. Оролтын дохионы түвшин эсрэгээрээ өөрчлөгдөхөд бид таймерыг асаана (жишээлбэл, 100 миллисекунд).
  2. Саатал дууссаны дараа бид дохиог шалгана. Хэрэв энэ нь өөрчлөгдсөн хэвээр байвал товчлуур дарагдсан (эсвэл ямар дохионы өөрчлөлт илэрсэнээс хамаарч суллагдсан) гэж үзнэ. Хэрэв энэ нь анхны төлөвтөө буцаж ирсэн бол бид үүнийг саад тотгор гэж үзэж, дохионд хариу өгөхгүй.

Хурдан зүү солих нь системийн хэвийн байдал болох онцгой тохиолдол байдаг. Жишээлбэл, үйлдлийн логикийн дагуу удаан хугацааны туршид тогтмол утгыг авч чадахгүй ямар нэгэн мэдрэгч байгаа бол. Өөрөөр хэлбэл, харилцаа холбоо тасрахгүй байх шиг байна. Мөн энэ төгсгөлгүй урсгалд бид ямар төрлийн дохио оролт болохыг тодорхойлох хэрэгтэй.

Энэ тохиолдолд дараах алгоритмыг ашиглаж болно.

  1. Нэгж цаг тутамд (жишээлбэл, секундэд) контактын хаалттай ба нээлттэй төлөвийн тоо ба / эсвэл үргэлжлэх хугацааг тооцоол.
  2. Дохионы эцсийн төлөвийг хамгийн их хэмжээгээр (эсвэл цаг хугацаагаар) тодорхойлно.

Жишээлбэл, хэрэв бид секундын дотор оролтод логик 1 50 удаа, логик 0 20 удаа байсан бол оролт нь нэг байна гэж үзэж болно. Мэдээжийн хэрэг, энд даалгавраас хамааран хувь хүний ​​хандлага хэрэгтэй.

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


Өмнөх хичээлүүдэд микроконтроллероос мэдээлэл гаргах аргуудыг хийсэн: LED ба LCD индикаторыг холбох. Гэхдээ микроконтроллер руу хэрхэн мэдээлэл оруулах вэ? Үүнд зориулсан олон сонголт, төхөөрөмж байдаг. Гэхдээ одоохондоо хамгийн энгийн сонголтыг авч үзье, энэ бол ердийн товчлуур юм. Товчнууд нь цаг ба засах гэсэн хоёр төрөлтэй. Такт товчлуурууд нь энэ зарчмын дагуу ажилладаг: дарагдсан - контактууд хаагдсан, суллагдсан - контактууд нээгдсэн. Эхэндээ хаалттай, дарагдсан үед нээгддэг тактик товчлуурууд байдаг гэдгийг тэмдэглэх нь зүйтэй. Түгжих товчлуурууд (тэдгээрийг заримдаа: солих унтраалга, унтраалга, унтраалга гэж нэрлэдэг) цагны товчлууруудаас ялгаатай нь дарагдсан үед байрлалаа засдаг, өөрөөр хэлбэл: дарагдсан - контактууд хаагдсан, дахин дарагдсан - контактууд нээгддэг. Ерөнхийдөө бид товчлууруудыг олж мэдсэн, одоо эдгээр товчлууруудыг микроконтроллерт хэрхэн холбохыг олж мэдэх болно. Мөн холбогдоход үнэхээр амархан! Диаграмыг харцгаая:

Та асууж магадгүй: Яагаад резистор R1 гэж? Дараа нь R1 резисторгүйгээр S1 товчлуур нээлттэй байх үед энэ бүхэн холбогдсон порт дээрх микроконтроллер нь логик 1 эсвэл логик 0-ийг харах бөгөөд ингэснээр товчлуурыг худал өдөөх болно. Үүнээс урьдчилан сэргийлэхийн тулд нэмэлт тэжээлд тэсвэртэй энэ портыг "дээш татах" шаардлагатай. R1 резисторын эсэргүүцэл нь 4.7 кОм-оос 10 кОм хүртэл байж болно. Эсэргүүцлийн тусламжтайгаар дараах зургийг олж авна: S1 товчлуур дарагдсан - MK порт дээр логик 0 гарч ирнэ, S1 товчлуур дарагдаагүй - R1 эсэргүүцлийн улмаас MK порт дээр логик 1 гарч ирнэ. Мэдээжийн хэрэг, зарим AVR микроконтроллерууд нь 50 кОм-ийн дарааллаар суурилуулсан татах резисторуудтай гэдгийг мэдэх хэрэгтэй бөгөөд тэдгээр нь анхдагч байдлаар идэвхгүй болно. BASCOM-AVR-д эдгээр резисторуудыг шаардлагатай порт руу логик 1 бичих замаар асааж болно.Гэхдээ би эдгээр суурилагдсаныг ашиглахыг зөвлөдөггүй, дээрх диаграммд үзүүлсэн шиг гаднахыг ашиглах нь илүү найдвартай байдаг. . За, бид схемийн шийдлийг олж мэдсэн, одоо бид үүнийг програмын хувьд ойлгох болно. Товчлууртай ажиллахын тулд эхлээд микроконтроллерийн портыг оролт болгон тохируулах хэрэгтэй, BASCOM-AVR дээр үүнийг дараах байдлаар хийнэ.
тохиргоо(микроконтроллер порт) = оролт
Жишээ:
PINB.3 тохиргоо = оролт

Оролтын портыг ажиллуулахын тулд портын нэр нь PIN кодоор эхлэх ёстой бөгөөд гарах портын тохиргооны хувьд PORT-оор биш байх ёстойг анхаарна уу!

Оролтын портыг тохируулсны дараа бид үүнээс 1 эсвэл 0 утгыг уншиж болно, бидний тохиолдолд 0 - товчлуур дарагдсан, 1 - товчлуур дарагдаагүй байна. Мөн товчлуур дарагдсан эсэхийг шалгахын тулд бид дараах зүйлийг хийж болно.
Хэрэв(микроконтроллер порт) = 0 тэгвэл
(хэрэв товчлуур дарагдсан бол бид энд тайлбарласан үйлдлүүдийг гүйцэтгэдэг)
бол дуусна
Та товчлуур дарагдсан эсэхийг шалгах боломжтой, мөн эсрэгээр:
Хэрэв(микроконтроллер порт) = 1 тэгвэл
(хэрэв товчлуур дарагдаагүй бол бид энд тайлбарласан үйлдлүүдийг гүйцэтгэдэг)
бол дуусна
Жишээ:
Хэрэв PINB.3 = 0 бол
PORTB.2 = 1 "хэрэв товчлуур дарагдсан бол PB.2-д холбогдсон LED-ийг асаана уу
бол дуусна

Энгийн, тийм үү? Тиймээс одоо товчийг микроконтроллертой холбохыг техник хангамжид хэрэгжүүлэхийг хичээцгээе. Бид Attiny13 микроконтроллерыг үндэс болгон авч, арай эрт хийсэн. Дибаг хийх самбар хийгээгүй хүмүүсийн хувьд диаграммыг энд харуулав.

Хөтөлбөрийн алгоритм нь дараах байдалтай байна: S1 товчлуур дарагдсан - LED унтарсан, S1 товчлуур дарагдаагүй - LED асаалттай байна. Мөн BASCOM-AVR дээрх програм нь өөрөө юм:

$regfile = "attiny13.dat" $crystal = 8000000 Config Pinb.3 = Input Config Portb.2 = Гаралт хийх бол Pinb.3 = 0 Дараа нь Portb.2 = 0 Хэрэв Pinb.3 = 1 байвал Portb.2 = 1 цикл. Төгсгөл

Энд ийм энгийн програм байна. Эмхэтгэсэн програм хангамж нь доорх архивт байна. Ийм энгийн програмын хувьд цагийн давтамж нь тийм ч чухал биш тул гал хамгаалагчийн битүүдийг орхигдуулж болно. Техник хангамжийг бүтээх залхуу хүмүүст зориулж бидний дуртай төсөл байгаа бөгөөд та үүнийг доорх архиваас татаж авах боломжтой. Proteus симулятор дахь хэлхээнд ажиллах:

Файлуудыг татаж авах хичээлийн хувьд (төсөл , эх сурвалж, програм хангамж) доороос харж болно

Радио элементүүдийн жагсаалт

Зориулалт Төрөл Номлол Тоо хэмжээ Анхаарна ууОнооМиний дэвтэр
IC1 MK AVR 8 бит

ATtiny13

1 Тэмдэглэлийн дэвтэр рүү
R1, R2 Эсэргүүцэл

4.7 кОм

2 Тэмдэглэлийн дэвтэр рүү
R3 Эсэргүүцэл

150 ом

1 Тэмдэглэлийн дэвтэр рүү
HL1 Гэрэл ялгаруулах диод 1