Мазмуну:

AVR Microcontroller Fuse Bits конфигурациясы. Микроконтроллердин флэш -эс тутумуна LEDдин жаркылдаган программасын түзүү жана жүктөө: 5 кадам
AVR Microcontroller Fuse Bits конфигурациясы. Микроконтроллердин флэш -эс тутумуна LEDдин жаркылдаган программасын түзүү жана жүктөө: 5 кадам

Video: AVR Microcontroller Fuse Bits конфигурациясы. Микроконтроллердин флэш -эс тутумуна LEDдин жаркылдаган программасын түзүү жана жүктөө: 5 кадам

Video: AVR Microcontroller Fuse Bits конфигурациясы. Микроконтроллердин флэш -эс тутумуна LEDдин жаркылдаган программасын түзүү жана жүктөө: 5 кадам
Video: Fuse Bits and Lock Bits of ATmega32, Format of Fuse Byte of ARmega32, AVR Microcontroller 2024, Ноябрь
Anonim
Image
Image

Бул учурда биз C кодунда жөнөкөй программа түзүп, аны микроконтроллердин эсине жазабыз. Биз өзүбүздүн программабызды жазабыз жана Hex файлын түзөбүз, интеллектуалдык өнүктүрүү платформасы катары Atmel Studio колдонобуз. Биз өзүбүздүн программистибизди жана AVRDUDE программалык камсыздообузду колдонуп, сактандыруучу биттерди конфигурациялап, он алтылык файлды AVR ATMega328P микроконтроллеринин эсине жүктөйбүз.

AVRDUDE - Atmelдин AVR микроконтроллерлеринин чиптериндеги эскерүүлөрдү жүктөө жана жүктөө үчүн программа. Ал Flash жана EEPROMду программалай алат жана сериялык программалоо протоколу колдогон жерде, ал сактандыруучу жана кулпулоочу биттерди программалай алат.

1 -кадам: Программаны жазуу жана Hex файлын түзүү, Atmel студиясын колдонуу

Программаны жазуу жана Hex файлын түзүү, Atmel студиясын колдонуу
Программаны жазуу жана Hex файлын түзүү, Atmel студиясын колдонуу
Программаны жазыңыз жана Hex файлын түзүңүз, Atmel студиясын колдонуңуз
Программаны жазыңыз жана Hex файлын түзүңүз, Atmel студиясын колдонуңуз

Эгерде сизде Atmel Studio жок болсо, аны жүктөп алып, орнотушуңуз керек:

Бул долбоор C колдонот, андыктан жылаңач сөөк аткарылуучу долбоорду түзүү үчүн шаблон тизмесинен GCC C Executable Project опциясын тандаңыз.

Андан кийин, долбоор кайсы түзмөк үчүн иштелип чыгарын тактоо керек. Бул долбоор AVR ATMega328P микроконтроллери үчүн иштелип чыгат.

Программанын кодун Atmel Studioнун Негизги Булак Редакторуна териңиз. Негизги булак редактору - Бул терезе учурдагы долбоордогу булак файлдарынын негизги редактору. Редактордо орфографияны текшерүү жана автоматтык түрдө толуктоо функциялары бар.

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

#ifndef F_CPU

#define F_CPU 16000000UL // контроллердин кристаллдык жыштыгын айтуу (16 MHz AVR ATMega328P) #endif

2. Биз глобалдык өзгөрмөлөрдү жана функцияларды аныктаган башка файлдардан маалыматты камтыган преамбуланы киргизебиз.

#include // header, пиндердин үстүндө маалымат агымын башкарууну иштетүү үчүн. Пиндерди, портторду ж.

Программада кечигүү функциясын иштетүү үчүн #include // header

3. Преамбуладан кийин main () функциясы келет.

int main (жараксыз) {

Main () функциясы уникалдуу жана башка бардык функциялардан айырмаланат. Ар бир C программасында так бир main () функциясы болушу керек. Main () - бул AVR сиздин кодуңузду биринчи жолу иштете баштаганда, бул программанын кирүү чекити.

4. Портбдун 0 пинин чыгаруу катары коюңуз.

DDRB = 0b00000001; // PORTB1ди чыгаруу катары коюңуз

Биз муну Маалыматтын Б регистрине В экилик санын жазуу менен жасайбыз. Берилиштердин Б регистри В бизге В регистринин биттерин киргизүүгө же чыгарууга мүмкүнчүлүк берет. 1 жазуу аларды чыгарууга, ал эми 0 аларды киргизүүгө мүмкүндүк берет. Чыгуу катары иштөө үчүн LED тиркеп жаткандыктан, биз экилик номерди жазабыз, жана PORT B пинин 0 чыгаруу катары чыгарабыз.

5. Loop.

учурда (1) {

Бул билдирүү көбүнчө негизги цикл же окуя цикли деп аталат. Бул код дайыма туура; ошондуктан, чексиз циклде кайра -кайра аткарат. Ал эч качан токтобойт. Демек, LED микроконтроллерден өчпөсө же программанын эстутумунан коду өчпөсө, чексиздикте жаркырайт.

6. PB0 портуна тиркелген LEDди күйгүзүңүз

PORTB = 0b00000001; // PB0 портуна тиркелген LEDди күйгүзөт

Бул линия, PortBнин PB0 1ин берет. PORTB-бул AVR чипиндеги аппараттык реестр, анын ичинде 8 казык бар, PB7-PB0, солдон оңго барат. Аягына 1 коюу PB0го 1 берет; бул аны күйгүзүүчү PB0 бийиктигин орнотот. Ошондуктан, PB0 төөнөгүчүнө тиркелген LED күйүп жана күйөт.

7. Кечиктирүү

_delay_ms (1000); // 1 секунддук кечигүүнү жаратат

Бул билдирүү 1 секунддук кечигүүнү жаратат, андыктан LED так 1 секундага күйүп калат.

8. Бардык B казыктарын өчүрүңүз, анын ичинде PB0

PORTB = 0b00000000; // Бардык B казыктарын өчүрөт, анын ичинде PB0

Бул линия бардык 8 Port B казыктарын өчүрөт, ошондуктан PB0 да өчүп калат, ошондуктан LED өчөт.

9. Дагы бир кечигүү

_delay_ms (1000); // дагы 1 секунддук кечигүүнү жаратат

Туура 1 секундга өчүрүлөт, циклди кайра баштоо алдында жана кайра күйгүзүүчү линияга туш болуу алдында, процессти кайра кайталап. Бул чексиз болот, ошондуктан LED дайыма өчүп -күйүп турат.

10. Кайтаруу билдирүүсү

}

return (0); // бул линияга эч качан жеткен эмес}

Биздин коддун акыркы сабы return (0) билдирүүсү. Бул код эч качан аткарылбаса да, эч качан бүтпөгөн чексиз цикл бар, анткени рабочий компьютерлерде иштеген программаларыбыз үчүн, иштөө тутуму туура же туура эмес иштегенин билиши маанилүү. Ушул себептен улам, биздин түзүүчү GCC ар бир main () кайтаруу коду менен бүтүшүн каалайт. Артка кайтаруу коддору AVR кодунун кереги жок, ал ар кандай колдоочу операциялык тутумдун өз алдынча иштейт; ошентсе да, эгер сиз main (return) менен бүтпөсөңүз, компилятор эскертүү берет.

Акыркы этап - бул долбоорду куруу. Бул аткарылуучу файлды (.hex) түзүү үчүн бардык объект файлдарын түзүү жана акыры шилтемелөө дегенди билдирет. Бул он алтылык файл Проект папкасынын ичиндеги Debug папкасында түзүлөт. Бул он алтылык файл микроконтроллердин чипине жүктөөгө даяр.

2 -кадам: Микро контроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү

Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү
Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү
Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү
Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү
Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү
Микроконтроллердин сактандыруучу биттеринин демейки конфигурациясын өзгөртүү

Кээ бир сактандыруучу биттер чиптин айрым аспекттерин кулпулоо үчүн колдонулушу мүмкүн экенин эстен чыгарбоо керек жана аны кирпичке салышы мүмкүн (аны жараксыз кылып коюшу мүмкүн)

ATmega328Pде колдонулган 19 сактандыруучу бит бар жана алар үч башка сактандыруучу байтка бөлүнгөн. Сактандыруучу биттердин үчөө "Узартылган сактандыруучу байтта", сегизинде "Жогорку сакталуучу байтта" жана дагы сегизинде "Фейстин аз байтында" камтылган. Кулпу биттерин программалоо үчүн колдонулган төртүнчү байт дагы бар.

Ар бир байт 8 бит жана ар бир бит өзүнчө жөндөө же желек. Орнотуу, орнотуу эмес, программаланган, программаланган эмес, биз экиликти колдонуп жатканыбыз жөнүндө сөз болгондо. 1 коюлган эмес, программаланган эмес жана нөл коюлган, программаланган дегенди билдирет. Сактандыргычтарды программалоодо экилик нота же көбүнчө он алтылык белгилерди колдоно аласыз.

ATmega 328P чиптеринде 8 МГц жыштыгы бар RC осциллятору орнотулган. Жаңы чиптер бул топтом менен сааттын булагы катары жөнөтүлөт жана CKDIV8 сактандыргычы активдүү, натыйжада 1 МГц тутумдук саат пайда болот. Иштетүү убактысы максимумга коюлган жана күтүү мөөнөтү иштетилген.

Жаңы ATMega 328P чиптеринде негизинен төмөнкү сактандыруучу орнотуулар бар:

Төмөн сактандыргыч = 0x62 (0b01100010)

Жогорку сактандыргыч = 0xD9 (0b11011001)

Узартылган сактандыргыч = 0xFF (0b11111111)

Биз ATmega 328 чипин 16 МГц тышкы кристалл менен колдонобуз. Ошондуктан, биз "Fuse Low Byte" биттерин ошого жараша программалашыбыз керек.

1. 3-0 биттери осциллятордун тандоосун көзөмөлдөйт жана 0010дун демейки жөндөөсү-биз каалабаган калибрленген ички RC осцилляторун колдонуу. Биз аз кубаттуу кристалл осцилляторунун иштешин 8.0дан 16.0 МГцке чейин каалайбыз, андыктан 3-1 биттери (CKSEL [3: 1]) 111ге коюлушу керек.

2. 5 жана 4-биттер ишке кирүү убактысын көзөмөлдөйт, жана 10дун демейки жөндөөсү өчүрүү жана энергияны үнөмдөө боюнча алты сааттын циклинин башталышын кечиктирүү үчүн, ошондой эле 14 саат циклинин кошумча баштоо кечигүүсү жана 65 миллисекунд баштапкы абалга келтирилет.

Аз кубаттуулуктагы кристалл осцилляторунун коопсуз жагында болуу үчүн, биз максималдуу кечигүүнү 16000 сааттын циклинин өчүрүлүшүнөн жана энергияны үнөмдөөнүн болушун каалайбыз, андыктан SUT [1] 1ге коюлушу керек жана кошумча ишке киргизүү кечигүүсү 14 сааттык цикл жана 65 миллисекунд баштапкы абалга келтирилет, андыктан SUT [0] 1ге коюлушу керек. Мындан тышкары, CKSEL [0] 1ге коюлушу керек.

3. Бит 6 бизди кызыктырбаган PORTB0го сааттын чыгышын көзөмөлдөйт. Ошентип, бит 6ны 1ге коюуга болот.

4. 7-бит 8-ге бөлүү ишин көзөмөлдөйт жана демейки 0 жөндөөлөрү иштетилген, биз каалабайбыз. Ошентип, 7 битти 0дон 1ге өзгөртүү керек.

Ошондуктан, жаңы Fuse Low Byte 11111111 болушу керек, ал он алтылыкта 0xFF болуп саналат

"Fuse Low Byte" биттерин программалоо үчүн биз программистибизди (https://www.instructables.com/id/ISP-Programmer-fo…) жана AVRDUDE программасын колдоно алабыз. AVRDUDE-бул Atmel микроконтроллерлеринен жүктөө жана жүктөө үчүн колдонулуучу командалык сап.

AVRDUDE жүктөп алыңыз:

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

Текстти avrdude.conf конфигурация файлына чаптаңыз:

# ISPProgv1

программист id = "ISPProgv1"; desc = "serial port banging, reset = dtr sck = rts mosi = txd miso = cts"; түрү = "serbb"; connection_type = сериялык; баштапкы абалга келтирүү = 4; sck = 7; mosi = 3; miso = 8;;

AVRDUDE иштетүүдөн мурун, схемага ылайык, микроконтроллерди программистке туташтырышыбыз керек

DOS чакыруу терезесин ачыңыз.

1. Программисттин тизмесин көрүү үчүн avrdude колдоого алынат avrdude -c c. Эгерде баары ойдогудай болсо, тизмеде "ISPProgv1" программисти id болушу керек

2. Avrdude колдоого алынган Atmel түзмөктөрүнүн тизмесин көрүү үчүн avrdude -c ISPProgv1 буйругу. Тизмеде Atmel ATMega 328P үчүн m328p түзмөгү болушу керек.

Андан кийин, avrdude -c ISPProgv1 –p m328p териңиз, команда avrdudeга кайсы программист колдонулганын жана Atmel микроконтроллери тиркелгенин айтат. Бул он алтылык белгилөөдө ATmega328P колтамгасын көрсөтөт: 0x1e950f. Бул учурда ATmega328Pтеги он сегиздик белгилерде сакталган бит программалоону көрсөтөт; бул учурда, камсыздандыруу байттары заводдун демейки боюнча программаланган.

Андан кийин, avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m териңиз, бул avrdudeга кайсы программист колдонулуп жатканын жана Atmel микроконтроллери эмне тиркелгенин айтуу жана Fuse Low Byte'ди 0xFFге өзгөртүү буйругу.

Эми сааттык сигнал аз кубаттуу кристалл осцилляторунан келиши керек.

3 -кадам: Программаны ATMega328P микроконтроллеринин эсине өрттөө

Программаны ATMega328P микроконтроллеринин эсине өрттөө
Программаны ATMega328P микроконтроллеринин эсине өрттөө
Программаны ATMega328P микроконтроллеринин эсине өрттөө
Программаны ATMega328P микроконтроллеринин эсине өрттөө

Биринчиден, биз көрсөтмөнүн башында жасалган программанын он алтылык файлын AVRDUDE каталогуна көчүрүңүз.

Андан кийин, DOS чакыруу терезесине avrdude –c ISPProgv1 –p m328p –u –U жаркылдоо командасын териңиз: w: [hex файлыңыздын аты]

Буйрук он алтылык файлды микроконтроллердин эсине жазат. Эми микроконтроллер биздин программанын көрсөтмөсүнө ылайык иштейт. Кел, аны текшерип көрөлү!

4 -кадам: Микроконтроллердин Программабыздын Нускамаларына ылайык иштээрин текшериңиз

Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз
Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз
Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз
Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз
Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз
Программабыздын көрсөтмөлөрүнө ылайык Микроконтроллердин иштешин текшериңиз

AVR Blinking LED Circuit схемасына ылайык компоненттерди туташтырыңыз

Биринчиден, бардык AVR микросхемалары сыяктуу, биз бийликке муктажбыз. Болжол менен 5 вольт кубаты AVR чипинин иштеши үчүн жетиштүү. Сиз муну батареядан же туруктуу токтун булагынан ала аласыз. Биз +5V кубатын 7 -пинге жана 8 -пинди тактадагы жерге туташтырабыз. Эки казыктын ортосунда, биз AVR чипи жылмакай электр линиясын алышы үчүн, электр менен камсыздоонун кубатын жумшартуу үчүн 0.1μF керамикалык конденсаторду жайгаштырабыз.

10KΩ каршылыгы түзмөккө Power On Reset (POR) менен камсыз кылуу үчүн колдонулат. Күч күйгүзүлгөндө, конденсатордун чыңалуусу нөлгө барабар болот, андыктан түзмөк баштапкы абалга келтирилет (баштапкы абалга келтирүү активдүү эмес), андан кийин конденсатор VCCге заряддалат жана баштапкы абалга келтирүү өчүрүлөт.

Биз LED анодун AVR пин PB0 туташтырабыз. Бул ATMega328Pтин 14 -пини. Бул светодиод болгондуктан, биз күйүп кетпеш үчүн светодиоддун агымын чектегибиз келет. Мына ушундан улам биз LED менен катар 330Ω каршылыгын койдук. LEDдин катоду жерге туташат.

16 MHz кристаллы Atmega328 микроконтроллеринин саатын камсыздоо үчүн колдонулат жана 22pF конденсаторлору кристаллдын ишин турукташтыруу үчүн колдонулат.

Бул LEDдин жарыгы үчүн зарыл болгон бардык байланыштар. Электр камсыздоо.

Макул. LED бир секундага кечигүү менен жаркырап турат. Микроконтроллердин иши биздин милдеттерге туура келет

5 -кадам: Жыйынтык

Ырас, бул бир гана LED жарк этүү үчүн узак процесс болгон, бирок чындык, сиз негизги тоскоолдуктарды ийгиликтүү тазаладыңыз: AVR микроконтроллерин программалоо үчүн жабдык платформасын түзүү, интеллектуалдык өнүктүрүү платформасы катары Atmel Studioну колдонуу, AVRDUDE программалык камсыздоо катары AVR микроконтроллерин конфигурациялоо жана программалоо

Эгерде сиз менин микроконтроллердин базалык долбоорлорунан кабардар болуп турууну кааласаңыз, менин YouTube каналыма жазылыңыз! Менин видеолорумду көрүү жана бөлүшүү - бул менин кылган иштеримди колдоо

YouTube FOG каналына жазылыңыз

Сунушталууда: