Atmega8 mikrokontrollerlaridagi so'nggi sxemalar. Faqat ishchi diagrammalar!: ATMega8-dagi loyihalar. Mobil telefon bildirishnomasi bilan GSM signali

Atmega8 mikrokontrollerlaridagi so'nggi sxemalar.  Faqat ishchi diagrammalar!: ATMega8-dagi loyihalar.  Mobil telefon bildirishnomasi bilan GSM signali
Atmega8 mikrokontrollerlaridagi so'nggi sxemalar. Faqat ishchi diagrammalar!: ATMega8-dagi loyihalar. Mobil telefon bildirishnomasi bilan GSM signali

AT90S2313-dagi chastota o'lchagich

Virtual chastota o'lchagich - bu shaxsiy kompyuter dasturidan va oddiydan iborat "to'plam" o'lchash asbobi ga ulanadi COM porti kompyuter.Virtual asbob chastota, davr, vaqt oralig'ini o'lchash va pulslarni hisoblash imkonini beradi.

Tafsilotlar:http://home.skif.net/~yukol/FMrus.htm

Men yig'ishni tavsiya qilaman oddiy dizayn sozlashni talab qilmaydi va eng muhimi u ishlaydi! Mikrokontroller dasturlashtirilgandasturchi PonyProg - mukammal dasturchi, oddiy, dasturlashtiriladigan mikrokontrollerlarning keng assortimenti,Windows, ruscha interfeys ostida ishlaydi.


"Radio" jurnali N1 2002 yil Uchun Ni-Cd batareyalar. 4 ta batareyani zaryad qilish imkonini beradi.



16F84A rasmidagi chastota hisoblagichi

Chastotani o'lchagichning texnik xususiyatlari:

Maksimal o'lchangan chastota.............30 MGts;

O'lchangan chastotaning maksimal ruxsati ... 10 Hz.

Kirish sezgirligi.................250 mV;

Ta'minot kuchlanishi......................8... 12 V:

Oqim iste'moli......................35 mA


Tafsilotlar, proshivka:http://cadcamlab.ru


Atmega 8-dagi lehim stantsiyasi


Lehimlash temir va sochlarini fen mashinasi kompyuter kalitlari yordamida almashtiriladi. Soch quritgichi tiristor tomonidan boshqariladi, chunki V.6 ga katodli R1 diyot o'rniga 110V sochlarini fen mashinasi.


Tafsilotlar, proshivka: http://radiokot.ru/forum


Raqamli sig'im o'lchagich sxemasidan ajratmasdan

Ta'rif "Radio" jurnalining 2009 yil 6-sonida berilgan. Dizayn AT90S2313 da yig'ilgan, Tiny2313 proshivkada o'zgarishlarsiz ishlatilgan. Ponka'da men SUT1, CKSEL1, CKSEL0 uchun katakchalarni qo'ydim, qolganlari bo'sh. Men MAX631 ni o'rnatmadim, bu biz uchun qimmat narsa, men uni 7805 stabilizatori orqali quvvat manbaidan quvvatlantirishga qaror qildim, R29, R32, R33 quvvat manbaiga plyus qo'yildi. Kapasitans o'lchagichga qo'shimcha ravishda, tranzistorlarni lehimsiz va past chastotali yuqori chastotali signal generatorini sinab ko'rish uchun korpusga zond o'rnatilgan.



Parametr o'lchagich yarimo'tkazgichli qurilmalar ATmega8 da

Qurilma quyidagilarga qodir:

Yarimo'tkazgich terminallarini aniqlang;
- turi va tuzilishini aniqlash;
- statik parametrlarni o'lchash.
Diyotlarni o'lchaydi, bipolyar tranzistorlar, dala effektli tranzistorlar JFET va MOS, rezistorlar, kondansatörler.


Hisoblagich FCL hisoblagichi bilan bir xil korpusda ishlab chiqariladi, indikator kompyuter kaliti yordamida qurilmalar o'rtasida almashinadi.

Chastota o'lchagich, sig'im va indüktans o'lchagich - FCL-metr

Quyida tavsiflangan qurilma keng diapazonda elektr tebranish chastotalarini, shuningdek sig'im va indüktansni o'lchash imkonini beradi. elektron komponentlar Bilan yuqori aniqlik. Dizayn mavjud minimal o'lchamlar, vazn va energiya sarfi.

Texnik xususiyatlari:

Ta'minot kuchlanishi, V: 6…15

Joriy iste'mol, mA: 14…17

O'lchov chegaralari:

F1, MGts 0,01…65**

F2, MGts 10…950

0,01 pF...0,5 µF dan

L 0,001 µH…5 H


Masofaviy bosh diagrammasi


Batafsil ma'lumot: http://ru3ga.qrz.ru/PRIB/fcl.shtml


ATmega8L mikrokontrolleri asosidagi miniatyura voltmetri


Bu erda biz faqat bitta mikrokontrolör ATmega8L va elektron indikator yordamida voltmetrning dizaynini ko'rib chiqamiz. tibbiy termometr. O'lchangan kuchlanish diapazoni to'g'ridan-to'g'ri oqim±50 V. Qo'shimcha funktsiya sifatida simlar va akkor lampalarning yaxlitligini tekshirish uchun ovozli prob rejimi amalga oshiriladi. Agar o'lchovlar bo'lmasa, qurilma avtomatik ravishda kutish rejimiga o'tadi. Mikrokontroller ikkita miniatyura ishqoriy hujayradan quvvat oladi (batareyalar). qo'l soati), 3b ga 1 ta element qo'ydim. Batareyalarni tez-tez o'zgartirishga hojat qolmaydi: faol rejimda joriy iste'mol faqat 330 mA, kutish rejimida - 300 nA dan kam. Miniatyura dizayni va imkoniyatlari tufayli qurilma foydali va amaliydir. Mening taxtam termometr qutisiga to'g'ri kelmadi, shuning uchun uni flomaster qutisiga solib qo'ydim. Men o'z taxtamni yasadim, R5-R7 rezistorlarini vertikal ravishda shinalarga o'rnatdim. VADZZ unga rahmat, proshivkani manbadan yaratishga yordam berdi. Ko'rsatkich chapdan o'ngga olib boradi, simlar pastda va sizga qaraydi.

Diagramma (to'liq o'lchamli diagramma uchun tasvirni kompyuteringizga saqlang).

Batafsil ma'lumot uchun: http://www.rlocman.ru/shem/schematics.html?di=63917

Kapasitans o'lchash funktsiyasi bilan zaryadlovchi

Men batareya quvvatini o'lchamoqchi edim, import qilingan hisoblagichlar juda qimmat, men topdim qiziqarli sxema va uni yig'ib oldi. U yaxshi ishlaydi, to'laydi, o'lchaydi, lekin men qanday aniqlik bilan aytish qiyin - standart yo'q. Men juda yaxshi kompaniyalarning batareyalarini 2700 mA / soat o'lchaganman - men 2000 ni maqsad qilgandim. O'yinchoqlardan batareyalar 700 mA / soat -350, men Xitoyning BTY batareyalariga EBAY 2500 mA / soat - 450 mA / soat buyurtma berdim, lekin ayni paytda ular juda yaxshi, ular o'yinchoqlarda yaxshi ishlaydi, batareyalarga qaraganda ancha arzon.


Qurilma NiMH batareyalarini zaryad qilish va ularning quvvatini kuzatish uchun mo'ljallangan. Zaryadlash / tushirish rejimlari o'rtasida almashish SA1 tugmasi yordamida amalga oshiriladi. Ishlash rejimi LEDlar va etti segmentli indikatorning dastlabki ikki raqamining o'nli nuqtalari yordamida ko'rsatiladi.
Quvvatni yoqqaningizdan so'ng darhol qurilma zaryadlash rejimiga o'tadi. Ko'rsatkich zaryadlash vaqtini ko'rsatadi. Dasturlashtirilgan vaqt o'tgandan so'ng, zaryadlash to'xtaydi. Zaryadning oxiri (va zaryadsizlanishi ham) to'rtinchi razryadning yonib turgan nuqtasi bilan ko'rsatilgan. Zaryadlash oqimi C/10 sifatida aniqlanadi, bu erda C - batareya quvvati, trimmer R14 tomonidan o'rnatiladi.
Hisoblagichning ishlash printsipi batareyaning kuchlanishi 1,1 V ga tushadigan vaqtni hisoblashga asoslangan. Bo'shatish oqimi R16 ga o'rnatilgan 450 mA ga teng bo'lishi kerak. Imkoniyatni o'lchash uchun siz batareyani tushirish bo'linmasiga kiritishingiz va tugmani bosib jarayonni boshlashingiz kerak! Qurilma faqat bitta batareyani zaryadsizlantirishi mumkin.

Batafsil ma'lumot:http://cxem.net

Havaskor radio uchun universal pech

SMD qismlarini lehimlash uchun pechda 4 ta dasturlashtiriladigan rejim mavjud.

Boshqaruv blokining diagrammasi (to'liq o'lchamli diagramma uchun tasvirni kompyuteringizga saqlang).


Elektr ta'minoti va isitgichni boshqarish


Men ushbu dizaynni IR lehim stantsiyasini boshqarish uchun yig'dim. Balki bir kun kelib pechkani boshqararman. Jeneratorni ishga tushirishda muammo yuzaga keldi, men 7 va 8-pinlardan erga 22 pF kondensatorni o'rnatdim va u odatdagidek ishga tushdi. Barcha rejimlar normal ishlaydi, 250 Vt keramik isitgich bilan yuklanadi.

Batafsil ma'lumot: http://radiokot.ru/lab/hardwork/11/

Pechka yo'q bo'lsa-da, men kichik taxtalar uchun pastki isitishni qildim:

Isitgich 250 Vt, diametri 12 sm, Angliyadan yuborilgan, EBAY da sotib olingan.


PIC16F88x/PIC16F87x(a) uchun raqamli lehim stantsiyasi

Bir vaqtning o'zida ikkita lehimli dazmol va sochlarini fen bilan ishlaydigan lehim stantsiyasi. Siz turli xil MCU lardan foydalanishingiz mumkin (PIC16F886/PIC16F887, PIC16F876/PIC16F877, PIC16F876a/PIC16F877a). Nokia 1100 (1110) displeyi ishlatiladi. Soch quritgich turbinasining tezligi elektron tarzda boshqariladi va sochlarini fen mashinasiga o'rnatilgan qamish kaliti ham ishlatiladi. Muallifning versiyasi kommutatsiya quvvat manbaidan foydalanadi Men transformator quvvat manbaidan foydalandim. Har bir inson bu stantsiyani yaxshi ko'radi, lekin mening lehim temirim bilan: 60W, 24V, keramik isitgich bilan, juda ko'p yugurish va harorat o'zgarishi mavjud. Shu bilan birga, past quvvatli lehim dazmollari, bilan nikromli isitgich kamroq tebranishlarga ega. Shu bilan birga, mening lehim dazmolim, yuqorida tavsiflangan Mixa-Pskovdan lehim stantsiyasi bilan, Volu-dan proshivka bilan, haroratni bir darajagacha ushlab turadi. Demak, kerak yaxshi algoritm isitish va haroratni saqlash. Tajriba sifatida men taymerda PWM regulyatorini yaratdim, termojuft kuchaytirgichining chiqishidan nazorat kuchlanishini qo'lladim, uni o'chirdim, mikrokontrolderdan yoqdim, haroratning o'zgarishi darhol bir necha darajaga tushdi, bu buni tasdiqlaydi kerak to'g'ri algoritm boshqaruv. Tashqi PWM, albatta, mikrokontroller mavjudligida pornografiya, ammo yaxshi proshivka hali yozilmagan. Men boshqa lehimli temirga buyurtma berdim, agar u yaxshi barqarorlikni ta'minlamasa, men tashqi PWM boshqaruvi bilan tajribalarimni davom ettiraman va ehtimol yaxshi proshivka paydo bo'ladi. Stansiya konnektorlar yordamida bir-biriga ulangan 4 ta taxtada yig'ilgan.

Qurilmaning raqamli qismining diagrammasi aniqlik uchun rasmda ko'rsatilgan, ikkita MK ko'rsatilgan: IC1 - PIC16F887, IC1(*) - PIC16F876. Boshqa MKlar ham xuddi shunday, mos keladigan portlarga ulangan.

Kontrastni o'zgartirish uchun siz 67 baytni topishingiz kerak, uning qiymati "0x80", yangi boshlanuvchilar uchun "0x90" ni qo'yishingiz mumkin. Qiymatlar "0x80" dan "0x9F" gacha bo'lishi kerak.

1110i displeyga kelsak (matn aks ettirilgan), agar u xitoycha emas, balki original bo'lsa, EEPROMni oching, 75 baytni qidiring, uni A0 dan A1 ga o'zgartiring.

Mikrokontrollerli hunarmandchilik - bu har qachongidan ham dolzarb va qiziqarli bo'lgan savol. Axir biz XXI asrda, yangi texnologiyalar, robotlar va mashinalar davrida yashayapmiz. Bugungi kunda har bir ikkinchi odam yoshligidan boshlab, ba'zan kundalik hayotda ularsiz qilish qiyin bo'lgan Internet va turli xil gadjetlardan qanday foydalanishni biladi.

Shuning uchun, ushbu maqolada biz, xususan, mikrokontrollerlardan foydalanish, shuningdek, har kuni barchamizga duch keladigan vazifalarni engillashtirish uchun ulardan to'g'ridan-to'g'ri foydalanish masalalariga to'xtalamiz. Keling, ushbu qurilmaning qiymati nima ekanligini va uni amalda qo'llash qanchalik osonligini aniqlaylik.

Mikrokontroller - bu nazorat qilish maqsadi bo'lgan chip elektr jihozlari. Klassik kontroller bir chipda protsessor va masofaviy qurilmalarning ishlashini birlashtiradi va tasodifiy kirish xotira qurilmasini o'z ichiga oladi. Umuman olganda, bu monokristal Shaxsiy kompyuter, nisbatan oddiy vazifalarni bajarishi mumkin.

Mikroprotsessor va mikrokontroller o'rtasidagi farq protsessor chipiga o'rnatilgan start-stop qurilmalari, taymerlar va boshqa masofaviy tuzilmalarning mavjudligi. Hozirgi boshqaruvchida bitta to'plam o'rniga monosxema asosida qurilgan keng imkoniyatlarga ega etarlicha kuchli hisoblash apparatidan foydalanish uning asosida yaratilgan qurilmalarning ko'lamini, sarfini va narxini sezilarli darajada pasaytiradi.

Bundan kelib chiqadiki, bunday qurilmadan kalkulyator, ana plata, CD kontrollerlar kabi hisoblash texnikasida foydalanish mumkin. Ular, shuningdek, mikroto'lqinli pechlar kabi elektr maishiy texnikada ham qo'llaniladi kir yuvish mashinalari, va boshqalar. Mikrokontrollerlar sanoat mexanikasida ham keng qo'llaniladi, mikrorelelardan tortib stanoklarni boshqarish texnikasigacha.

AVR mikrokontrollerlari

Keling, keng tarqalgan va to'liq o'rnatilgani bilan tanishaylik zamonaviy dunyo AVR kabi boshqaruvchi. U yuqori tezlikdagi RISC mikroprotsessoridan, 2 turdagi energiya sarflaydigan xotiradan (Flash loyiha keshi va EEPROM axborot keshi), operativ xotira tipidagi operativ keshdan, kiritish-chiqarish portlaridan va turli masofaviy interfeys tuzilmalaridan iborat.

  • ish harorati -55 dan +125 daraja Selsiy oralig'ida;
  • saqlash harorati -60 dan +150 darajagacha;
  • GND ga muvofiq RESET pinidagi eng yuqori kuchlanish: maksimal 13 V;
  • maksimal besleme zo'riqishida: 6,0 V;
  • kirish / chiqish liniyasining maksimal elektr oqimi: 40 mA;
  • VCC va GND elektr ta'minoti liniyasidagi maksimal oqim: 200 mA.

AVR mikrokontroller imkoniyatlari

Mega tipidagi mutlaqo barcha mikrokontrollerlar, istisnosiz, mustaqil kodlash xususiyatiga ega, o'zlarining haydovchi xotirasi tarkibiy qismlarini o'zgartirmasdan o'zgartirish qobiliyatiga ega. tashqi yordam. Bu o'ziga xos xususiyati ularning yordami bilan juda moslashuvchan tushunchalarni shakllantirishga imkon beradi va ularning ishlash usuli tashqi yoki ichki hodisalar bilan belgilanadigan u yoki bu rasm bilan bog'liq holda mikrokontroller tomonidan shaxsan o'zgartiriladi.

Ikkinchi avlod AVR mikrokontrollerlari uchun kesh ro'yxatga olish inqiloblarining va'da qilingan soni 11 ming inqilobni tashkil qiladi, standart aylanishlar soni 100 mingni tashkil qiladi.

AVR ning kirish va chiqish portlari strukturasining konfiguratsiyasi quyidagicha: fiziologik chiqishning maqsadi taniqli bit kontrollerlarida (Intel, Microchip, Motorola va boshqalar) bo'lgani kabi ikkita emas, balki uchta regulyatsiya bitidir. ). Ushbu xususiyat himoya qilish uchun xotirada port komponentlarining dublikatiga ega bo'lish zaruratini yo'q qiladi, shuningdek, tashqi qurilmalar bilan birgalikda mikrokontrollerning energiya samaradorligini tezlashtiradi, ya'ni tashqarida bog'liq elektr muammolari bo'lsa.

Barcha AVR mikrokontrollerlari ko'p bosqichli bostirish texnologiyasiga ega. Ustivor va muayyan hodisalar bilan belgilanadigan maqsadga erishish uchun Russifierning standart oqimini to'xtatib qo'yganga o'xshaydi. Muayyan ish uchun to'xtatib turish so'rovini aylantirish tartibi mavjud va u loyiha xotirasida joylashgan.

O'chirishni qo'zg'atadigan muammo yuzaga kelganda, mikrokontroller komponentlarni sozlash hisoblagichlarini saqlaydi, umumiy protsessorni ushbu dasturni bajarishdan to'xtatadi va o'chirishni qayta ishlash tartibini bajarishni boshlaydi. Amalga oshirish oxirida, to'xtatib turish dasturi homiyligida, ilgari saqlangan dastur hisoblagichi qayta tiklanadi va protsessor tugallanmagan loyihani bajarishda davom etadi.

AVR mikrokontrolleri asosidagi hunarmandchilik

AVR mikrokontrolörlaridan foydalangan holda DIY qo'l san'atlari soddaligi va kam energiya sarfi tufayli mashhur bo'lib bormoqda. Ular nima va ularni o'z qo'llaringiz va aqlingiz bilan qanday qilish kerak, quyida ko'ring.

"direktor"

Bunday qurilma o'rmonda yurishni afzal ko'rganlar, shuningdek, tabiatshunoslar uchun kichik yordamchi sifatida yaratilgan. Ko'pgina telefonlarda navigator bo'lishiga qaramay, ular ishlash uchun Internetga ulanishni talab qiladi va shahardan ajratilgan joylarda bu muammo tug'diradi va o'rmonda zaryadlash muammosi ham hal etilmagan. Bunday holda, siz bilan bunday qurilma bo'lishi juda tavsiya etiladi. Qurilmaning mohiyati shundaki, u qaysi yo'nalishni va kerakli joyga masofani aniqlaydi.

Sxema tashqi kvarts rezonatoridan 11,0598 MGts chastotada ishlaydigan AVR mikrokontrolleri asosida qurilgan. U-blox-dan NEO-6M GPS bilan ishlash uchun javobgardir. Bu, eskirgan bo'lsa-da, joylashuvni aniqlashning juda aniq qobiliyatiga ega bo'lgan keng tarqalgan va byudjet modulidir. Ma'lumotlar Nokia 5670 ekraniga qaratilgan. Model shuningdek, HMC5883L magnit to'lqin o'lchagich va ADXL335 akselerometrni o'z ichiga oladi.


Harakat sensori bilan simsiz signalizatsiya tizimi

Harakat moslamasini o'z ichiga olgan foydali qurilma va radiokanalga ko'ra, uning ishga tushirilganligini bildirish qobiliyati. Dizayn harakatlanuvchi va batareya yoki batareyalar yordamida zaryadlanadi. Uni amalga oshirish uchun sizda bir nechta HC-12 radio modullari, shuningdek, HC-SR501 harakat sensori bo'lishi kerak.

HC-SR501 harakat qurilmasi 4,5 dan 20 voltgacha bo'lgan kuchlanish bilan ishlaydi. Va uchun optimal ishlash dan LI-Ion batareyasi quvvat kiritishidagi xavfsizlik LEDni aylanib o'tishingiz va chiziqli stabilizator 7133 (2 va 3-oyoqlar) kirish va chiqishini yopishingiz kerak. Ushbu protseduralar tugagandan so'ng, qurilma 3 dan 6 voltsgacha bo'lgan kuchlanishda doimiy ishlashni boshlaydi.


Diqqat: HC-12 radio moduli bilan birgalikda ishlaganda sensor ba'zan noto'g'ri ishga tushadi. Bunga yo'l qo'ymaslik uchun transmitter quvvatini 2 marta kamaytirish kerak (AT+P4 buyrug'i). Sensor moy bilan ishlaydi va 700 mA / soat quvvatga ega bitta zaryadlangan batareya bir yildan ortiq davom etadi.

Miniterminal

Qurilma ajoyib yordamchi ekanligini isbotladi. Qurilmani ishlab chiqarish uchun asos sifatida AVR mikrokontrolleriga ega taxta kerak. Ekran to'g'ridan-to'g'ri boshqaruvchiga ulanganligi sababli, quvvat manbai 3,3 voltdan oshmasligi kerak, chunki yuqori raqamlar qurilma bilan bog'liq muammolarni keltirib chiqarishi mumkin.


Siz LM2577 asosidagi konvertor modulini olishingiz kerak va uning asosi 2500 mA / soat quvvatga ega Li-Ion batareyasi bo'lishi mumkin. Barcha ish kuchlanish diapazonida doimiy 3,3 voltni etkazib beradigan foydali paket bo'ladi. Zaryad qilish uchun TP4056 chipiga asoslangan moduldan foydalaning, u byudjetga qulay va juda yuqori sifatli hisoblanadi. Miniterminalni 5 voltli mexanizmlarga ekranni yoqishdan qo'rqmasdan ulash uchun siz UART portlaridan foydalanishingiz kerak.

AVR mikrokontrollerini dasturlashning asosiy jihatlari

Mikrokontrollerni kodlash ko'pincha montaj yoki SI uslubida amalga oshiriladi, ammo siz boshqa Forth yoki BASIC tillaridan ham foydalanishingiz mumkin. Shunday qilib, tekshirgichni dasturlash bo'yicha tadqiqotlarni haqiqatda boshlash uchun siz quyidagi materiallar to'plami bilan jihozlangan bo'lishingiz kerak, ular quyidagilarni o'z ichiga oladi: mikrokontroller, uchta qismdan iborat - ATmega8A-PU, ATtiny2313A-PU va ATtiny13A-PU. talab yuqori va samarali bo'lishi.

Mikrokontrollerga dasturni amalga oshirish uchun sizga dasturchi kerak: USBASP dasturchisi kelajakda ishlatiladigan 5 volt kuchlanishni ta'minlaydigan eng yaxshi deb hisoblanadi. Loyiha natijalarini vizual baholash va xulosalar chiqarish uchun ma'lumotlarni aks ettirish resurslari kerak - bular LEDlar, LED induktori va ekran.


Mikrokontrollerni boshqa qurilmalar bilan bog'lash tartiblarini o'rganish uchun sizga DS18B20 raqamli harorat moslamasi kerak bo'ladi. to'g'ri vaqt, DS1307 ni tomosha qiling. Bundan tashqari, tranzistorlar, rezistorlar, kvarts rezonatorlari, kondansatörler, tugmalar bo'lishi muhimdir.

Tizimlarni o'rnatish uchun sizga namunaviy o'rnatish taxtasi kerak bo'ladi. Mikrokontrollerda strukturani qurish uchun siz foydalanishingiz kerak rivojlanish kengashi lehimsiz yig'ish uchun va buning uchun o'tish moslamalari to'plami: namuna taxtasi MB102 va bir nechta turdagi - elastik va qattiq, shuningdek, U shaklidagi non taxtasiga ulash o'tkazgichlari. Mikrokontrollerlar USBASP dasturchisi yordamida kodlangan.

AVR mikrokontrolleriga asoslangan eng oddiy qurilma. Misol

Shunday qilib, AVR mikrokontrollerlari nima ekanligini va ularning dasturlash tizimi bilan tanishib, keling, ushbu kontroller asos bo'lib xizmat qiladigan eng oddiy qurilmani ko'rib chiqaylik. Keling, past kuchlanishli elektr motorlar uchun haydovchiga misol keltiraylik. Ushbu qurilma bir vaqtning o'zida ikkita zaif nuqtani nazorat qilish imkonini beradi. elektr motorlar doimiy oqim.

Dasturni yuklash mumkin bo'lgan maksimal mumkin bo'lgan elektr toki har bir kanal uchun 2 A va eng yuqori quvvat dvigatellari 20 Vt. Bortda elektr motorlarini ulash uchun ikkita terminal bloklari va kuchaytirilgan kuchlanishni ta'minlash uchun uch terminalli blok mavjud.

Qurilma o'xshaydi bosilgan elektron plata 43 x 43 mm o'lchamdagi va uning ustiga balandligi 24 millimetr va og'irligi 25 gramm bo'lgan radiator mini-sxema qurilgan. Yukni manipulyatsiya qilish uchun haydovchi platasida taxminan oltita kirish mavjud.

Xulosa

Xulosa qilib aytadigan bo'lsak, AVR mikrokontrolleri foydali va qimmatli vositadir, ayniqsa tamirchilar uchun. Va ulardan to'g'ri foydalanib, dasturlash qoidalari va tavsiyalariga rioya qilib, siz osongina olishingiz mumkin foydali narsa nafaqat kundalik hayotda, balki hayotda ham kasbiy faoliyat va faqat kundalik hayotda.

Atmega8 mikrokontrollerlari o'z oilasining eng mashhur vakillaridir. Ko'p jihatdan, ular, bir tomondan, ishlashning soddaligi va tushunarli tuzilishga, boshqa tomondan, juda keng funksionallik. Ushbu maqola yangi boshlanuvchilar uchun Atmega8 dasturlashni qamrab oladi.

umumiy ma'lumot

Mikrokontrollerlar hamma joyda mavjud. Ularni muzlatgichlarda topish mumkin, kir yuvish mashinalari, telefonlar, zavod mashinalari va ko'plab boshqalar texnik qurilmalar. Mikrokontrollerlar oddiydan o'ta murakkabgacha. Ikkinchisi sezilarli darajada taklif qiladi ko'proq imkoniyatlar va funksionallik. Ammo darhol tushuning murakkab texnologiya ishlamaydi. Dastlab, siz oddiy narsani o'zlashtirishingiz kerak. Va Atmega8 namuna sifatida olinadi. Uning malakali arxitekturasi va qulay interfeysi tufayli dasturlash qiyin emas. Bundan tashqari, u ko'pchilikda foydalanish uchun etarli ko'rsatkichga ega. Bundan tashqari, ular hatto sanoatda ham qo'llaniladi. Atmega8 holatida dasturlash AVR (C/Assembler) kabi tillarni bilishni talab qiladi. Qayerdan boshlash kerak? Ushbu texnologiyani o'zlashtirish uchta usulda mumkin. Va har kim Atmega8 bilan ishlashni qaerdan boshlashni o'zi tanlaydi:

  1. Arduino orqali dasturlash.
  2. Tayyor qurilmani sotib olish.
  3. Mikrokontrollerni o'z-o'zidan yig'ish.

Biz birinchi va uchinchi fikrlarni ko'rib chiqamiz.

Arduino

Bu mos keladigan shaklda yaratilgan qulay platforma tez yaratish turli qurilmalar. Kengashda mikrokontrollerning o'zi, uning jabduqlari va dasturchisi ko'rinishida kerak bo'lgan hamma narsa mavjud. Ushbu yo'ldan borish orqali odam quyidagi imtiyozlarga ega bo'ladi:

  1. Past chegara talablari. Texnik qurilmalarni ishlab chiqish uchun maxsus ko'nikmalarga ega bo'lishingiz shart emas.
  2. Qo'shimcha tayyorgarliksiz ulanish uchun elementlarning keng doirasi mavjud bo'ladi.
  3. Rivojlanishning tez boshlanishi. Arduino bilan siz to'g'ridan-to'g'ri qurilmalar yaratishga o'tishingiz mumkin.
  4. Katta miqdorning mavjudligi o'quv materiallari va turli dizaynlarni amalga oshirish misollari.

Ammo ma'lum kamchiliklar ham mavjud. Shunday qilib, Arduino dasturlash Atmega8 mikrokontroller dunyosiga chuqurroq kirib borishga va ko'plab foydali jihatlarni tushunishga imkon bermaydi. Bundan tashqari, siz AVR (C/Assembler) tomonidan qo'llaniladigan tillardan farq qiladigan dasturlash tilini o'rganishingiz kerak bo'ladi. Va yana bir narsa: Arduino juda tor modellarga ega. Shuning uchun, ertami-kechmi platalarda ishlatilmaydigan mikrokontrollerdan foydalanish kerak bo'ladi. Ammo umuman olganda, bu Atmega8 bilan ishlash uchun yaxshi variant. Arduino orqali dasturlash sizga elektronika olamida ishonchli boshlash imkonini beradi. Va inson muvaffaqiyatsizliklar va muammolar tufayli taslim bo'lishi dargumon.

O'z-o'zini yig'ish

Do'stona dizayn tufayli siz ularni o'zingiz qilishingiz mumkin. Axir, bu arzon, arzon va oddiy komponentlarni talab qiladi. Bu sizga Atmega8 mikrokontrollerining dizaynini sinchkovlik bilan o'rganish imkonini beradi, uni yig'ishdan keyin dasturlash osonroq ko'rinadi. Bundan tashqari, agar kerak bo'lsa, siz mustaqil ravishda boshqa komponentlarni tanlashingiz mumkin aniq vazifa. To'g'ri, bu erda ma'lum bir kamchilik bor - murakkablik. Kerakli bilim va ko'nikmalarga ega bo'lmaganda mikrokontrollerni mustaqil ravishda yig'ish oson emas. Biz ushbu variantni ko'rib chiqamiz.

Yig'ish uchun nima kerak?

Avval siz Atmega8-ning o'zini olishingiz kerak. Bilasizmi, usiz mikrokontrollerni dasturlash mumkin emas. Bu bir necha yuz rublga tushadi - munosib funksionallikni ta'minlash bilan birga. Atmega8 qanday dasturlashtiriladi degan savol ham bor. USBAsp juda yaxshi yaxshi qurilma bilan o'zini isbotlagan eng yaxshi tomoni. Ammo siz boshqa dasturchidan foydalanishingiz mumkin. Yoki uni o'zingiz yig'ing. Ammo bu holda, agar yomon yaratilgan bo'lsa, u mikrokontrollerni ishlamaydigan plastmassa va temir parchasiga aylantirish xavfi mavjud. Bundan tashqari, non taxtasi va jumpers bo'lsa ham zarar qilmaydi. Ular talab qilinmaydi, lekin asab va vaqtni tejaydi. Va nihoyat, sizga 5V quvvat manbai kerak.

Misol yordamida yangi boshlanuvchilar uchun Atmega8 dasturlash

Keling, qanday qilishni ko'rib chiqaylik umumiy kontur qurilma yaratilmoqda. Aytaylik, bizda mikrokontroller, LED, rezistor, dasturchi, ulash simlari va quvvat manbai mavjud. Birinchi qadam mikrodasturni yozishdir. Bu maxsus formatdagi yakuniy fayl sifatida taqdim etilgan mikrokontroller uchun buyruqlar to'plami sifatida tushuniladi. Barcha elementlarning ulanishini, shuningdek, ular bilan o'zaro ta'sirini ko'rsatish kerak. Shundan so'ng siz sxemani yig'ishni boshlashingiz mumkin. VCC pinini quvvatlantirish kerak. Qurilmalar va elementlar bilan ishlash uchun mo'ljallangan har qanday boshqasiga birinchi navbatda rezistor, keyin esa LED ulanadi. Bunday holda, birinchisining kuchi ikkinchisining quvvat talablariga bog'liq. Siz quyidagi formuladan foydalanishingiz mumkin: R=(Up-Ups)/Is. Bu erda p - quvvat va s - LED. Tasavvur qilaylik, bizda 2V iste'mol qiladigan va 10 mA ta'minot oqimini talab qiladigan LED bor, uni matematik operatsiyalar uchun qulayroq shaklga aylantiring va 0,01A oling. Keyin formula quyidagicha ko'rinadi: R=(5V-2V)/0,01A=3V/0,01A=300 Ohm. Ammo amalda ko'pincha tanlash imkonsiz bo'lib chiqadi mukammal element. Shuning uchun eng mos keladigani olinadi. Ammo siz matematik tarzda olingan qiymatdan yuqori qarshilikka ega bo'lgan qarshilikdan foydalanishingiz kerak. Ushbu yondashuv tufayli biz uning xizmat muddatini uzaytiramiz.

Keyingisi nima?

Shunday qilib, bizda kichik diagramma bor. Endi dasturchini mikrokontrollerga ulash va uning xotirasiga yaratilgan proshivkani yozish qoladi. Bu erda bitta nuqta bor! Sxemani qurishda uni shunday yaratish kerakki, mikrokontroller lehimsiz porlashi mumkin. Bu vaqtni, nervlarni tejaydi va elementlarning ishlash muddatini uzaytiradi. Shu jumladan Atmega8. Ta'kidlash joizki, sxema ichidagi dasturlash bilim va ko'nikmalarni talab qiladi. Ammo bu sizga yanada ilg'or dizaynlarni yaratishga imkon beradi. Axir, ko'pincha lehimlash paytida elementlar shikastlanadi. Shundan so'ng, diagramma tayyor bo'ladi. Siz kuchlanishni qo'llashingiz mumkin.

Muhim nuqtalar

Men buni yangi boshlanuvchilarga bermoqchiman Foydali maslahatlar Atmega8 dasturlash haqida. O'rnatilgan o'zgaruvchilar va funktsiyalarni o'zgartirmang! Qurilmani boshqa har qanday shovqinlarni to'sib qo'yadigan "abadiy halqalar" yo'qligini tekshirgandan so'ng va yaxshi transmitterdan foydalangandan so'ng yaratilgan dastur bilan yondirish tavsiya etiladi. Agar siz ushbu maqsadlar uchun uy qurilishi mahsulotidan foydalansangiz, mikrokontrollerning ishdan chiqishiga aqlan tayyor bo'lishingiz kerak. Dasturchi yordamida qurilmani miltillaganingizda, VCC, GND, SCK, MOSI, RESET, MISO mos keladigan chiqishlarini ulashingiz kerak. Va xavfsizlik choralarini buzmang! Agar texnik xususiyatlar 5V quvvat manbai bo'lishi kerakligi nazarda tutilgan, keyin siz aynan shu kuchlanishga rioya qilishingiz kerak. Hatto 6V elementlardan foydalanish ham mikrokontrollerning ishlashiga salbiy ta'sir ko'rsatishi va uning ishlash muddatini qisqartirishi mumkin. Albatta, 5V batareyalar ma'lum farqlarga ega, ammo, qoida tariqasida, hamma narsa oqilona chegaralar ichida. Masalan, maksimal kuchlanish 5,3V da saqlanadi.

Trening va malaka oshirish

Yaxshiyamki, Atmega8 juda mashhur mikrokontrollerdir. Shuning uchun hamfikrlarni yoki oddiygina bilimli va malakali odamlarni topish qiyin bo'lmaydi. Agar siz g'ildirakni qayta ixtiro qilishni xohlamasangiz, lekin faqat ma'lum bir muammoni hal qilmoqchi bo'lsangiz, unda siz keng dunyo bo'ylab Internetda kerakli sxemani izlashingiz mumkin. Aytgancha, bir oz maslahat: robototexnika rus tilida so'zlashuvchi segmentda juda mashhur bo'lsa-da, agar javob bo'lmasa, uni ingliz tilida so'zlashuvchi segmentda izlash kerak - u kattalik tartibini o'z ichiga oladi. katta miqdor ma `lumot. Mavjud tavsiyalarning sifati haqida ma'lum shubhalar mavjud bo'lsa, siz Atmega8ni muhokama qiladigan kitoblarni izlashingiz mumkin. Yaxshiyamki, ishlab chiqaruvchi kompaniya o'z ishlanmalarining mashhurligini hisobga oladi va ularni maxsus adabiyotlar bilan ta'minlaydi, bu erda tajribali odamlar nima va qanday qilib aytishadi, shuningdek, qurilma qanday ishlashiga misollar keltiradilar.

O'zingizning biror narsangizni yaratishni boshlash qiyinmi?

500-2000 rubl va bir nechta bepul oqshomlarga ega bo'lish kifoya. Bu vaqt Atmega8 arxitekturasi bilan tanishish uchun etarli. Bir oz mashqdan so'ng, siz aniq vazifalarni bajaradigan o'z loyihalaringizni osongina yaratishingiz mumkin. Masalan, robot qo'l. Bitta Atmega8 asosiy narsani etkazish uchun etarli bo'lishi kerak motor funktsiyalari barmoqlar va qo'llar. Albatta chiroyli qiyin vazifa, lekin juda mumkin. Kelajakda o'nlab mikrokontrollerlarni talab qiladigan murakkab narsalarni yaratish mumkin bo'ladi. Ammo buning hammasi oldinda, undan oldin olish kerak yaxshi maktab oddiy narsa ustida mashq qiling.

ATMega8 bo'yicha loyihalar.

Eng oddiy va eng mashhur mikrokontrollerlardan birini o'rganish uchun oddiy loyihalar.

Ishlash uchun sizga kamida CodeVision AVR2.04.4a va Proteus 7.2 SP6 kerak bo'ladi. Agar siz apparat bilan ishlamoqchi bo'lsangiz, sizga dasturchi ham kerak bo'ladi. Men buni tavsiya qilaman - uni yig'ish oson va yaxshi ishlaydi. Yagona muammo dastlabki ATMega8 proshivkasi bilan bog'liq, buni LPT porti - 5-provodov-avr orqali amalga oshirish mumkin yoki siz "qattiq simli" mikrokontrollerni sotib olishingiz mumkin, men uni oldim.


1-sonli svetofor.

Bir yo'nalishdagi eng oddiy svetoforni yaratish uchun ko'p kuch va mahorat talab etilmaydi. Sxema bir necha daqiqada yig'iladi. Rezistorlar ishlatiladigan LEDlar asosida tanlanadi ("Sovet" AL307 uchun 470 Ohm darajasi ko'rsatilgan), shuni ta'kidlash kerakki, diagrammada AVCC pinining quvvat manbai, agar u haqiqiy mikrokontrollerga ulanmagan bo'lsa, O'rnatilgan ADC (analog-raqamli konvertor) dan foydalanishdan qat'i nazar, siz mikrosxemaga zarar etkazishingiz mumkin (har qanday Mega seriyali kontrollerlar uchun haqiqiydir) !!!

Manba kodi shunchalik oddiyki, men uni shu yerda taqdim etaman. Men internetda C uchun ushbu kodni topdim va uni biroz tuzatdim, ammo har qanday dasturchi sizga bu kod ahmoq ekanligini aytadi (keyinchalik men bunday dasturlarni qanday yozishni aniq tasvirlab beraman), lekin u oddiy, vizual va ishlaydigan.

Chip turi: ATmega8
Dastur turi: Ilova

Xotira modeli: Kichik
Ma'lumotlar to'plami hajmi: 256


#o'z ichiga oladi

#o'z ichiga oladi

asosiy bekor (bo'sh)
{
// B portini ishga tushirish
PORTB=0x00;
DDRB=0x00;

// C portini ishga tushirish
PORTC=0x00;
DDRC=0x00;

// D portini ishga tushirish
PORTD=0x00;
DDRD=0x07;

// Tashqi uzilish(lar)ni ishga tushirish
// INT0: o'chirilgan
// INT1: o'chirilgan
MCUCR=0x00;


// Analog taqqoslagich: O'chirilgan

ACSR=0x80;
SFIOR=0x00;

esa (1) (

PORTD.2=1; // yashil rang yonadi
delay_ms(8000); //8 soniya yonadi


kechikish_ms(500); //Yarim soniya kuting


PORTD.2=0; // Yashil rangni o'chiring

PORTD.2=1; // Yashil rangni yoqing

/*delay_ms(500);//Yarim soniya kuting
PORTD.2=0; // Yashil rangni o'chiring
kechikish_ms(500); //Yarim soniya kuting
PORTD.2=1; // Yashil rangni yoqing
kechikish_ms(500); //Yarim soniya kuting*/

PORTD.1=1; //Sariq rangni yoqing
PORTD.2=0; // Yashil rangni o'chiring
delay_ms(3000); // 3 soniya kuting

PORTD.0=1; // Qizil rangni yoqing
PORTD.1=0; // sariq rangni o'chiring
delay_ms(9000); //9 soniya uchun

PORTD.1=1; //sariqni qizilga aylantiring
delay_ms(3000); //3 soniya kuting
PORTD.0=0; // Qizil rangni o'chiring
PORTD.1=0; //va sariq
};
}

Agar sukut bo'yicha deyarli barcha ATMega8 portlari va registrlari 0 ga ishga tushirilganligini hisobga olsak, kodni biroz qisqartirish mumkin. Endi yangi boshlanuvchilar uchun ba'zi tushuntirishlar:

#o'z ichiga oladi

#o'z ichiga oladi

Bular sarlavhali fayllar deb ataladigan protseduralar ularda yozilgan, biz ularni boshqa fayllardan qo'llaymiz. Masalan, kechikishni millisekundlarda aniqlaydigan delay_ms(X) protsedurasi boshqa shaxs tomonidan yozilgan va delay.c faylida mavjud (aslida hamma narsa aynan shunday bo'lmasligi yoki umuman bo'lmasligi mumkin - protsedura obj, *.asm) tipidagi obyekt faylini o'z ichiga olishi mumkin va undan foydalanish qoidalari biz kiritgan delay.h faylida tasvirlangan.

PORTB=0x00;
DDRB=0x00;

Nazorat qiluvchi port registrlarini bildiruvchi zahiralangan nomlar (uning pinlari bayt bo'yicha guruhlangan - har biri 8 ta, port registrining har bir biti o'z piniga to'g'ri keladi) va port almashinuvi yo'nalishi registrlari (0-kirish, 1-chiqish)

Masalan, DDRB.5=1 deb yozish, kontrollerning PB5 pinining chiqish uchun sozlanganligini bildiradi va PORTB.5=0 yoki =1 yozishda bu pinda biz 0 (0...0,8 Volt) yoki 1 ni olamiz. (4...5 volt). Albatta, siz darhol portga butun qiymatni belgilashingiz mumkin: PORTB=0xFF, ya'ni. PB portining barcha pinlari 1.

while(1) (ifoda);

cheksiz tsikl, chunki 1=TRUE.

2-sonli svetofor.


Ikki yo'nalishda svetoforni olish uchun siz svetoforning №1 diagrammasini o'zgartirishingiz kerak:


va svetoforning №1 kodi:

/*****************************************************
Chip turi: ATmega8
Dastur turi: Ilova
AVR Core Clock chastotasi: 1.000000 MGts
Xotira modeli: Kichik
Tashqi operativ xotira hajmi: 0
Ma'lumotlar to'plami hajmi: 256
*****************************************************/

#o'z ichiga oladi
#o'z ichiga oladi

asosiy bekor (bo'sh)
{
// B portini ishga tushirish
PORTB=0x00;
DDRB=0x00;

// C portini ishga tushirish
PORTC=0x00;
DDRC=0x00;

// D portini ishga tushirish
PORTD=0x00;
DDRD=0b00111111;

ACSR=0x80;
SFIOR=0x00;

esa (1)
{
PORTD.2=1; //yashil1 yonadi Z1
PORTD.3=1; //red2 K2 yonadi
delay_ms(8000); //yashil1 8 soniya davomida yonadi

PORTD.2=0; //yashil rangni o'chiring1 ZM1
kechikish_ms(500); //yarim soniya kuting

kechikish_ms(500); //yarim soniya kuting

kechikish_ms(500); //yarim soniya kuting
PORTD.2=1; // yashil rangni yoqing1
kechikish_ms(500); //yarim soniya kuting

PORTD.1=1; //to'q sariq1 J1 K2+J2 ni yoqing
PORTD.4=1; // apelsin2 ni yoqing
PORTD.2=0; // yashil rangni o'chiring1


PORTD.0=1; //red1 K1-ni yoqing
PORTD.5=1; // yashil rangni yoqing2 Z2
PORTD.1=0; // apelsinni o'chirish1
PORTD.4=0; // apelsinni o'chiring2
PORTD.3=0; // red2ni o'chiring
delay_ms(8000); //8 soniya kuting

PORTD.5=0; //yashil 2 ZM2 ni o'chiring
kechikish_ms(500); //yarim soniya kuting

kechikish_ms(500); //yarim soniya kuting

kechikish_ms(500); //yarim soniya kuting
PORTD.5=1; // yashil rangni yoqing2
kechikish_ms(500); //yarim soniya kuting

PORTD.1=1; //to'q sariq1 ni qizil rangga1 K1+J1ga yoqing
PORTD.4=1; //orange2 J2 ni yoqing
PORTD.5=0; // yashil rangni o'chiring2
delay_ms(2000); //2 soniya kuting
PORTD.0=0; // red1ni o'chiring
PORTD.1=0; //va apelsin1
PORTD.4=0; //va apelsin2
};
}

Kod sharhlari:

DDRD=0b00111111; //0b(b7)(b6)(b5)(b4)(b3)(b2)(b1)(b0)

O'ng tomonda eng muhim raqam chap tomonda joylashgan sonning bit (ikkilik) ko'rinishi mavjud; u o'nlik (DDRD=63;) yoki o'n oltilik (DDRD=0x3F;) bilan ham yozilishi mumkin.

asosiy bekor (bo'sh)

Main - bu asosiy protsedura, dasturning bajarilishi undan boshlanadi, void so'zma-so'z hech narsani anglatmaydi ( null turi), void o'rniga siz (imzolangan yoki imzosiz) int, long ni almashtirishingiz mumkin; float, double va boshqalar (va hatto keyinroq muhokama qilinadigan boshqa o'zgaruvchiga ko'rsatgich). Bundan tashqari, birinchi holatda bo'sh joyni ba'zi tur bilan almashtirish shuni anglatadi bu dizayn- protsedura emas, balki funktsiya va qiymatni qaytarishi mumkin, ya'ni. ichida so'z bilan to'ldirilishi kerak qaytish.

int fun(void) (
int a=10;
qaytish (a);
}

Barcha o'zgarishlar ish sxemasiga muvofiq amalga oshirildi:


Miltillovchi yashil signal bilan ikki yo'nalishda svetoforning ishlash diagrammasi. Ushbu diagramma ham Internetdan olingan va mening fikrimcha: ko'proq miltillovchi yashil signallar bo'lishi kerak.



3-sonli svetofor.


1 va 2-sonli misollar koddan biroz "to'g'ri" foydalanishni ko'rsatdi, bu kichik dasturlar uchun maqbuldir, lekin katta ilovalarda resurslarni isrof qilish tufayli foydalanish mumkin emas.
Kodni soddalashtirish va qisqartirish uchun texnologik ilovalar dasturchilar odatda avtomatlardan foydalanadilar. Avtomat jarayonning soddalashtirilgan va etarli modelidir. Masalan, svetoforning butun ishlashini ma'lum bir davr bilan takrorlanadigan ma'lum sonli holatlarga bo'lish mumkin. Avtomatni ko'rsatish uchun sizga dasturiy ta'minot holati hisoblagichi va holat dekoderi kerak bo'ladi. 4 ta yo'nalishdagi transport svetofori, 4 ta piyodalar svetofori, 1 ta temir yo'l kesishma chirog'i, 1 ta miltillovchi piyodadan iborat 3-sonli svetoforni avtomatik moslamasiz yaratish muammoli bo'lar edi.


Piyodalar va temir yo'l svetoforlarini qayta ishlamasdan kod quyida ko'rsatilgan. Bu kabi tartiblarni tushunish oson
void SetRedT1(void) //Transport svetofori1 qizil D3ni yoqadi
{
ptc|=0x01;
}
alohida bitlarni o'rnating yoki tozalang.

Asosiy tsiklda i hisoblagichning qiymati 48 ga yetguncha doimiy ravishda oshib boradi.
i++;
Bunday holda, hisoblagich nolga qaytariladi.
agar (i==48) (i=0;); // 24c=0,5*48

Loopda hisoblagich qiymati doimiylar bilan doimiy ravishda taqqoslanadi va portlar bilan ish olib boriladi. Garchi ushbu kod oldingi ikkitasiga qaraganda ancha rivojlangan bo'lsa-da, u ish uchun emas, balki aniqlik uchun ham mos keladi. Professionallar ko'pincha individual taqqoslash operatsiyalari to'plamidan foydalanmaydilar, lekin o'tish operatorlaridan foydalanadilar yoki hatto oldindan hisoblangan ma'lumotlarni massivlarga yozadilar - tayyor jadvaldan foydalaning:

flash unsigned char sw[N]=(
//G1Y1R1G2Y2R2 XX
0b10000100, //1 X davrlar Yashil1 va Qizil2 yonadi
0b10000100, //2
...
0b00000100, // X davrlar Yashil1 yonadi,

0b10000100, //
...
0b01001100, //K-1 Yashil1 o'chadi, Sariq1 va Sariq2 yonadi
0b00110000, //K Red1 yonadi, Yashil1 yonadi, Sariq2 va Qizil2 o'chadi

...
0b01101000 //N
};

esa (1)
{
i++;


PORTC=(sw[i]>>x) | niqob;
PORTD=(sw[i]>>x) | niqob;
kechikish_ms(500);
};
}

Albatta, ifodalar (sw[i]>>x) | niqob shartli ravishda tavsiflanadi, hamma narsa signallar haqidagi ma'lumotlarning sw doimiysidagi holatiga bog'liq.

/*****************************************************
Chip turi: ATmega8
Dastur turi: Ilova
AVR Core Clock chastotasi: 1.000000 MGts
Xotira modeli: Kichik
Tashqi operativ xotira hajmi: 0
Ma'lumotlar to'plami hajmi: 256
*****************************************************/

#o'z ichiga oladi
#o'z ichiga oladi

unsigned char ptb=0;
unsigned char ptc=0;
unsigned char ptd=0;

void SetRedT1() //Transport svetofori1 qizil D3ni yoqadi
{
ptc|=0x01;
}

void ResetRedT1() //Transport svetofori1 qizil D3ni o'chiring
{
ptc&=~0x01;
}

void SetYelT1() //Transport svetofori1 sariq D2 yonadi
{
ptc|=0x02;
}

void ResetYelT1() //Transport svetofori1 sariq D2ni o'chiring
{
ptc&=~0x02;
}

void SetGrnT1() //Transport svetofori1 yashil rangga D1
{
ptc|=0x04;
}

void ResetGrnT1() //Transport svetofori1 yashil D1ni o'chiring
{
ptc&=~0x04;
}

void SetRedT2() //Transport svetofori2 qizil D6 yonadi
{
ptc|=0x08;
}

void ResetRedT2() //Transport svetofori2 qizil D6-ni o'chiring
{
ptc&=~0x08;
}

void SetYelT2() //Transport svetofori2 sariq D5 yonadi
{
ptc|=0x10;
}

void ResetYelT2() //Transport svetofori2 sariq D5ni o'chiradi
{
ptc&=~0x10;
}

void SetGrnT2() //Transport svetofori2 yashil rangga D4
{
ptc|=0x20;
}

void ResetGrnT2() //Transport svetofori2 yashil D4-ni o'chiring
{
ptc&=~0x20;
}


void SetRedT3() //Transport svetofori3 qizil D9ni yoqadi
{
ptd|=0x01;
}

void ResetRedT3() //Transport svetofori3 qizil D9ni o'chiring
{
ptd&=~0x01;
}

void SetYelT3() //Transport svetofori3 sariq D8 yonadi
{
ptd|=0x02;
}

void ResetYelT3() //Transport svetofori3 sariq D8ni o'chiring
{
ptd&=~0x02;
}

void SetGrnT3() //Transport svetofori3 yashil rangga D7
{
ptd|=0x04;
}

void ResetGrnT3() //Transport svetofori3 yashil D7ni o'chiring
{
ptd&=~0x04;
}


void SetRedT4() //Transport svetofori2 qizil D12 yonadi
{
ptd|=0x08;
}

void ResetRedT4() //Transport svetofori2 qizil D12-ni o'chiring
{
ptd&=~0x08;
}

void SetYelT4() //Transport svetofori2 sariq D11ni yoqadi
{
ptd|=0x10;
}

void ResetYelT4() //Transport svetofori2 sariq D11ni o'chiradi
{
ptd&=~0x10;
}

void SetGrnT4() //Transport svetofori2 yashil rangga D10
{
ptd|=0x20;
}

void ResetGrnT4() //Transport svetofori2 yashil D10ni o'chiring
{
ptd&=~0x20;
}

// Global o'zgaruvchilarni shu yerda e'lon qiling

asosiy bekor (bo'sh)
{
unsigned char i=0;

PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ACSR=0x80;

esa (1)
{
agar (i==0) (ResetYelT1();ResetRedT1();SetGrnT1();
ResetYelT2();SetRedT2();
ResetYelT3();ResetRedT3();SetGrnT3();
ResetYelT4();SetRedT4();

); //0s
agar (i==16) (ResetGrnT1();
ResetGrnT3();

); //8s
agar (i==17) (SetGrnT1();
SetGrnT3();

};
agar (i==18) (ResetGrnT1();
ResetGrnT3();

};
agar (i==19) (SetGrnT1();
SetGrnT3();

};
agar (i==20) (ResetGrnT1();SetYelT1();
SetYelT2();
ResetGrnT3();SetYelT3();
SetYelT4();

); //10s
agar (i==24) (ResetYelT1();SetRedT1();
ResetYelT2();ResetRedT2();SetGrnT2();
ResetYelT3();SetRedT3();
ResetYelT4();ResetRedT4();SetGrnT4();

); //12s
agar (i==40) (ResetGrnT2();
ResetGrnT4();

); //20s
agar (i==41) (SetGrnT2();
SetGrnT4();

};
agar (i==42) (ResetGrnT2();
ResetGrnT4();

); //21s
agar (i==43) (SetGrnT2();
SetGrnT4();

};
agar (i==44) (SetYelT1();
ResetGrnT2();SetYelT2();
SetYelT3();
ResetGrnT4();SetYelT4();

); //22s
i++;
agar (i==48) (i=0;); // 24c=0,5*48 - sikl

//PORTB=ptb;
PORTC=ptc;
PORTD=ptd;
kechikish_ms(500);
};
}

Ustun ko'rsatkichi.

Agar oldingi misollarda mikrokontrollerning raqamli resurslaridan foydalanilgan bo'lsa, bu misolda analoglar - ADC ishlatiladi. Diskret konvertatsiya qilish uchun mo'ljallangan analog-raqamli konvertor analog signal ma'lum bir namuna olish chastotasiga ega raqamli kodga. Yangi boshlanuvchilar uchun men buni faqat aytishim mumkin maksimal tezlik Raqamlashtirish cheklangan.

Bar indikatori kirish kuchlanishini yorug'lik segmentlari ustuni (yoki oddiygina alohida emitentlar) ko'rinishida ko'rsatadi, bu barcha turdagi ko'rsatkichlar uchun juda foydali bo'lib, ularning misollari ustunli yozish darajasi ko'rsatkichlari (RLI).

Kirish kuchlanishi ta'minot kuchlanishidan oshmasligi kerak va mikrokontrollerning 5 voltli quvvat manbai mos yozuvlar kuchlanishi sifatida ishlatiladi va filtr sifatida AREF pinidagi tashqi kondansatör ishlatiladi.

Dastur kodi quyida keltirilgan:

/*****************************************************
Chip turi: ATmega8
Dastur turi: Ilova
AVR Core Clock chastotasi: 4.000000 MGts
Xotira modeli: Kichik
Tashqi operativ xotira hajmi: 0
Ma'lumotlar to'plami hajmi: 256
*****************************************************/

#o'z ichiga oladi
#o'z ichiga oladi

#define ADC_VREF_TYPE 0x40 //5V Vcc + C 4.7uF AREF

//PD0 LED1
//PD1 LED2
//PD2 LED3
//PD3 LED4
//PD4 LED5
//PD5 LED6
//PD6 LED7
//PD7 LED8
//PB0 LED9
//PB1 LED10
//PB2 LED11
//PB3 LED12
//PB4 LED13
//PB5 LED14

//PC4 LED15
//PC5 LED16

const
unsigned char PD =
{
0b00000000, //0
0b00000001, //1
0b00000011, //2
0b00000111, //3
0b00001111, //4
0b00011111, //5
0b00111111, //6
0b01111111, //7
0b11111111, //8
//_____________
0b11111111, //9
0b11111111, //10
0b11111111, //11
0b11111111, //12
0b11111111, //13
0b11111111, //14
0b11111111, //15
0b11111111 //16
};
belgisiz belgi PB=
{
0b00000000, //0
0b00000000, //1
0b00000000, //2
0b00000000, //3
0b00000000, //4
0b00000000, //5
0b00000000, //6
0b00000000, //7
0b00000000, //8
//_____________
0b00000001, //9
0b00000011, //10
0b00000111, //11
0b00001111, //12
0b00011111, //13
0b00111111, //14
//_____________
0b00111111, //15
0b00111111 //16
};

// AD konvertatsiyasi natijasini o'qing
unsigned int read_adc (insigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE va 0xff);
// ADC kirish kuchlanishini barqarorlashtirish uchun kechikish kerak
delay_us(10);
// AD konvertatsiyasini boshlang
ADCSRA|=0x40;
// AD konvertatsiyasi tugashini kuting
esa ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
ADCW-ni qaytarish;
}

bekor ADC_init()
{
// ADC ishga tushirish
//ADC soat chastotasi: 125.000 kHz
// ADC kuchlanish ma'lumotnomasi: Vcc, qopqoq. AREF da
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
}

void dekodlash (int signali)
{
PORTD=PD;
PORTB=PB;

agar (signal==15) (PORTC |= 0b00010000; PORTC &= 0b11011111;)
Aks holda (signal==16) (PORTC |= 0b00110000;)
boshqa (PORTC &= 0b11001111;)
}

Void SetupIO()
{
// Kirish/chiqish portlarini ishga tushirish
PORTB=0b00000000;
DDRB= 0b00111111;

PORTC=0b00001100;
DDRC= 0b00110000; //PC0, PC1 = PUP bilan ADC0, ADC1, PC2, PC3 o'rnatish pinlari

PORTD=0x00;
DDRD=0xFF;
}

asosiy bekor (bo'sh)
{
// Analog solishtirgichni ishga tushirish
// Analog taqqoslagich: O'chirilgan
// Taymer/taymer 1 bo'yicha analog solishtirgichni kiritish: O'chirilgan
ACSR=0x80;
SFIOR=0x00;

SetupIO();
ADC_init();

esa (1)
{
Decode(read_adc(0)*0,049*0,32);
kechikish_ms(100);
};
}

Ushbu kodda ishlatiladigan deyarli barcha texnikalar yuqorida muhokama qilingan. Men ta'kidlamoqchi bo'lgan yagona narsa - if iborasi bilan kengaytirilgan qurilish:
agar () () //agar (shart bajarilgan bo'lsa) u holda ( )
Aks holda () () //aks holda, agar (shart bajarilsa) u holda ( )
Aks holda () //aks holda ( )

Va ifoda read_adc(0)*0,049*0,32
Gap shundaki, ADC o'z qiymatlarini 0-1023 (2 ^ 10) shkalasida ishlab chiqaradi, bu 0-5 volt shkalasiga to'g'ri keladi (chunki mos yozuvlar kuchlanishi 5 volt) va biz birinchi navbatda olishimiz kerak. volt, so'ngra ularni miqdor segmentlariga aylantiring. 1024*0,049*0,32=16 ya'ni. Butun ADC shkalasi 16 segmentdan iborat.
0,049 soni 5 volt / 1024 ta = 0,0048828 (~10 ADC soni) ko'paytmasi sifatida qabul qilinadi va keyin 0,32 ga ko'paytiriladi. eksperimental usul oxirgi segmentni kerakli kirish kuchlanishida yoqish uchun.



Seriyali port.

Va endi men interfeyslar dunyosiga kirishni taklif qilaman. Eng oddiy va eng ko'p qo'llaniladigan seriyali protokol RS232, yaqin vaqtgacha, eskirgan deb hisoblansa ham, zamonaviy mikrokontrollerlar ishlab chiqarishga kiritilgan - va faqat bitta emas, qoida tariqasida, hozirda kamida 4 tasi mavjud. Bundan tashqari, ko'pgina qurilmalar hali ham ushbu interfeysdan foydalanadi (masalan, ba'zi NoritakeItron VFD ekranlari, sekin ishlab chiqarish qurilmalari va boshqalar). Ushbu misol mikrokontrollerlarda RS232 (USART) ni sozlash va ishlatish qanchalik oson va sodda ekanligini baholash imkonini beradi.


Quyida 0 belgisini uzatuvchi kod keltirilgan.

/*****************************************************
Chip turi: ATmega8
Dastur turi: Ilova
AVR Core Clock chastotasi: 1.000000 MGts
Xotira modeli: Kichik
Tashqi operativ xotira hajmi: 0
Ma'lumotlar to'plami hajmi: 256
*****************************************************/

#o'z ichiga oladi

// Standart kiritish/chiqish funksiyalari
//#shu jumladan

#BAUDRATE 57600 ni aniqlang
#define BaudValue ((11059200UL/(BAUDRATE*16UL))-1)

void USART_Transmit (imzosiz belgilar ma'lumotlari)
{
//(hozirda (!(UCSRA & (1.).<
UDR = ma'lumotlar;
while(!(UCSRA & (1<
//UDR = ma'lumotlar; //Ma'lumotlarni uzatishni boshlang
}

bekor USART_init(bekor)
{
UBRRH = BaudValue >> 8;
UBRRL = BaudValue & 0xFF;
//
UCSRB=(1<
DDRD=0x02;
UCSRC = (1<
//UCSRA = (1<
}

asosiy bekor (bo'sh)
{
ACSR=0x80;
SFIOR=0x00;
USART_init();
esa (1){ USART_Transmit (0x30);};
}


Proteus emulyatsiyani qo'llab-quvvatlamasligini unutmang UCSRC (port aloqasi parametrlarini sozlash), shuning uchun osilator chastotasini 3500000 ga o'rnating va terminalda quyidagi parametrlarni o'rnating:




Salom, Datagorianlar!

Birinchi maqolam nashr etilgandan so'ng, men mikrokontrollerlar, qanday, nima, qaerda, nima uchun ... haqida savollarga to'lib ketdim.

Ushbu qora quti qanday ishlashini tushunishingiz uchun men sizga ATmega8 mikrokontrolleri (keyingi o'rinlarda MK) haqida gapirib beraman. Aslida, Atmel AVR oilasining butun MK seriyasini ishlab chiqaradi - bular Tiny va Mega subfamiliyalari. Men ba'zi MKlarning afzalliklarini tasvirlamayman; Katta oilaning ba'zi vakillari:

Shunday qilib, ATmega8, barcha ATmegaslarning eng oddiy MK:

Keling, soddalashtirilgan strukturaviy diagramma yordamida ichki qismlarni o'rganishni boshlaylik:

Bu barcha ATmega ning umumlashtirilgan diagrammasi.

Barcha AVR mikrokontrollerlari Garvard arxitekturasi deb ataladigan bo'yicha qurilgan, ya'ni dastur xotirasi va ma'lumotlar xotirasining alohida adreslanishi qo'llaniladi. Ushbu arxitekturaning afzalliklari tezlikni oshirishdir, masalan, ATmega har bir taktli impulsda bitta buyruqni bajaradi, ya'ni 16 MGts chastotada MK soniyada 16 million operatsiyani bajaradi.

Va endi navbat bilan tripe haqida.
1. Soat generatori barcha ichki qurilmalarni sinxronlashtiradi.
2. ROM faqat o'qish uchun mo'ljallangan xotira qurilmasi bo'lib, dasturlar va o'zgarmas ma'lumotlarni (doimiy) saqlash uchun ishlatiladi.
3. Buyruq dekoderi - u bu erda eng muhimi, u qo'liga kelgan hamma narsani boshqaradi.
4. ALU – sonlar ustida arifmetik (qo‘shish, ayirish va hokazo) va mantiqiy (VA, OR, EMAS, XOR) amallarni bajaradigan arifmetik-mantiqiy qurilma.
5. RON - umumiy maqsadli registrlar, ALU ular bilan ishlaydi va ma'lumotlarni vaqtincha saqlash uchun ham ishlatiladi. RON registrlari juftlik registrlariga birlashtirilishi mumkin:
r26: r27 – X;
r28: r29 – Y;
r30: r31 - Z.

Register juftlari RAMdagi ma'lumotlarni bilvosita manzillash uchun ishlatiladi.
6. RAM - bu ma'lumotlarni, massivlarni va steklarni saqlash uchun foydalaniladigan tasodifiy xotira qurilmasi.
7. PORTA-PORTn – tashqi dunyo bilan aloqa, kirish/chiqish portlari, yaxshi, nima uchun...
8. Maxsus UVV - bu maxsus kirish/chiqish qurilmalari, turli xil tashqi qurilmalarning kontrollerlari, masalan, USART (shuningdek, MAQOMOTI porti sifatida ham tanilgan), ba'zan USB, ADC, DAC, I2C, qisqasi, nima bo'lishidan qat'i nazar...

Xo'sh, ha, bularning barchasi nazariya, lekin siz nimanidir birlashtirishni, sinab ko'rishni va uni amalga oshirishni kutolmaysiz! Keyin bizga kerak bo'lgan narsalarni sanab o'tamiz:

1. Tegishli dasturiy ta'minotga ega dasturchi, men bu haqda oxirgi maqolada yozganman;
2. C tili kompilyatori Code Vision AVR MK uchun dasturlarni ishlab chiqish uchun yaxshi vositalarga ega;

C tilida dasturlashni boshlashdan oldin, ushbu til bo'yicha ba'zi adabiyotlar bilan tanishib chiqsangiz yaxshi bo'lardi, masalan, Kernighan va Ritchining "The C Language" nomli ajoyib kitobi bor.

Mayli, boshlaylik...

Sinov sxemasi.

Keling, ushbu diagrammani yig'amiz:

Bu asosiy model bo'ladi. Aytgancha, sxemani non taxtasiga yig'ish va MKni rozetkaga qo'yish yaxshiroqdir. Ammo bunday sxema ma'nosizdir. Keling, masalan, LEDni qo'shamiz va oqim cheklovchi qarshilik haqida unutmang. Keling, uni B portining nol piniga ulaymiz.
Diagramma quyidagicha ko'rinadi:

Quvvatni yoqamiz... NO!!! Dastursiz nimani xohlardingiz?
Ma’nosi…

Keling, dastur yozamiz!

Shunday qilib, siz CVAVRni ishga tushirdingiz, birinchi navbatda nima qilishingiz kerak? Asboblar panelidagi tishli tugmani bosish orqali Code Wizard AVR-ni ishga tushiring, sehrgar oynasi paydo bo'ladi:

Bu erda biz MK turini va soat chastotasini tanlaymiz. Keyin, Portlar yorlig'iga o'ting:

Va biz qaysi portning qaysi biti kirish yoki chiqish uchun sozlanishini sozlaymiz, B bit 0 porti signal chiqaradi, qolganlari esa qabul qiladi.
Sozlamalarni saqlash uchun Fayl / Saqlash va chiqish menyusini tanlang, keyingi barcha so'rovlar uchun fayl nomlarini kiriting, ular bir xil bo'lishi kerak, masalan, "prj". Hammasi shunday, biz sehrgarda ko'rsatilgan sozlamalar bilan dasturning manba matnini yaratdik.

Keling, nima borligini ko'rib chiqaylik. Birinchi 22 satr sharhdir, ya'ni u dasturning harakatlariga ta'sir qilmaydi, shuning uchun "/*" va "*/" orasidagi hamma narsa sharhdir va kompilyator bu narsaga e'tibor bermaydi. 24-mudda biz sarlavha faylini kiritamiz, unda qanday registrlar chaqirilishi va ular qaysi manzilda joylashganligi tasvirlangan. C dasturlash uchun bu erda tafsilotlar kerak emas.
28-qatordan boshlab biz asosiy dasturni funktsiyaning ta'rifi bilan boshlaymiz asosiy(),

Keling, pastga aylantiramiz. 36 va 37-qatorlarga e'tibor bering, bu erda B portiga qiymat beriladi va uzatish yo'nalishi tanlanadi. Umuman olganda, u quyidagicha ko'rinadi:

Ya'ni, agar DDRB registrining istalgan bitiga bitta yozilgan bo'lsa, u holda B portining mos biti chiqish sifatida ishlaydi. Bizning holatlarimizda bu bit 0.
Aytgancha, ATmega-dagi portlar bitta yoqimli xususiyatga ega: port kiritish uchun sozlangan bo'lsa ham va PORTx registriga yozilgan bo'lsa ham, ichki tortishish rezistorlari quvvat manbaiga ijobiy ulanadi, bu esa foydalanishni bartaraf etadi. tashqi osma rezistorlar. Bu har qanday sensorlar va tugmalarni ulashda qulaydir.

Buni amalga oshirish uchun dasturni kompilyatsiya qilamiz, Loyihani yaratish tugmachasini bosing yoki Project / Make menyusi orqali; Agar biror narsani o'zgartirmasangiz, hech qanday xato bo'lmasligi kerak.

C:\cvavr\bin\ jildini oching va u erda prj.hex faylini toping. Bu biz MK uchun tuzgan dastur. Keling, dasturchini shaxsiy kompyuter va MK ga ulaymiz. Pony Prog dasturini ishga tushiramiz va uning oynasiga prj.hex faylini tortamiz. MK ga quvvatni yoqing va dasturimizni unga yuklang ... Yana hech narsa yo'qmi? Ammo muammo shundaki, biz B portining nol bitiga hech narsa chiqarmadik, aniqrog'i, biz uni chiqardik, faqat u nolga teng. Va bizning LED yonishi uchun biz bittasini chiqarishimiz kerak. Keling, buni qilaylik, 36-qatordagi "PORTB = 0x00;" ni almashtiring "PORTB=0x01;" ga. Keling, dasturni yana kompilyatsiya qilaylik. Va Pony Prog dasturida biz Ctrl+L klaviatura yorlig'i yoki Fayl / Fayllarni qayta yuklash menyusi yordamida faylni qayta yuklaymiz. Keling, MK-ni o'chiramiz va unga proshivkani qayta yuklaymiz. HOOR!!! ISHLAMOQDA!!!

Aytgancha, Pony Prog skriptlarni qo'llab-quvvatlaydi va qayta yuklash, o'chirish va yozish haqida tashvishlanmaslik uchun siz shunchaki .e2s kengaytmasi bilan skript yozishingiz va uni, masalan, prog.e2s deb nomlashingiz mumkin. Buni bloknot yordamida qilishingiz mumkin. Uning mazmuni quyidagicha bo'ladi:

ATMEGA8 QURILMANI SELECT
CLEARBUFFER
PRj.hex ni yuklash
HAMMANI OʻCHIRISh
HAMMANI YOZING

Skript .hex fayli bilan bir xil papkaga joylashtirilishi va uni ikki marta bosish orqali ishga tushirilishi kerak. Ish stolingizga yorliqni joylashtirishingiz mumkin, bu qanchalik qulayligiga qarab...

Davomi bor…