Atmega8 mikrokontrollerlari. Yangi boshlanuvchilar uchun Atmega8 dasturlash

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 elektr qurilmalarini boshqarish uchun mo'ljallangan chip. Klassik kontroller bir chipda protsessor va masofaviy qurilmalarning ishlashini birlashtiradi va tasodifiy kirish xotira qurilmasini o'z ichiga oladi. Umuman olganda, bu nisbatan oddiy vazifalarni bajara oladigan yagona chipli shaxsiy kompyuter.

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, elektr maishiy texnika - mikroto'lqinli pechlar, kir yuvish mashinalari va boshqalarda qo'llaniladi. Mikrokontrollerlar sanoat mexanikasida ham keng qo'llaniladi, mikrorelelardan tortib stanoklarni boshqarish texnikasigacha.

AVR mikrokontrollerlari

Keling, AVR kabi zamonaviy texnologiyalar olamida keng tarqalgan va yaxshi o'rnatilgan kontroller bilan tanishaylik. 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

Mutlaqo, istisnosiz, Mega tipidagi mikrokontrollerlar mustaqil kodlash xususiyatiga ega, ularning haydovchi xotirasi tarkibiy qismlarini tashqi yordamisiz o'zgartirish imkoniyati mavjud. Bu o'ziga xos xususiyat ularning yordami bilan juda moslashuvchan kontseptsiyalarni shakllantirish imkonini beradi va ularning ishlash usuli tashqi yoki ichki hodisalar bilan belgilanadigan ma'lum bir 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. ). Bu xususiyat himoya qilish uchun xotirada dublikat port komponentiga ega bo'lish zaruratini yo'q qiladi, shuningdek, tashqi qurilmalar bilan birgalikda mikrokontrollerning energiya samaradorligini tezlashtiradi, ya'ni tashqarida elektr bilan bog'liq muammolar yuzaga kelganda.

Barcha AVR mikrokontrollerlari ko'p bosqichli bostirish texnologiyasiga ega. U ustuvor bo'lgan 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 mikrokontrolleriga asoslangan hunarmandchilik

AVR mikrokontrollerlaridan foydalangan holda DIY qo'l san'atlari soddaligi va kam energiya xarajatlari tufayli tobora ommalashib bormoqda. Ular nima va ularni o'z qo'llaringiz va ongingiz yordamida qanday qilish kerak, quyida ko'ring.

"direktor"

Bunday qurilma o'rmonda yurishni afzal ko'rganlar, shuningdek, tabiatshunoslar uchun kichik yordamchi sifatida ishlab chiqilgan. 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 taniqli 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 harakatlanish moslamasi 4,5 dan 20 voltgacha bo'lgan kuchlanish bilan ishlaydi. Va LI-Ion batareyasining optimal ishlashi uchun siz quvvat kirishidagi xavfsizlik LED-ni 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 yoqish xavfisiz 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 boshlash uchun siz quyidagi materiallar to'plami bilan jihozlangan bo'lishingiz kerak, jumladan: mikrokontroller, uchta qismdan iborat - ATmega8A-PU, ATtiny2313A-PU va ATtiny13A-PU juda mashhur hisoblanadi. va samarali.

Mikrokontrollerga dasturni amalga oshirish uchun sizga dasturchi kerak bo'ladi: USBASP dasturchisi eng yaxshi deb hisoblanadi, bu kelajakda 5 volt kuchlanishni ta'minlaydi. Loyiha natijalarini vizual baholash va xulosa qilish uchun ma'lumotlarni aks ettirish resurslari kerak - bular LEDlar, LED induktori va ekran.


Mikrokontrollerning boshqa qurilmalar bilan aloqa qilish tartiblarini o'rganish uchun sizga DS18B20 raqamli harorat moslamasi va to'g'ri vaqtni ko'rsatadigan DS1307 soati kerak. Bundan tashqari, tranzistorlar, rezistorlar, kvarts rezonatorlari, kondansatörler, tugmalar bo'lishi muhimdir.

Tizimlarni o'rnatish uchun sizga namunaviy o'rnatish taxtasi kerak bo'ladi. Mikrokontrolörda dizaynni qurish uchun siz lehimsiz yig'ish uchun non taxtasidan va buning uchun o'tish moslamalari to'plamidan foydalanishingiz kerak: MB102 namunali taxtasi va bir nechta turdagi - elastik va qattiq, shuningdek, U shaklidagi plataga 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 kuchsiz uzluksiz oqim elektr motorini boshqarish imkonini beradi.

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

Qurilma 43 x 43 mm o'lchamdagi bosilgan elektron plataga o'xshaydi va uning ustiga balandligi 24 millimetr va og'irligi 25 gramm bo'lgan radiator mini sxemasi 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 foydalanish, dasturlash qoidalari va tavsiyalariga rioya qilish orqali siz nafaqat kundalik hayotda, balki professional faoliyatda va oddiygina kundalik hayotda ham foydali narsalarni osongina olishingiz mumkin.

Mikrokontroller sxemalari, proshivka va avtomobil uchun fotosuratlar bilan maqolalar va tavsiflar.

ATmega8 mikrokontrolleridagi oddiy takometr

Taxometr avtomobillarda aylanishga qodir bo'lgan har qanday qismlarning aylanish tezligini o'lchash uchun ishlatiladi. Bunday qurilmalar uchun ko'plab variantlar mavjud, men AVR mikrokontrolleri ATmega8-da variantni taklif qilaman. Mening variantim uchun siz ham ...

To'liq o'qing

Avtomobildagi Attiny45 mikrokontrolleridagi rangli musiqa

Kichik o'lchamli va 12V quvvat manbaiga ega bo'lgan bu rangli musiqa muqobil ravishda har qanday tadbirlar uchun avtomobilda ishlatilishi mumkin. Ushbu diagrammaning asosiy manbai 5-sonli radio, 2013 A. LAPTEV, Zyryanovsk, Qozog'iston. Sxema…

To'liq o'qing

Isitish oynasi va orqa oynani boshqarish moslamasi

Bir tugma bilan isitiladigan orqa oyna va nometalllarni alohida boshqarish imkonini beradi, shuningdek, har bir kanal uchun bir yarim soatgacha bo'lgan moslashtirilgan o'chirish taymeri. Sxema ATtiny13A mikrokontrollerida qurilgan. Ish tavsifi:

To'liq o'qing

Avtomobil chiroqlari uchun dimmer

Deyarli barcha avtomobillarda bort kompyuteri yoki alohida bort tizimi yordamida amalga oshiriladigan ichki yorug'lik nazorati mavjud. Chiroq muammosiz yonadi va ma'lum bir kechikish bilan ham o'chadi (uchun...

To'liq o'qing

Mobil telefonda bildirishnoma bilan GSM signalizatsiya tizimi

Men ATmega8 mikrokontrolleriga asoslangan juda mashhur avtomobil signalizatsiya sxemasini taqdim etaman. Bunday signal administratorning mobil telefoniga qo'ng'iroqlar yoki SMS ko'rinishida ogohlantirish beradi. Qurilma mobil telefon bilan integratsiyalashgan ...

To'liq o'qing

Mikrokontrollerda miltillovchi stopak

Men miltillovchi stopakning yangi versiyasini yaratdim. Ishlash algoritmi va boshqaruv sxemasi boshqacha, o'lcham va ulanish bir xil. Miltillash chastotasini, doimiy yorug'likka o'tishgacha bo'lgan vaqtni va ish aylanishini sozlash mumkin...

To'liq o'qing

DRL plus stroblar

Ushbu hunarmandchilik sizga LED DRL-larni strobe qilish imkonini beradi. Hunarmandchilik hajmi kichik, faqat bitta tugma bilan boshqariladi va keng sozlash imkoniyatlariga ega. Kengash o'lchami 30 dan 19 millimetrga teng. Orqa tomonda terminal bloki mavjud ...

To'liq o'qing

Biz eshikni signal tizimiga yaqinroq qilamiz va ulaymiz

Avtomatik oynali avtomashinalar soni doimiy ravishda o'sib bormoqda va mashinada bitta bo'lmasa ham, ko'pchilik uni o'zlari ishlab chiqaradi. Maqsadim shunday qurilma yig‘ish va uni...

To'liq o'qing

LEDlar tezlikka qarab yonadi

Bu "qo'shimcha mahsulot" bo'lib chiqdi: 5x7 matritsada viteslarni ko'rsatish loyihasi uchun tezlik sensori ish rejimini sinab ko'rish kerak edi, buning uchun men kichik sxemani yig'dim. O'chirish LEDlarni yoqishi mumkin ...

To'liq o'qing

AVR mikrokontrolleridagi raqamli takometr (ATtiny2313)

Taxometr avtomobilning qismlari, mexanizmlari va boshqa qismlarining aylanish tezligini o'lchaydi. Taxometr ikkita asosiy qismdan iborat - aylanish tezligini o'lchaydigan sensor va displey, bu erda ...

To'liq o'qing

ATmega8 mikrokontrolleridagi oddiy raqamli spidometr

Spidometr - bu avtomobil tezligini aniqlash uchun o'lchash moslamasi. O'lchov usuliga ko'ra, bir necha turdagi tezlik o'lchagichlari mavjud: markazdan qochma, xronometrik, tebranish, induksiya, elektromagnit, elektron va nihoyat GPS spidometrlari.

To'liq o'qing

Mikrokontrollerda tartibni silliq yoqish

Ushbu versiyada biroz boshqacha tartib mavjud: ikkinchi sozlash tugmasi qo'shildi va ateşleme tezligi potansiyometri olib tashlandi. Xususiyatlari: Ikki alohida mustaqil kanal. Har bir kanal uchun sozlanishi parametrlarning uchta guruhi mavjud: boshlanishidan oldin kechikish vaqti...

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 ob'ekt faylini o'z ichiga olishi mumkin va undan foydalanish qoidalari biz kiritgan delay.h faylida tasvirlangan.

PORTB=0x00;
DDRB=0x00;

Nazoratchi 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 almashinish 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 siklni ifodalaydi, 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 - asosiy protsedura, dasturning bajarilishi undan boshlanadi, void so'zma-so'z hech narsa (nol turdagi) degan ma'noni anglatadi, 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 pozitsiyada bo'sh joyni ba'zi bir tur bilan almashtirish, bu konstruktsiya protsedura emas, balki funktsiya ekanligini va qiymatni qaytarishi mumkinligini anglatadi, 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.
Texnologik ilovalarda kodni soddalashtirish va qisqartirish uchun 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 sw konstantasidagi signallar haqidagi ma'lumotlarning 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 resurslari ishlatilgan bo'lsa, bu misolda analoglar - ADC ishlatiladi. Analog-raqamli konvertor analog signalni ma'lum bir namuna olish chastotasi bilan raqamli kodga diskret aylantirish uchun mo'ljallangan. Yangi boshlanuvchilar uchun men faqat maksimal raqamlashtirish tezligi cheklanganligini aytaman.

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 tushirilishi
//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 = ADC0, ADC1, PC2, PC3 PUP bilan sozlash 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 raqami 5 volt / 1024 soni = 0,0048828 (~ 10 ADC hisobi) ko'paytmasi sifatida qabul qilinadi va keyin kerakli kirish voltajida oxirgi segmentning yonishini olish uchun eksperimental ravishda 0,32 ga ko'paytiriladi.



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 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 ATmega-larning 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 (doimiylarni) 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 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, Kernigan 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 registrlari bittalarga 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\ papkasini ochamiz, u yerda prj.hex faylini topamiz. 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 atashingiz mumkin. Buni bloknot yordamida qilishingiz mumkin. Uning mazmuni quyidagicha bo'ladi:

ATMEGA8 qurilmasini tanlang
CLEARBUFFER
PRj.hex ni yuklash
HAMMANI OʻCHIRISh
HAMMANI YOZING

Skriptni .hex fayli bilan bir xil papkaga joylashtiring va uni ikki marta bosish orqali ishga tushiring. Ish stolingizga yorliqni joylashtirishingiz mumkin, bu qanchalik qulayligiga qarab...

Davomi bor…

Umumiy ma'lumot

Arduino boshqaruvchisining ushbu versiyasi, agar eng oddiy bo'lmasa ham, o'z-o'zini ishlab chiqarish uchun eng qulay hisoblanadi. U ATMega8 kontrolleridagi allaqachon klassik Arduino sxemasiga asoslangan.

Hammasi bo'lib ikkita variant ishlab chiqilgan:

  • Modulli
  • Yagona taxta

Modulli variant

Ushbu kontroller versiyasi uchta platadan iborat:

Yagona taxtali variant

Hammasi bir xil, faqat bitta taxtada:

Kengash bir tomonlama folga PCB dan tayyorlangan va uyda, masalan, LUT texnologiyasidan foydalangan holda takrorlanishi mumkin. Kengash o'lchamlari: 95x62

Mikrokontroller dasturlash

Doskani yig'gandan so'ng, siz kontrollerni "miltillatishingiz" kerak, unga "bootloader" ni yuklashingiz kerak. Buning uchun sizga dasturchi kerak bo'ladi. Biz toza ATMega8 tipidagi kontrollerni olamiz, uni dasturchiga o'rnatamiz va kompyuterga ulaymiz. Men ATMega8-48-88-168 adapteri bilan AVR ISP mkII dasturchisidan foydalandim. Biz Arduino IDE-dan foydalanib dasturlashamiz, u avtomatik ravishda kerakli sug'urta bitlarini o'rnatadi. Bu ketma-ketlik:

1. Dasturchini tanlang (Xizmat > Dasturchi > AVRISP mkII). Agar ushbu dasturchi birinchi marta ishlatilsa, AVRISP-MKII-libusb-drv.zip drayverini o'rnatishingiz kerak. Agar siz AVRISP mkII dan boshqa dasturchidan foydalanayotgan bo'lsangiz, u holda ro'yxatdan o'zingizga kerakli dasturni tanlashingiz kerak.

2. Mikrokontroller uchun platani tanlash (Asboblar > Kengash > Arduino NG yoki ATmega8 bilan eski). Agar siz ATmega8 dan boshqa mikrokontrollerdan foydalansangiz, unga mos keladigan platani tanlashingiz kerak.

3. Record bootloader (Asboblar > Record bootloader).

4. Doskaga kontrollerni o'rnating va tamom, Arduino ishlashga tayyor.