телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Програмиране на AVR микроконтролери. AVR микроконтролери. Програмиране за начинаещи Инструкции стъпка по стъпка за програмиране на микроконтролери atmega8

декември 2015 г

1. Предимства на предложения метод

Веригите на устройства, базирани на микроконтролери (MCU), обикновено се отличават с комбинация от две трудни за комбиниране качества: максимална простота и висока функционалност. В допълнение, функционалността може да бъде променяна и разширявана в бъдеще, без да се правят промени в схемата - само чрез подмяна на програмата (мигане). Тези характеристики се обясняват с факта, че създателите на съвременни MKs се опитаха да поставят на един чип всичко, от което един разработчик може да се нуждае електронно устройство- поне доколкото е възможно. В резултат на това имаше изместване на акцента от схемите и инсталацията към софтуера. С използването на MK сега има по-малко нужда от „зареждане“ на веригата с части и има по-малко връзки между компонентите. Това, разбира се, прави схемата по-привлекателна за повторение както от опитни, така и от начинаещи инженери по електроника. Но, както обикновено, трябва да платите за всичко. Това също не беше лишено от трудности. Ако закупите нов MK, инсталирате го във верига, правилно сглобена от обслужваеми части и подадете захранване, тогава нищо няма да работи - устройството няма да работи. Микроконтролерът се нуждае от програма.

Изглежда, че и с това всичко е просто - в интернет можете да намерите много схеми с безплатен фърмуер. Но тук има една уловка: фърмуерът трябва по някакъв начин да бъде „качен“ в микроконтролера. За някой, който никога не е правил това преди, подобна задача често се превръща в проблем и основен отблъскващ фактор, често ги принуждава да изоставят удоволствията от използването на MK и да търсят схеми, базирани на „хлабава“ и твърда логика. Но всичко не е толкова сложно, колкото може да изглежда на пръв поглед.

След като анализирате публикации в Интернет, можете да видите това този проблемТози проблем най-често се решава по един от двата начина: закупуване на готов програмист или създаване на домашен. В същото време публикуваните схеми на домашни програмисти много често са неоправдано сложни - много по-сложни, отколкото е наистина необходимо. Разбира се, ако планирате да мигате MK всеки ден, по-добре е да имате „готин“ програмист. Но ако необходимостта от такава процедура възниква рядко, от време на време, тогава можете да се справите напълно без програмист. Не, разбира се, не говорим за това да се научим да правим това със силата на мисълта. Това означава, че като разберем как програмистът взаимодейства с микроконтролера, когато пише и чете информация в неговия режим на програмиране, можем да се задоволим с наличните инструменти за по-широка цел. Тези инструменти ще трябва да заменят както софтуерната, така и хардуерната част на програмиста. Хардуерът трябва да осигурява физическа връзка с микросхемата MK, възможност за прилагане на логически нива към нейните входове и четене на данни от нейните изходи. Софтуерната част трябва да осигури работата на алгоритъма, който управлява всички необходими процеси. Също така отбелязваме, че качеството на запис на информация в MK не зависи от това колко „готин“ е вашият програмист. Няма такова нещо като „по-добре записано“ или „по-лошо“. Има само две опции: „регистриран“ и „нерегистриран“. Това се обяснява с факта, че процесът на запис вътре в кристала се контролира директно от самия MK. Просто трябва да му осигурите висококачествено захранване (без смущения или вълни) и правилно да организирате интерфейса. Ако резултатите от тестовото отчитане не показват грешки, тогава всичко е наред - можете да използвате контролера по предназначение.

За да напишем програма в MK, без да имаме програмист, се нуждаем от преобразувател на USB-RS232TTL порт и също. Конверторът USB-RS232TTL ви позволява да използвате USB порт за създаване на COM порт, който се различава от „истинския“ само по това, че неговите входове и изходи използват TTL логически нива, тоест напрежение в диапазона от 0 до 5 волта ( можете да прочетете повече в статията " "). Във всеки случай е полезно да имате такъв преобразувател във вашето „домакинство“, така че ако все още нямате такъв, определено си струва да го купите. Що се отнася до логическите нива, в нашия случай TTL дори е предимство пред обикновен COM порт, тъй като входовете и изходите на такъв порт могат да бъдат директно свързани към всеки микроконтролер, захранван от 5 V, включително ATtiny и ATmega. Но не се опитвайте да използвате обикновен COM порт - те използват напрежения в диапазона от -12 до +12 V (или -15...+15V). В този случай директната връзка с микроконтролера е недопустима!!!

Идеята за създаване на скрипт за програмата Perpetuum M, която изпълнява функциите на програмиста, възникна след прочитане на редица публикации в Интернет, предлагащи определени решения за фърмуера на MK. Във всеки случай бяха открити сериозни недостатъци или прекомерни затруднения. Често се натъквах на програмистни схеми, които съдържаха микроконтролер, и в същото време се даваха съвети доста сериозно като: „... и за да програмираме микроконтролера за този програмист, ще ни трябва... точно така - друг програмист!“ След това беше предложено да отидете при приятел и да потърсите платена услугаи така нататък. Качеството на софтуера, разпространяван в мрежата за тези цели, също не беше впечатляващо - бяха забелязани много проблеми както с функционалността, така и с "облачността" потребителски интерфейс. Често отнема много време, за да разберете как да използвате дадена програма - тя трябва да се изучава дори за извършване на най-простите действия. Друга програма може да прави нещо дълго време и усърдно, но потребителят научава, че нищо не се записва в MK само след като целият фърмуер е напълно завършен и последващо тестово четене. Възниква и следният проблем: потребителят се опитва да избере своя MK от списъка с поддържани кристали, но той не е в списъка. В този случай няма да можете да използвате програмата - включването в списъка с липсващи MK по правило не е предвидено. В допълнение, ръчното избиране на контролер от списъка изглежда странно, като се има предвид, че програмистът в много случаи може сам да определи типа на MK. Всичко това се казва не за да се хвърля кал върху съществуващите продукти, а за да се обясни причината за появата на скрипта за програмата Perpetuum M, описана в тази статия. Проблемът наистина съществува и засяга предимно начинаещи, които не винаги успяват да преодолеят тази „стена“, за да направят първата си стъпка в света на микроконтролерите. Предложеният скрипт отчита недостатъците, открити в други програми. Реализирана е максимална „прозрачност“ на работата на алгоритъма, изключително опростен потребителски интерфейс, който не изисква обучение и не оставя шанс да се объркате и да „щракнете на грешното“. Ако необходимият MK не е сред поддържаните, можете сами да добавите описанието му, като вземете необходимите данни от документацията, изтеглена от уебсайта на разработчика на MK. И най-важното е, че сценарият е отворен за изучаване и модификация. Всеки може, като отвори в текстов редактор, изучавайте и редактирайте го по свое усмотрение, като променяте съществуващите функции по ваш вкус и добавяте липсващи.

Първата версия на скрипта е създадена през юни 2015 г. Тази версия осигурява само поддръжка за микроконтролери от серията ATtiny и ATmega на Atmel с функции за запис/четене на флаш памет, настройка на конфигурационни битове, автоматично откриванетип контролер. Записването и четенето на EEPROM не е реализирано. Имаше планове за допълване на функционалността на скрипта: добавяне на запис и четене на EEPROM, прилагане на поддръжка за PIC контролери и т.н. Поради тази причина сценарият все още не е публикуван. Но поради липса на време изпълнението на плана беше забавено и за да не стане най-добрият враг на доброто, беше решено да се публикува съществуващата версия. Ако вече внедрените функции не са достатъчни, моля, не се разстройвайте. В този случай можете да опитате сами да добавите желаната функция. Няма да крия: идеята за създаване на този скрипт първоначално носи и образователен смисъл. Като разберете алгоритъма и добавите нещо свое към него, ще можете да разберете по-добре работата на MK в режим на програмиране, така че в бъдеще да не се окажете в положението на момиче пред счупен колата, замислено гледайки вътрешностите й и не разбирайки защо „не работи“.

2. MK интерфейс в режим на програмиране

Има няколко по различни начинипоставете контролера в режим на програмиране и работете с него в този режим. Най-лесният за изпълнение за контролери от сериите ATtiny и ATmega е може би SPI. Ще го използваме.

Но преди да започнем да разглеждаме сигналите, необходими за генериране на SPI, ще направим няколко уговорки. Микроконтролерът има конфигурационни битове. Това са нещо като превключватели, превключването на които ви позволява да промените някои свойства на микросхемата в съответствие с нуждите на проекта. Физически това са клетки с енергонезависима памет, като тези, в които е записана програма. Разликата е, че има много малко от тях (до три байта за ATmega) и те не са част от адресното пространство на никоя памет. Записването и четенето на конфигурационни данни се извършва чрез отделни команди в режим на програмиране на MK. Сега е важно да се отбележи, че някои конфигурационни битове засягат самата способност за използване на SPI. При някои от стойностите им може да се окаже, че SPI не може да се използва. Ако попаднете на такъв микроконтролер, методът, предложен в тази статия, няма да помогне. В този случай ще трябва или да промените настройките на конфигурационните битове в програматора, който поддържа различен режим на програмиране, или да използвате различен микроконтролер. Но този проблем се отнася само за използвани МК или такива, с които някой вече неуспешно е „играл“. Факт е, че новите MCU идват с конфигурационни битови настройки, които не предотвратяват използването на SPI. Това се потвърждава от резултатите от теста на скрипта на програмиста за програмата Perpetuum M, по време на който бяха успешно флашнати четири различни MK (ATmega8, ATmega128, ATtiny13, ATtiny44). Всички бяха нови. Първоначалната настройкаконфигурационните битове са в съответствие с документацията и не пречат на използването на SPI.

Като се има предвид горното, трябва да обърнете внимание на следните битове. Битът SPIEN изрично разрешава или отказва използването на SPI, следователно в нашия случай неговата стойност трябва да е разрешаваща. Битът RSTDISBL може да превърне един от изходите на микросхемата (предварително определен) във входа на сигнала „нулиране“ или да не го завърти (в зависимост от стойността, записана на този бит). В нашия случай е необходим входът „нулиране“ (ако липсва, няма да е възможно да превключите MK в режим на програмиране чрез SPI). Има и битове от групата CKSEL, които определят източника на тактовия сигнал. Те не пречат на използването на SPI, но също трябва да се имат предвид, защото ако изобщо няма тактови импулси или честотата им е по-ниска от допустимата за дадена SPI скорост, също няма да се случи нищо добро. Обикновено новите MCU, които имат вътрешен RC осцилатор, имат групови битове CKSEL, конфигурирани да го използват. Това ни устройва доста добре – клокването става без никакви допълнителни усилия от наша страна. Няма нужда да запоявате кварцовия резонатор или да свързвате външен генератор. Ако посочените битове съдържат различна настройка, ще трябва да се погрижите за тактовата честота в съответствие с настройката. В този случай може да се наложи да свържете кварцов резонатор или външен тактов генератор към MCU. Но в тази статия няма да разглеждаме как се прави това. Примерите за свързване на MK за програмиране, съдържащи се в тази статия, са предназначени за най-простия случай.

Ориз. 1. Обмен на данни през SPI в режим на програмиране

Сега нека се обърнем към фигура 1, взета от документацията за ATmega128A MK. Той показва процеса на предаване на един байт към MK и едновременно получаване на един байт от MK. И двата процеса, както виждаме, използват едно и също тактови импулси, идващ от програмиста към микроконтролера на неговия SCK вход - един от щифтовете на микросхемата, за който тази роля е назначена в режим на програмиране на SPI. Още две сигнални линии осигуряват приемане и предаване на данни по един бит на такт. Чрез входа MOSI данните влизат в микроконтролера, а данните за четене се вземат от изхода MISO. Обърнете внимание на двете пунктирани линии, начертани от SCK към MISO и MOSI. Те показват в кой момент микроконтролерът „поглъща” битовете данни, зададени на входа MOSI, и в кой момент сам задава свой бит данни на изхода MISO. Всичко е съвсем просто. Но за да влезем в MK в режим на програмиране, все още се нуждаем от сигнал RESET. Да не забравяме и общия GND проводник и VCC захранването. Общо се оказва, че само 6 проводника трябва да бъдат свързани към микроконтролера, за да мига неговия фърмуер чрез SPI. По-долу ще анализираме това по-подробно, но засега ще добавим, че обменът на данни с MK в режим на програмиране чрез SPI се извършва в пакети от 4 байта. Първият байт на всеки пакет е основно изцяло предназначен за кодиране на инструкции. Вторият байт, в зависимост от първия, може да бъде продължение на кода на командата или част от адреса, или може да има произволна стойност. Третият байт се използва основно за предаване на адреси, но може да има произволна стойност в много инструкции. Четвъртият байт обикновено предава данни или има произволна стойност. Едновременно с предаването на четвъртия байт някои команди получават данни, идващи от микроконтролера. Подробности за всяка команда могат да бъдат намерени в документацията на контролера в таблицата, наречена „SPI Serial Programming Instruction Set“. Засега отбелязваме само, че целият обмен с контролера е изграден от поредица от 32-битови пакети, всеки от които прехвърля не повече от един байт полезна информация. Това не е много оптимално, но като цяло работи добре.

3. Свързване на MK за програмиране

За да се гарантира, че всички необходими сигнали се подават към входовете на микроконтролера за организиране на SPI интерфейса и четене на данни от неговия MISO изход, не е необходимо да се създава програмист. Това може лесно да се направи с помощта на най-обикновения USB-RS232TTL конвертор.

В интернет често можете да намерите информация, че такива конвертори са по-лоши и че нищо сериозно не може да се направи с тях. Но по отношение на повечето модели конвертори това мнение е погрешно. Да, в продажба има преобразуватели, които нямат всички налични входове и изходи в сравнение със стандартен COM порт (например само TXD и RXD), докато имат неразделим дизайн (микросхемата е пълна с пластмаса - това е невъзможно е да се достигнат неговите щифтове). Но тези не си струва да се купуват. В някои случаи можете да получите липсващите входове и изходи на портове чрез запояване на кабелите директно към чипа. Пример за такъв „подобрен“ преобразувател е показан на фигура 2 (чип PL-2303 - повече подробности за предназначението на неговите щифтове в статията „”). Това е един от най-евтините модели, но има своите предимства, когато се използва в домашни конструкции. Пълнофункционалните адаптерни кабели със стандартен девет-пинов конектор в края, като COM порт, също са широко разпространени. Те се различават от обикновения COM порт само по TTL нива и несъвместимост с наследен софтуер и някои по-стари хардуери. Може също да се отбележи, че кабелите на чипа CH34x се показват като много по-надеждни и стабилни при различни екстремни тестове в сравнение с конверторите на PL-2303. При нормална употреба обаче разликата не се забелязва.

Когато избирате USB-RS232TTL конвертор, трябва да обърнете внимание и на съвместимостта на неговия драйвер с версията на операционната система, която използвате.

Нека разгледаме по-отблизо принципа на свързване на микроконтролер и USB-RS232TTL конвертор, използвайки примера на четири различни модели MK: ATtiny13, ATtiny44, ATmega8 и ATmega128. Фигура 3 показва общата схема на такава връзка. Може да ви изненада да знаете, че RS232 сигналите (RTS, TXD, DTR и CTS) се използват неподходящо. Но не се притеснявайте за това: програмата Perpetuum M може да работи директно с тях - задава изходни стойности и чете входни състояния. Във всеки случай широко използваните преобразуватели USB-RS232TTL на чипове CH34x и PL-2303 предоставят тази възможност - това е проверено. Не трябва да има проблеми и с други популярни конвертори, тъй като за достъп до порта се използват стандартни функции на Windows.

Резистори, показани в обща схема, по принцип не е нужно да го инсталирате, но все пак е по-добре да го инсталирате. Каква е тяхната цел? Използвайки TTL входовете и изходите на преобразувателя и петволтовото захранване на микроконтролера, по този начин се отърваваме от необходимостта да координираме логическите нива - всичко вече е съвсем правилно. Това означава, че връзките могат да бъдат директни. Но по време на експерименти , всичко може да се случи.Например по закона на подлостта една отвертка може да падне точно на мястото, където не би могла да падне и да даде на късо нещо, което в никакъв случай не трябва да бъде на късо.Разбира се всичко може се окаже „отвертка". Резисторите в този случай понякога намаляват последствията. една от целите им е да елиминират евентуален изходен конфликт. Факт е, че след приключване на програмирането микроконтролерът преминава в нормален режим на работа и може се случи, че неговият щифт, свързан към изхода на преобразувателя (RTS, TXD или DTR), също става изход, според току-що записаната програма в MK.В този случай ще бъде много лошо, ако два директно свързани изхода се "бият" - опитайте се да зададете различни логически нива. В такава „борба“ някой може да „загуби“, но ние не искаме това.

Стойностите на трите резистора са избрани на ниво 4,3 KOhm. Това се отнася за връзките между изхода на преобразувателя и входа на микроконтролера. Точността на резисторите няма значение: можете да намалите съпротивлението им до 1 KOhm или да го увеличите до 10 KOhm (но във втория случай рискът от смущения се увеличава при използване на дълги проводници по пътя към MK). Що се отнася до връзката между входа на преобразувателя (CTS) и изхода на микроконтролера (MISO), тук се използва резистор от 100 Ohm. Това се обяснява с особеностите на входа на използвания преобразувател. По време на тестовете е използван преобразувател на микросхемата PL-2303, чиито входове, очевидно, са свързани към положителното захранване със сравнително ниско съпротивление (от порядъка на няколкостотин ома). За да „прекъсна изтеглянето“, трябваше да инсталирам резистор с толкова малко съпротивление. Не е нужно обаче изобщо да го инсталирате. На преобразувателя това винаги е входът. Тя не може да стане изход, което означава, че няма да има конфликт на изходи при каквото и да е развитие на събитията.

Ако чипът има отделен AVCC щифт за захранване на аналогово-цифровия преобразувател (например ATmega8 или ATmega128), той трябва да бъде свързан към общия VCC захранващ щифт. Някои интегрални схеми имат повече от един VCC захранващ щифт или повече от един GND. Например ATmega128 има 3 GND пина и 2 VCC пина. В постоянен дизайн е по-добре да свържете щифтове със същото име един към друг. В нашия случай, по време на програмиране, можете да използвате по един VCC и GND щифт.

А ето как изглежда връзката ATtiny13. Фигурата показва назначенията на щифтовете, използвани при програмиране чрез SPI. До снимката е как изглежда временната връзка в действителност.


Някои може да кажат, че това не е сериозно - връзки по окабеляването. Но аз и ти сме разумни хора. Нашата цел е да програмираме микроконтролера, като отделяме минимум време и други ресурси за него, а не да се изтъкваме пред някого. Качеството не страда. Метод "на жици" в в такъв случайдоста ефективно и оправдано. Мигането на фърмуера на контролера е еднократна процедура, така че няма смисъл да го покривате с кристали. Ако се предвижда промяна на фърмуера в бъдеще, без да се премахва контролерът от веригата (в готовия продукт), тогава това се взема предвид при инсталирането по време на производството на устройството. Обикновено за тази цел е инсталиран конектор (RESET, SCK, MOSI, MISO, GND), а MK може да бъде мига дори след инсталиране на платката. Но това са творчески изкушения. Разглеждаме най-простия случай.

Сега нека да преминем към ATtiny44 MK. Тук всичко е почти същото. Въз основа на чертежа и снимката дори начинаещ няма да има затруднения да разбере връзката. Подобно на ATtiny44, можете да свържете микроконтролерите ATtiny24 и ATtiny84 - назначенията на щифтовете за тези три са еднакви.


Друг пример за временно свързване на контролер за програмирането му е ATmega8. Тук има повече щифтове, но принципът е същият - няколко проводника и сега контролерът е готов да „попълни“ информация в него. Допълнителният черен проводник на снимката, идващ от пин 13, не участва в програмирането. Той е предназначен да премахне звуков сигнал от него, след като MK излезе от режима на програмиране. Това се дължи на факта, че по време на отстраняване на грешки в скрипта за "Perpetuum M" програмата беше изтеглена в MK музикална кутия.


Често един контролер се предлага в различни корпуси. В този случай присвояването на щифтове за всеки случай се разпределя по различен начин. Ако корпусът на вашия контролер не е подобен на показания на фигурата, проверете предназначението на щифтовете в техническата документация, която можете да изтеглите от уебсайта на разработчика на MK.

За да завършим картината, нека да разгледаме свързването на MK микросхема с голям брой "крака". Предназначението на допълнителния черен проводник на снимката, идващ от пин 15, е точно същото като в случая с ATmega8.


Вероятно вече сте се убедили, че всичко е съвсем просто. Всеки, който знае как да брои щифтовете на микросхемите (от маркировката в кръг обратно на часовниковата стрелка), ще го разбере. И не забравяйте за точността. Микросхемите обичат спретнати хора и не прощават небрежно отношение.

Преди да преминете към софтуерната част, уверете се, че драйверът за конвертор USB-RS232TTL е инсталиран правилно (проверете мениджъра Windows устройства). Запомнете или запишете номера на виртуалния COM порт, който се появява, когато свържете преобразувателя. Този номер ще трябва да бъде въведен в текста на скрипта, за който можете да прочетете по-долу.

4. Скрипт - програматор за "Перпетуум М"

Разбрахме хардуерната част на „програмиста“. Това вече е половината битка. Сега остава само да се справим софтуерна част. Неговата роля ще изпълнява програмата Perpetuum M под управлението на скрипт, който изпълнява всички необходими функции за взаимодействие с микроконтролера.

Архивът със скрипта трябва да бъде разопакован в същата папка, където се намира програмата perpetuum.exe. В този случай, когато стартирате файла perpetuum.exe, на екрана ще се покаже меню със списък с инсталирани скриптове, сред които ще има реда „AVR MK Programmer“ (може да е единственият). Това е линията, от която се нуждаем.

Скриптът се намира в папката PMS във файла "MK Programmer AVR.pms". Този файл може да се разглежда, изучава и редактира, ако е необходимо, в обикновен текстов редактор като Windows Notepad. Преди да използвате скрипта, най-вероятно ще трябва да направите промени в текста, свързан с настройките на порта. За да направите това, проверете диспечера на устройствата Име на Windowsизползван порт и, ако е необходимо, направете съответната поправка в реда "PortName="COM4";" - вместо числото 4 може да има друго число. Освен това, когато използвате различен модел USB-RS232TTL конвертор, може да се наложи да промените настройките за инвертиране на сигнала (редовете на скрипта, започващи с думата „High“). Можете да проверите инверсията на сигналите от USB-RS232TTL конвертора, като използвате един от примерите, съдържащи се в инструкциите за програмата Perpetuum M (раздел с функции за работа с порта).

Подпапката MK_AVR съдържа файлове с описания на поддържаните контролери. Ако контролерът, от който се нуждаете, не е сред тях, можете сами да добавите този, който ви трябва, следвайки аналогия. Вземете един от файловете като проба и с помощта на текстов редактор въведете необходимите данни, като ги вземете от документацията за вашия микроконтролер. Основното е да внимавате, да въведете данните без грешки, в противен случай MK няма да бъде програмиран или ще бъде програмиран неправилно. Оригиналната версия поддържа 6 микроконтролера: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 и ATmega128. Скриптът реализира автоматично разпознаване на свързания контролер - няма нужда да го задавате ръчно. Ако прочетеният от MK идентификатор не е сред наличните описания, се показва съобщение, че контролерът не може да бъде разпознат.

Архивът със скрипта също съдържа Допълнителна информация. Папката AVR controller inc files съдържа много полезна и обширна колекция от файлове с дефиниции на контролери. Тези файлове се използват при писане на ваши собствени програми за MK. Още четири папки "MusicBox_..." съдържат файлове с програма на асемблерен език и фърмуер, готов за изтегляне в MK отделно за ATtiny13, ATtiny44, ATmega8 и ATmega128. Ако вече сте свързали един от тези MK за програмиране, както е предложено в тази статия, тогава можете да го флашнете точно сега - ще получите музикална кутия. Повече за това по-долу.

Когато изберете реда „MK AVR Programmer“ в менюто на скрипта, скриптът започва да се изпълнява. В същото време той отваря порта, изпраща команда до MK за преминаване в режим на програмиране, получава потвърждение от MK за успешния преход, изисква идентификатора на MK и търси описание на този MK по неговия идентификатор сред наличните файлове с описания. Ако не намери необходимото описание, показва съответното съобщение. Ако бъде намерено описание, се отваря главното меню на програмиста. Можете да видите неговата екранна снимка на Фигура 8. По-нататъшното разбиране не е трудно - менюто е много просто.

В първата версия на скрипта някои функции на пълноправен програмист не са реализирани. Например, няма начин да четете и записвате в EEPROM. Но ако отворите скрипта в текстов редактор, ще видите, че той е много малък по размер, въпреки факта, че основното нещо вече е внедрено в него. Това предполага, че добавянето на липсващи функции не е толкова трудно - езикът е много гъвкав, позволява малка програмавнедрите богата функционалност. Но в повечето случаи дори съществуващите функции са достатъчни.

Някои функционални ограничения са описани директно в текста на скрипта:
//внедрено записване само от нулевия адрес (записът на разширения сегментен адрес се игнорира, LOAD OFFSET - също)
//редът и непрекъснатостта на записите в HEX файла не се проверяват
//контролната сума не се проверява
Това се отнася за работа с HEX файл, от който се взема кодът на фърмуера за MK. Ако този файл не е повреден, проверката на контролната сума няма да има ефект. Ако е изкривен, няма да е възможно да го откриете с помощта на скрипта. В повечето случаи останалите ограничения няма да навредят, но все пак трябва да ги имате предвид.

5. Музикална кутия - прост занаят за начинаещи

Ако имате един от тези микроконтролери: ATtiny13, ATtiny44, ATmega8 или ATmega128, можете лесно да го превърнете в музикална кутия или музикална карта. За да направите това, достатъчно е да запишете съответния фърмуер в MK - един от четирите, които се намират в папките "MusicBox_..." в същия архив със скрипта. Кодовете на фърмуера се съхраняват във файлове с разширение ".hex". Използването на ATmega128 за такъв занаят, разбира се, е „мазно“, точно като ATmega8. Но това може да бъде полезно за тестване или експериментиране, с други думи - в образователни цели. Приложени са и текстовете на програмите в Assembler. Програмите не са създадени от нулата - програмата за музикална кутия от книгата на A.V. Belov „AVR микроконтролери в аматьорската радиопрактика“ е взета като основа. Оригиналната програма е претърпяла редица значителни промени:
1. адаптиран за всеки от четирите MK: ATtiny13, ATtiny44, ATmega8 и ATmega128
2. бутоните са елиминирани - нищо не трябва да се свързва към контролера освен захранване и звуков излъчвател (мелодиите се възпроизвеждат една след друга в безкраен цикъл)
3. продължителността на всяка нота се намалява с продължителността на паузата между нотите, за да се елиминират смущенията в музикалния ритъм
4. осмата мелодия е свързана, не се използва в книжната версия
5. от субективно: някои „подобрения“ за оптимизиране и улесняване на разбирането на алгоритъма

В някои мелодии можете да чуете фалш и дори груби грешки, особено в „Усмивка“ - по средата. Кодовете на мелодията са взети от книгата (или по-скоро изтеглени от уебсайта на автора на книгата заедно с оригиналния asm файл) и не са променени. Явно има грешки в кодирането на мелодиите. Но това не е проблем - всеки, който е „приятелски“ с музиката, може лесно да го разбере и да поправи всичко.

В ATtiny13, поради липсата на 16-битов брояч, трябваше да се използва 8-битов брояч за възпроизвеждане на бележки, което доведе до лек спад в точността на бележките. Но това едва ли се забелязва на ухо.

Относно конфигурационните битове. Техните настройки трябва да съответстват на състоянието на новия микроконтролер. Ако вашият MK е бил използван някъде преди, трябва да проверите състоянието на неговите конфигурационни битове и, ако е необходимо, да ги приведете в съответствие с настройките на новия микроконтролер. Можете да разберете състоянието на конфигурационните битове на новия микроконтролер от документацията за този MK (раздел „Битове за предпазители“). Изключение прави ATmega128. Този MCU има бит M103C, който позволява режим на съвместимост с по-стария ATmega103. Активирането на бита M103C значително намалява възможностите на ATmega128 и този бит е активен на новия MK. Трябва да нулирате M103C в неактивно състояние. За да манипулирате конфигурационните битове, използвайте съответния раздел от менюто на скрипта на програмиста.

Няма смисъл да давам схема на музикалната кутия: тя съдържа само микроконтролер, захранване и пиезо-звуков излъчвател. Захранването се доставя по същия начин, както при програмирането на MK. Излъчвателят на звука е свързан между общия проводник (GND щифт на контролера) и един от пиновете MK, чийто номер може да се намери във файла с асемблиращия код на програмата (*.asm). В началото на програмния текст за всеки MK в коментарите има ред: „звуковият сигнал се генерира на пин XX“. Когато скриптът на програмиста е завършен, микроконтролерът излиза от режима на програмиране и преминава в нормална работа. Възпроизвеждането на мелодии започва веднага. Като свържете звуков излъчвател, можете да проверите това. Можете да оставите звуковия излъчвател свързан, докато програмирате кристала, само ако звукът се взема от щифт, който не се използва в SPI, в противен случай допълнителният капацитет на щифта може да попречи на програмирането.

Микроконтролерите Atmega8 са най-популярните представители на своето семейство. В много отношения те дължат това на, от една страна, простота на работа и разбираема структура, от друга страна, доста широк функционалност. Тази статия ще обхване програмирането на Atmega8 за начинаещи.

Главна информация

Микроконтролерите са навсякъде. Те могат да бъдат намерени в хладилници, перални, телефони, фабрични машини и голям брой други технически средства. Микроконтролерите варират от прости до изключително сложни. Последните предлагат значително повече възможности и функционалност. Но няма да можете да разберете сложната технология веднага. Първоначално трябва да овладеете нещо просто. И Atmega8 ще бъде взета като проба. Програмирането на него не е трудно благодарение на компетентната му архитектура и приятелски интерфейс. Освен това има достатъчна производителност, за да се използва в повечето.Нещо повече, те се използват дори в индустрията. В случая на Atmega8 програмирането изисква познаване на езици като AVR (C/Assembler). Къде да започна? Овладяването на тази технология е възможно по три начина. И всеки сам избира откъде да започне работа с Atmega8:

  1. Програмиране чрез Arduino.
  2. Закупуване на готово устройство.
  3. Самостоятелно сглобяване на микроконтролер.

Ще разгледаме първата и третата точка.

Ардуино

Това е удобна платформа, проектирана във вид, подходящ за бързо създаване различни устройства. Платката вече разполага с всичко необходимо под формата на самия микроконтролер, неговия сноп и програматор. Следвайки този път, човек ще получи следните предимства:

  1. Изисквания за нисък праг. Не е необходимо да имате специални умения, за да разработите технически устройства.
  2. Ще бъдат налични широка гама от елементи за свързване без допълнителна подготовка.
  3. Бърз старт на разработката. С Arduino можете да преминете направо към създаването на устройства.
  4. Наличие на голям брой учебни материали и примери за реализации на различни дизайни.

Но има и определени недостатъци. Така, Програмиране на Arduino Atmega8 не ви позволява да се потопите по-дълбоко в света на микроконтролера и да разберете много полезни аспекти. Освен това ще трябва да научите език за програмиране, който се различава от използваните от AVR (C/Assembler). И още нещо: Arduino има доста тесен набор от модели. Следователно рано или късно ще има нужда от използване на микроконтролер, който не се използва в платките. Но като цяло това е добър вариант за работа с Atmega8. Програмирането чрез Arduino ще ви даде уверен старт в света на електрониката. И едва ли човек ще се откаже заради неуспехи и проблеми.

Самостоятелно сглобяване

Благодарение на приятелския дизайн, можете да ги направите сами. В крайна сметка това изисква евтини, достъпни и прости компоненти. Това ще ви позволи да проучите задълбочено дизайна на микроконтролера Atmega8, чието програмиране след сглобяването ще изглежда по-лесно. Също така, ако е необходимо, можете самостоятелно да изберете други компоненти за конкретна задача. Вярно е, че тук има известен недостатък - сложност. Не е лесно да сглобите сами микроконтролер, когато нямате необходимите знания и умения. Ще разгледаме този вариант.

Какво е необходимо за сглобяване?

Първо трябва да вземете самия Atmega8. Програмирането на микроконтролер без него е невъзможно. Това ще струва няколкостотин рубли - като същевременно осигурява прилична функционалност. Съществува и въпросът как ще бъде програмиран Atmega8. USBAsp е хубав добро устройство, който се е доказал като най-добрият. Но можете да използвате друг програмист. Или го сглобете сами. Но в този случай съществува риск, ако е създаден лошо, да превърне микроконтролера в нефункционално парче пластмаса и желязо. Също така няма да навреди да имате макет и джъмпери. Не са задължителни, но ще ви спестят нерви и време. И накрая, имате нужда от 5V захранване.

Програмиране на Atmega8 за начинаещи с помощта на пример

Нека да разгледаме как в общи линии се създава устройство. И така, да кажем, че имаме микроконтролер, светодиод, резистор, програматор, свързващи проводници и захранване. Първата стъпка е писането на фърмуера. Под него имаме предвид набор от команди за микроконтролера, който се представя като краен файл, който има специален формат. Необходимо е да се уточни връзката на всички елементи, както и взаимодействието с тях. След това можете да започнете да сглобявате веригата. VCC щифтът трябва да бъде захранван. Към всеки друг, предназначен да работи с устройства и елементи, първо се свързва резистор, а след това светодиод. В този случай мощността на първия зависи от изискванията за мощност на втория. Можете да използвате следната формула: R=(Up-Ups)/Is. Тук p е мощността, а s е светодиодът. Нека си представим, че имаме светодиод, който консумира 2V и изисква захранващ ток от 10 mA, преобразуваме го във форма, по-удобна за математически операции и получаваме 0,01A. Тогава формулата ще изглежда така: R=(5V-2V)/0.01A=3V/0.01A=300 Ohm. Но на практика често е невъзможно да се избере идеалният елемент. Затова се взема най-подходящият. Но трябва да използвате резистор със съпротивление, по-високо от стойността, получена математически. Благодарение на този подход ще удължим експлоатационния му живот.

Какво следва?

Така че имаме малка диаграма. Сега остава само да свържете програмиста към микроконтролера и да запишете създадения фърмуер в неговата памет. Тук има един момент! При изграждането на верига е необходимо да се създаде по такъв начин, че микроконтролерът да може да се флашва без разпояване. Това ще спести време, нерви и ще удължи живота на елементите. Включително Atmega8. Трябва да се отбележи, че вътрешносхемното програмиране изисква знания и умения. Но също така ви позволява да създавате по-усъвършенствани дизайни. В края на краищата често се случва елементите да се повредят по време на разпояване. След това диаграмата е готова. Може да се приложи напрежение.

Важни точки

Бих искал да го дам на начинаещи полезни съветиотносно програмирането на Atmega8. Не променяйте вградените променливи и функции! Препоръчително е да флашнете устройството със създадената програма, след като го проверите за отсъствие на „вечни вериги“, които ще блокират всякакви други смущения и използвате добър предавател. Ако използвате домашен продукт за тези цели, трябва да сте психически подготвени за повреда на микроконтролера. Когато флашвате устройство с помощта на програматор, трябва да свържете съответните изходи VCC, GND, SCK, MOSI, RESET, MISO. И не нарушавайте мерките за безопасност! Ако техническа характеристикаПредвидено е да има захранване от 5V, тогава трябва да се придържате точно към това напрежение. Дори използването на 6V елементи може да повлияе негативно на работата на микроконтролера и да съкрати експлоатационния му живот. Разбира се, 5V батерии имат определени разлики, но като правило всичко е в разумни граници. Например, максималното напрежение ще се поддържа на 5,3 V.

Обучение и усъвършенстване на уменията

За щастие, Atmega8 е много популярен микроконтролер. Следователно намирането на съмишленици или просто знаещи и умели хора няма да е трудно. Ако не искате да преоткривате колелото, а просто искате да разрешите определен проблем, тогава можете да потърсите необходимата схема в необятната световна мрежа. Между другото, малък намек: въпреки че роботиката е доста популярна в рускоезичния сегмент, ако няма отговор, тогава трябва да го потърсите в англоговорящия сегмент - той съдържа порядък голямо количествоинформация. Ако има определени съмнения относно качеството на съществуващите препоръки, тогава можете да потърсите книги, които обсъждат Atmega8. За щастие, производствената компания взема предвид популярността на своите разработки и ги снабдява със специализирана литература, където опитни хора разказват какво и как, а също така дават примери за това как работи устройството.

Трудно ли е да започнеш да създаваш нещо свое?

Достатъчно е да имате 500-2000 рубли и няколко свободни вечери. Това време е повече от достатъчно, за да се запознаете с архитектурата Atmega8. След малко практика можете лесно да създавате свои собствени проекти, които изпълняват конкретни задачи. Например, роботизирана ръка. Atmega8 сам трябва да е повече от достатъчен, за да предаде основните двигателни функции на пръстите и ръката. Разбира се, това е доста трудна задача, но е напълно осъществима. В бъдеще ще бъде възможно да се създават сложни неща, които ще изискват десетки микроконтролери. Но всичко това предстои, преди това трябва да получите добро училищепрактикувайте върху нещо просто.

За да прехвърлим от компютър към микроконтролер се нуждаем от USBasp и програмата AVRDUDE.Днес има богат избор от програмисти, предназначени за програмиране на AVR микроконтролери. Сред тях можете да намерите много домашни, които дори не могат да се нарекат програмисти, тъй като те са директно свързани към COM порта, използвайки само няколко резистора. въпреки това модерни компютрии лаптопите практически вече не са оборудвани с COM портове, така че един от основните критерии при избора на програматор е възможността да го свържете към USB порт u. Най-евтиният, най-простият и най-разпространеният е програматорът USBasp. Може да се закупи в почти всеки радиомагазин на достъпна цена. Цената му е китайски интернетМагазинът варира от $1,5 до $3.

Програмист USBasp

Компютърът комуникира с микроконтролера с помощта на програматора USBasp през USB порта, а данните се предават през интерфейса SPI С erial П периферен аз интерфейс(сериен периферен интерфейс). За да комуникирате MK с програмиста, се използват специални щифтове: MOSI, MISO, SCK, RESET, VCC, GND. Макар че SPI предполага използването само на три пина MOSI, MISO и SCK, но ние ще използваме всичките шест пина.

При обмен на данни чрез интерфейс SPI Микроконтролерът може едновременно да получава (MISO щифт) или да предава данни (MOSI щифт). Настройката на режима на получаване или предаване на данни се извършва чрез прилагане на определен импулс към SCK щифта.

Конекторът на програмиста като правило има 10 пина и е свързан към микроконтролера с помощта на 10-жилен кабел. Въпреки това е по-удобно да използвате кабели, които имат 6-пинов адаптер, тъй като в този случай всички щифтове са заети. За десет-щифтов конектор един щифт остава незает, а четири щифта са свързани към общия проводник (GND).

За да може компютърът да открие програмиста, трябва да инсталирате USBasp драйвера.

По-долу е показана снимка на програмиста, свързан към микроконтролера ATmega8.

Единственият недостатък или по-правилно малко неудобство на този програмист е, че не се поддържа (без различни трикове) от Atmel Studio, така че трябва да използвате програма на трета страна. Най-доказаният е AVRDUDE.

Настройки

Сега остава само да завършим последната стъпка. Стартирайте програмата AVRDUDE. По подразбиране се отваря разделът Програма. В долната част на прозореца в менюто Настройки изберете типа програматор usbasp. Следващ в категорията Микроконтролеризберете нашия микроконтролер ATmega8. По-долу в категорията Светкавицащракнете върху иконата с многоточие и в менюто, което се отваря, посочете пътя до компилирания файл с разширение шестнадесетичен. Пътят до файла и самият файл ще бъдат същите, както сме посочили преди в .

За да сте сигурни, че програмистът се разпознава от операционната система (драйверът на програмиста е инсталиран правилно) и е правилно свързан към микроконтролера, щракнете върху бутона Четене. Ако няма грешки, ще се появи прозорец със запис „ Клетките за калибриране на генератора са прочетени!“И шестнадесетичното число ще се покаже в горния прозорец. Всеки MK има свой собствен номер.

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

Сега щракнете върху бутона Програма в категорията Светкавица. Когато програмата е записана успешно в MK, се появява прозорец с записа по-долу.

Резултатът от записаната или, както се казва, фърмуерна програма е светещ светодиод, свързан към извода PC0 на нашия микроконтролер.

Добър ден. Да продължим. След като се запознахме с процеса на дебъгване на програмата, която написахме в “atmel studio” и виртуално сглобихме схема с един светодиод в “proteus”, дойде време да сглобим схемата хардуерно и да флашнем микроконтролера.

За програмиране на прототип ( atmega 8) ще използваме програматора USBASP. Изглежда така:

Към конектора ще бъде свързан кабел, в който са свързани джъмпери, които от своя страна ще бъдат свързани към гнездата на макетната платка, на която е инсталиран микроконтролерът:

Първият щифт е маркиран на конектора със стрелка.


След като разбрахме програмиста. Нека да преминем към сглобяването на веригата в хардуера. Монтираме микроконтролера на макет. Нека ви напомня, че първият крак е маркиран на MK с малък кръг.

Задачата е да свържете щифтовете на програмиста към "каменните" щифтове.

Свързваме джъмпери към 10-пинов конектор. Използваме следните изводи MOSI, RST, SCK, MISO, VTG (VCC), GND.

Надявам се, че вече сте изтеглили листа с данни на atmega8. Ако не, можете да го изтеглите. Разглеждаме разводката на щифтовете на микроконтролера.

Свързваме джъмпери към следните щифтове:

  • VCC към пин 7 на MK;
  • SCK към щифт 19 на MK;
  • MISO към щифт 18 на MK;
  • MOSI към щифт 17 на MK;
  • GND (пин 10 на програмиста) към пин 8 на MK;
  • RST към 1 щифт на MK;

За по-нататъшна успешна работа, операционна системаКогато стартирате shaitan машината (програматора) за първи път, предложете да инсталирате драйверите, необходими за работата на устройството.

Не би трябвало да има проблеми при работа с експедитора. Изтегли. Създайте папка, в която разопаковаме изтегления архив. След това в съветника за инсталиране на хардуер посочваме пътя до папката с разархивирания драйвер.

Ако използвате Windows 7 или по-нова версия, може да изпитате незначителни затруднения. Драйверите за програмиста са доста стари, така че нямат цифров подпис. Когато се опитате да инсталирате такъв драйвер, операционната система ще покаже нещо подобно *

„Цифровият подпис на драйверите, необходим за на това устройство. При последна промянаможе да е инсталиран хардуер или софтуер, който е неправилно подписан или повреден файлили зловреден софтуернеизвестен произход. (Код 52)."

За да коригирате ситуацията, трябва да деактивирате проверката на цифровия подпис на драйвера. Няма да описвам как да го деактивирам (всеки има своя собствена операционна система), те могат да бъдат намерени в Интернет.

След като деактивирате проверката на подписа, в съветника за инсталиране на хардуер посочете пътя до папката с разархивирания драйвер.

Надявам се, че всичко се е получило и програмистът е готов за работа.

Нека да преминем към сглобяването на веригата със светодиода.

За флашване на фърмуера на микроконтролера ще използваме програмата “avrdudeprog”. Има го в общия архив.

Изберете atmega8 от списъка с микроконтролери. След като изберете MK, ще се появи прозорец, който ви информира, че предпазителят и заключващите битове са зададени по подразбиране.

След това отворете раздела Предпазители. С прости думиПредпазителите са конфигурационни настройки на MK, с които е най-добре да не си играете. За случая, когато сте закупили същия контролер като мен и нямате външен кварцов резонатор (използвате вътрешен осцилатор тактова честота), поставете отметка точно в същите квадратчета, както е показано на снимката. Трябва да има отметка до елемента „обратен“.

Конфигурираните настройки „заповядват“ на Atmega8A да изпълнява работата си при тактоване от вътрешния осцилатор (тактова честота 8 MHz). За да влязат в сила настройките, трябва да натиснете бутона „Програмиране“. Но преди да натиснете, проверете отново дали всичко е настроено правилно.

Върнете се към страницата „Програма“.

След като вече сме казали на програмата кой микроконтролер ще флашваме, избираме файла на фърмуера, който написахме в последния урок. Има разширение HEX. Намира се в папката "Debug".

Преди да мигате „камъчето“, щракнете върху бутона „Изтриване на всичко“. Това ще ви предпази от неразбираеми грешки (ами ако камъкът вече е зашит):

Радваме се на резултата от работата си :) Продължава...

Защо точно от тази линия?

Е, може би някой знае, може би някой не знае, микроконтролерът AVR е продукт на Atmel.

Е, защо точно от линията AVR?

Първо, AVR микроконтролери - те са широко достъпни, има ги във всеки магазин, цената им е ниска.

Второ, поради наличието на множество софтуери за тяхното програмиране и фърмуер, което също е важно в наше време.

Тоест, когато пишете програми, вие няма да нарушавате ничии авторски права.

Трето, точно защото имам най-много познания в главата и умения в програмирането на тази конкретна линия.

Затова ще програмираме специално за AVR микроконтролери.

Ще започнем с такъв представител на тази линия като микроконтролера Atmega 8.

ATMEGA 8A

Защо точно от него, от Atmega 8?

Защото, първо, това е доста пълноценен микроконтролер и евтин.

Има три I/O порта на борда. Тук няма да навлизаме в подробности какво представляват портовете. Накратко, портовете са шини за данни, които работят в две посоки – както изход, така и вход.

Порт Б.

Порт B, който е непълен, има 6 крака.

0, 1 крак, 2, 3, 4 и 5. Тоест 6 крака.
Порт CИмаме и непълна, от нула до шест крака.
И тук порт DИмаме пълноценно пристанище, има всичките 8 крака, т.е. байт данни от 0 до 7.
Микроконтролерът се захранва от 5 волта. Можете също да го захранвате от 3,3 волта, също ще работи добре. Но единственото нещо е, че тактовата честота може да бъде настроена само на максимум 8 мегахерца. Не можем да настроим 16 на три волта, можем да го настроим само на пет волта. Захранването се подава към крак 7. Общата жица е осмата.
Е, сега да видим докъде можем да стигнем софтуерза програмиране.
Atmel има собствен уебсайт www.atmel.com. На главната страница не е нужно да ходите далеч, от дясната страна на страницата под главния банер има Изтегляне на Atmel Studio.



Свързани публикации