Съдържание:

Конфигурация на предпазителите на микроконтролера AVR. Създаване и качване във флаш паметта на микроконтролера LED мигащата програма .: 5 стъпки
Конфигурация на предпазителите на микроконтролера AVR. Създаване и качване във флаш паметта на микроконтролера LED мигащата програма .: 5 стъпки

Видео: Конфигурация на предпазителите на микроконтролера AVR. Създаване и качване във флаш паметта на микроконтролера LED мигащата програма .: 5 стъпки

Видео: Конфигурация на предпазителите на микроконтролера AVR. Създаване и качване във флаш паметта на микроконтролера LED мигащата програма .: 5 стъпки
Видео: Контроллер автоматического пуска-останова с часами реального времени DS3231 2024, Юни
Anonim
Image
Image

В този случай ще създадем проста програма в C код и ще я запишем в паметта на микроконтролера. Ще напишем собствена програма и ще компилираме шестнадесетичния файл, използвайки Atmel Studio като интегрирана платформа за разработка. Ще конфигурираме битове за предпазители и ще качим шестнадесетичен файл в паметта на микроконтролера AVR ATMega328P, като използваме собствен програмист и софтуер AVRDUDE.

AVRDUDE - е програма за изтегляне и качване на паметта на чипа на AVR микроконтролерите на Atmel. Той може да програмира Flash и EEPROM, а когато се поддържа от протокола за серийно програмиране, може да програмира предпазители и заключващи битове.

Стъпка 1: Напишете програма и компилирайте шестнадесетичния файл, използвайки Atmel Studio

Писане на програма и компилиране на шестнадесетичния файл с помощта на Atmel Studio
Писане на програма и компилиране на шестнадесетичния файл с помощта на Atmel Studio
Писане на програма и компилиране на шестнадесетичния файл, използвайки Atmel Studio
Писане на програма и компилиране на шестнадесетичния файл, използвайки Atmel Studio

Ако нямате Atmel Studio, трябва да го изтеглите и инсталирате:

Този проект ще използва C, така че изберете опцията GCC C изпълним проект от списъка с шаблони, за да генерирате изпълним проект с голи кости.

След това е необходимо да се уточни за кое устройство ще бъде разработен проектът. Този проект ще бъде разработен за микроконтролера AVR ATMega328P.

Въведете кода на програмата в главния редактор на източници на Atmel Studio. Главният редактор на източника - Този прозорец е основният редактор за изходните файлове в текущия проект. Редакторът има функции за проверка на правописа и автоматично завършване.

1. Трябва да кажем на компилатора с каква скорост работи нашият чип, за да може той да изчисли правилно закъсненията.

#ifndef F_CPU

#define F_CPU 16000000UL // казваща кристална честота на кристала (16 MHz AVR ATMega328P) #endif

2. Включваме преамбюла, където поставяме нашата информация за включване от други файлове, която определя глобалните променливи и функции.

#include // заглавка за активиране на контрола на потока от данни върху щифтове. Определя щифтове, портове и др.

#include // заглавка за активиране на функцията за забавяне в програмата

3. След преамбюла идва функцията main ().

int main (void) {

Функцията main () е уникална и отделена от всички останали функции. Всяка програма на C трябва да има точно една основна () функция. Main () е мястото, където AVR започва да изпълнява кода ви при първото включване на захранването, така че това е входната точка на програмата.

4. Задайте изход 0 на PORTB като изход.

DDRB = 0b00000001; // Задайте PORTB1 като изход

Правим това, като записваме двоично число в регистъра за посока на данни B. Регистърът за посока на данни B ни позволява да правим битовете от регистър B вход или изход. Писането на 1 ги прави изходни, докато 0 ще ги въведе. Тъй като прикрепяме светодиод, който да действа като изход, ние пишем двоично число, като правим щифта 0 на PORT B като изход.

5. Цикъл.

докато (1) {

Това изявление е цикъл, често наричан основен цикъл или цикъл на събития. Този код винаги е верен; следователно, той се изпълнява отново и отново в безкраен цикъл. Никога не престава. Следователно светодиодът ще мига в безкрайност, освен ако захранването не се изключи от микроконтролера или кодът не бъде изтрит от паметта на програмата.

6. Включете LED, прикрепен към порт PB0

PORTB = 0b00000001; // включва светодиод, прикрепен към порт PB0

Тази линия дава 1 на PB0 на PortB. PORTB е хардуерен регистър на AVR чипа, който съдържа 8 пина, PB7-PB0, преминаващи отляво надясно. Поставянето на 1 в края дава 1 на PB0; това задава PB0 високо, което го включва. Следователно светодиодът, прикрепен към щифт PB0, ще се включи и ще светне.

7. Забавяне

_ закъснение_ms (1000); // създава закъснение от 1 секунда

Това изявление създава закъснение от 1 секунда, така че светодиодът да се включва и да свети точно за 1 секунда.

8. Изключете всички B пинове, включително PB0

PORTB = 0b00000000; // Изключва всички B пинове, включително PB0

Тази линия изключва всички 8 пина на порт B, така че дори PB0 е изключен, така че светодиодът се изключва.

9. Още едно забавяне

_ закъснение_ms (1000); // създава още едно 1-секундно забавяне

Изключва се точно за 1 секунда, преди да започне цикъла отново и да срещне линията, която го включва отново, повтаряйки процеса отначало. Това се случва безкрайно, така че светодиодът постоянно мига и изключва.

10. Извлечение за връщане

}

return (0); // този ред никога не е достигнат}

Последният ред на нашия код е оператор return (0). Въпреки че този код никога не се изпълнява, тъй като има безкраен цикъл, който никога не свършва, за нашите програми, които се изпълняват на настолни компютри, е важно операционната система да знае дали са работили правилно или не. Поради тази причина GCC, нашият компилатор, иска всеки main () да завършва с код за връщане. Кодовете за връщане не са необходими за AVR кода, който работи самостоятелно на всяка поддържаща операционна система; въпреки това компилаторът ще изведе предупреждение, ако не завършите main с return ().

Последната стъпка е изграждането на проекта. Това означава компилиране и накрая свързване на всички обектни файлове за генериране на изпълним файл (.hex) файл. Този шестнадесетичен файл се генерира в папката Debug, която е в папката Project. Този шестнадесетичен файл е готов за зареждане в чипа на микроконтролера.

Стъпка 2: Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера

Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера
Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера
Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера
Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера
Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера
Промяна на конфигурацията по подразбиране на предпазителите на микроконтролера

Важно е да запомните, че някои от предпазителите могат да се използват за заключване на определени аспекти на чипа и потенциално могат да го тухлят (да го направят неизползваем)

В ATmega328P се използват общо 19 предпазителя, които са разделени на три различни байта на предпазителя. Три от битовете на предпазителя се съдържат в „Удължен байт на предпазителя“, осем се съдържат в „Байт на предпазителя“и още осем се съдържат в „Нисък байт на предпазителя“. Има и четвърти байт, който се използва за програмиране на заключващите битове.

Всеки байт е 8 бита и всеки бит е отделна настройка или флаг. Когато говорим за настройка, а не настройка, програмирани, непрограмирани предпазители, ние всъщност използваме двоични. 1 означава не е зададено, не е програмирано и нула означава зададено, програмирано. При програмиране на предпазителите можете да използвате двоична нотация или по -често шестнадесетична нотация.

Чиповете ATmega 328P имат вграден RC осцилатор с честота 8 MHz. Новите чипове се доставят с този комплект като източник на часовник и активен предпазител CKDIV8, което води до 1 MHz системен часовник. Времето за стартиране е зададено на максимум, а периодът на изчакване е разрешен.

Новите чипове ATMega 328P обикновено имат следните настройки на предпазители:

Нисък предпазител = 0x62 (0b01100010)

Голям предпазител = 0xD9 (0b11011001)

Удължен предпазител = 0xFF (0b11111111)

Ще използваме чип ATmega 328 с външен 16MHz кристал. Следователно трябва да програмираме съответно битове на "Fuse Low Byte".

1. Битове 3-0 контролират избора на осцилатор, а настройката по подразбиране на 0010 е да използваме калибрирания вътрешен RC осцилатор, който не искаме. Искаме работа с кристален осцилатор с ниска мощност от 8,0 до 16,0 MHz, така че битовете 3-1 (CKSEL [3: 1]) трябва да бъдат настроени на 111.

2. Битове 5 и 4 контролират времето за стартиране, а настройката по подразбиране 10 е за забавяне при стартиране от шест тактови цикъла от изключване и пестене на енергия, плюс допълнително забавяне при стартиране от 14 тактови цикъла плюс 65 милисекунди от нулирането.

За да бъдем сигурни за кристалния осцилатор с ниска мощност, ние искаме възможното максимално забавяне от 16 000 цикъла от изключване и икономия на енергия, така че SUT [1] трябва да бъде зададен на 1, плюс допълнително забавяне при стартиране от 14 тактови цикъла плюс 65 милисекунди от нулирането, така че SUT [0] трябва да бъде зададен на 1. Освен това CKSEL [0] трябва да бъде зададен на 1.

3. Бит 6 контролира изхода на часовника към PORTB0, който не ни интересува. Така че бит 6 може да бъде оставен на 1.

4. Бит 7 контролира операцията разделяне на 8 и настройката по подразбиране на 0 има активирана функция, която не искаме. Така че бит 7 трябва да бъде променен от 0 на 1.

Следователно новият нисък байт на предпазителя трябва да бъде 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 = "удари на сериен порт, нулиране = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; тип връзка = сериен; нулиране = 4; sck = 7; mosi = 3; miso = 8;;

Преди да стартираме AVRDUDE, трябва да свържем микроконтролера към програмиста, съгласно схемата

Отворете прозореца за подкана на DOS.

1. За да видите списъка с програмисти, които avrdude се поддържа, въведете команда avrdude -c c. Ако всичко е наред, списъкът трябва да има идентификатор на програмист „ISPProgv1“

2. За да видите списъка с устройства на Atmel, които avrdude се поддържа, въведете команда avrdude -c ISPProgv1. В списъка трябва да има устройство m328p за Atmel ATMega 328P.

След това въведете 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: [име на вашия шестнадесетичен файл]

Командата записва шестнадесетичен файл в паметта на микроконтролера. Сега микроконтролерът работи в съответствие с инструкциите на нашата програма. Нека го проверим!

Стъпка 4: Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма

Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма
Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма
Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма
Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма
Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма
Проверете дали микроконтролерът работи в съответствие с инструкциите на нашата програма

Свържете компонентите в съответствие със схематичната схема на мигащата LED верига на AVR

Първо, имаме нужда от захранване, както правят всички AVR вериги. За работа на AVR чипа са достатъчни около 5 волта мощност. Можете да получите това или от батерии, или от DC захранване. Свързваме +5V мощност към щифт 7 и свързваме щифт 8 към масата на макета. Между двата щифта поставяме керамичен кондензатор 0.1μF, за да изгладим захранването на захранването, така че AVR чипът да получи гладка захранваща линия.

Резисторът от 10KΩ се използва за осигуряване на нулиране при включване (POR) на устройството. Когато захранването е включено, напрежението в кондензатора ще бъде нула, така че устройството се нулира (тъй като нулирането е активно ниско), тогава кондензаторът се зарежда до VCC и нулирането ще бъде деактивирано.

Свързваме анода на нашия светодиод към AVR щифт PB0. Това е щифт 14 на ATMega328P. Тъй като това е светодиод, искаме да ограничим тока, който тече към светодиода, за да не изгори. Ето защо поставяме 330Ω резистор последователно със светодиода. Катодът на светодиода се свързва към земята.

16 MHz кристал се използва за осигуряване на часовник за микроконтролера Atmega328, а 22pF кондензатори се използват за стабилизиране на работата на кристала.

Това са всички връзки, необходими за осветяване на светодиода. Захранване.

Добре. LED мига с едносекундно закъснение. Работата на микроконтролера отговаря на нашите задачи

Стъпка 5: Заключение

Разбира се, това беше дълъг процес за просто мигане на светодиод, но истината е, че успешно сте отстранили големите препятствия: създаване на хардуерна платформа за програмиране на микроконтролер AVR, Използване на Atmel Studio като интегрирана платформа за разработка, използване на AVRDUDE като софтуер за конфигуриране и програмиране на AVR микроконтролер

Ако искате да сте в крак с моите базови проекти за микроконтролери, абонирайте се за моя YouTube! Гледането и споделянето на видеоклиповете ми е начин да подкрепя това, което правя

Абонирайте се за канала на YouTube FOG

Препоръчано: