Контакти

attiny13 програмиране за начинаещи. Мигаме AVR ръчно. MK интерфейс в режим на програмиране

И така, време е за първия фърмуер. Този фърмуер е тестов. Той не произвежда никакви полезни действия, освен да дръпне краката си според определен алгоритъм. С този фърмуер можете да проверите производителността на целия микроконтролер и по-специално I / O портовете.
За да проверите микроконтролера, трябва да изтеглите фърмуера и да видите какво се случва на краката. Можете да „гледате“ или с мултицет, или с обикновена сонда - светодиод последователно с резистор 300 Ohm - 1 kOhm. Не си струва да проверявате без резистор - можете да изгорите I / O порта. Нивата на сигнала на краката се променят от "1" през "Z"-състояние до "0" и обратно. Състоянието "Z" се въвежда в последователността, за да се наблюдава изправността на порта в режим на въвеждане.

Тествайте фърмуера за микроконтролер ATMega48/88/168.
Алгоритъмът за работа на фърмуера ATMega48/88/168 е показан на снимката (микроконтролерът е инсталиран на описания по-рано).

Микроконтролерът се захранва от вътрешен осцилатор, така че няма нужда от външен кристал. Крака 9 и 10 (свързващи външен кварц) не се използват, в случай че има външен кварц. Също така, щифтове 1 (нулиране) и 21 (референтно напрежение за ADC) не се използват. Можете да проверите производителността по два начина (вижте фигурата) - наблюдавайте промяната в нивото на сигналите спрямо земята (GND) или спрямо захранващия щифт (VCC).
- Тествайте фърмуера за ATMega48/88/168

Как да флашнете микроконтролер >


Тествайте фърмуера за микроконтролер ATTiny2313.
Алгоритъмът на фърмуера ATTiny2313 е показан на снимката (микроконтролерът е инсталиран на описания по-рано).

Микроконтролерът се захранва от вътрешен осцилатор, така че няма нужда от външен такъв. Крака 4 и 5 (свързващи външен кварц) не се използват в случай, че има външен кварц. Също така, щифт 1 (нулиране) не се използва. Можете да проверите производителността по два начина - наблюдавайте промяната в нивото на сигналите спрямо земята (GND) и спрямо захранващия щифт (VCC).
- Тествайте фърмуера за ATTiny2313

Как да флашнете микроконтролер >


Тествайте фърмуера за микроконтролер ATTiny13.
Алгоритъмът на фърмуера ATTiny13 е показан на снимката (микроконтролерът е инсталиран на описания по-рано).

Микроконтролерът се захранва от вътрешен генератор (външен е голям лукс за този микроконтролер, така че дори не го обмисляме). Естествено крак 1 (нулиране) не е включен. Проверяваме производителността по същия начин, както при предишните микроконтролери.
- EUST фърмуер за ATTiny13

Как да флашнете микроконтролер >


Проверка на изправността на "Z"-състоянието на входно-изходните портове.


„Z“-състоянието е състоянието, когато кракът е конфигуриран за въвеждане и няма ниво върху него (изглежда, че виси във въздуха и не е свързан с нищо). За да контролирате наличието на такова състояние, можете да използвате резисторен делител. При ниво “1” разделителят ще има захранващо напрежение от + 5v, при ниво “0” - земя 0v, а при “Z” -състояние I / O портът ще спре да пречи на делителя и той ще раздели захранващо напрежение и ще получим + 2.5v.

ФАЙЛОВЕ:
- Тествайте източници на фърмуер

(Посетен 18 359 пъти, 4 посещения днес)

  • Програмиране на микроконтролери
    • урок

    Внимание снимка - xkcd

    Представете си, че сте на изоставен остров. И за вас е жизненоважно да програмирате микроконтролера. Защо питаш? Е, да кажем, да поправим авариен радиофар, без който шансовете за спасение рязко падат.

    Радвайки се, че не сте забравили курса по асемблерен език, вие някак си написахте програмата с пръчка в пясъка. Сред оцелелите неща, по някакво чудо, имаше разпечатка на документацията за контролера (добре е, че все още не сте имали време да го стартирате за запалване!), И програмата беше преведена в машинни кодове. Остана най-голямата глупост - да го флашна в контролера. Но в радиус от 500 километра няма нито един програмист, да не говорим за компютри. Имате само източник на захранване (батерия, направена от кокосови картофи) и няколко парчета тел.

    Как да мигате MK с голи ръце?

    ATtiny13 MK от Atmel ще действа като тестов обект. Описаната техника работи с почти всеки контролер от семейството AVR, с изключение на това, че командните кодове може да се различават леко.

    Интерфейс

    Най-често срещаният и удобен интерфейс за AVR фърмуер е SPI(Сериен периферен интерфейс). За да се свържете чрез SPI, имате нужда само от четири проводника, без да броите земята:
    • SCK- тактов сигнал, синхронизира всички операции по обмен на данни;
    • MOSI(Master Out Slave In) - линия за данни от master към slave;
    • MISO(Master In Slave Out) - линия за данни, напротив, от подчинения към главния;
    • НУЛИРАНЕ- за да активирате фърмуера чрез SPI, трябва да приложите логическа "0" към този щифт.
    По този начин трябва да генерираме три сигнала и (по избор) да прочетем един. Ето как изглежда най-простата схема за това:


    Ориз. 1. Най-простата схема за свързване на SPI.

    За ваше удобство можете да добавите индикация за входните сигнали. Схемата става по-сложна, но не прекомерно:


    Ориз. 2. Схема с индикация на сигнали.

    Защита от бърборене

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


    Ориз. 3. RS-тригер за потискане на бърборенето.

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

    — Виж, бягай! - ще каже читателят - „Седя на безлюден остров. Къде мога да получа тригери тук? Е, можете да се отървете от отскачането без електронни схеми. Необходимо е само да смените "сухия" контакт с мокър течен. Превключвателят ще представлява два електрода, потопени в проводяща течност.

    Сигналите MOSI и RESET не изискват отбиване, за разлика от SCK: има значение само нивото на сигнала в момента на вземане на проби, а не неговите ръбове.

    Как работи SPI



    Ориз. 4. Времева диаграма на работа на SPI.

    SPI е синхронен интерфейс: всички операции се тактират по ръбовете на тактовия сигнал (SCK), генериран от главния. Максималната скорост на предаване е ограничена до 1/4 от часовника на контролера. Няма ограничения за минималната скорост: без часовников сигнал обменът на данни е „замразен“ и интерфейсът може да остане в статично състояние за произволно дълго време.

    SPI предаването се извършва в пълен дуплексен режим, един бит на такт във всяка посока. При нарастващия фронт на сигнала SCK подчиненото устройство чете следващия бит от линията MOSI, а при спадащия фронт извежда следващия бит към линията MISO. Всички погледи към фигура 4.

    Протокол на фърмуера

    Цялата комуникация между програмиста и MK се състои от изпращане на 32-битови команди и получаване на отговори от контролера. Пълен списък с команди е в листа с данни "e, но тук изброяваме какви операции трябва да се извършат, за да мигате MK:
    1. Превключване на контролера в режим на програмиране;
    2. (по избор) Прочетете ID на устройството;
    3. Изтрива;
    4. Пишете във флаш;
    5. (по избор) Проверка на записаното;
    Нека разгледаме подробно всяка стъпка.

    Активиране на режим на програмиране

    Режимът на програмиране се активира чрез прилагане на "0" към крака RESET. Но има някои тънкости. Atmel препоръчва първо да зададете ниско ниво на щифтовете RESET и SCK и едва след това да подадете захранване към контролера. Ако това не е възможно, след включване на захранването „0“ към SCK и след това положителен импулс към RESET:


    Ориз. 5. Прехвърлете MK в режим на програмиране.


    Ориз. 6. Команда "Активиране на програмата".

    Битове, маркирани като х, може да бъде всеки. По време на предаването на третия байт, контролерът трябва да изпрати обратно втория байт ( 01010011 ). Ако това се случи, тогава всичко е наред, командата е приета, контролерът чака допълнителни инструкции. Ако отговорът е различен, трябва да рестартирате MK и да опитате всичко отново.

    удостоверяване на лична карта


    Ориз. 7. Команда "Прочетете байта на подписа".

    Преди да напишете нещо в паметта на MK, трябва да се уверите, че имаме точно модела, от който се нуждаем. Всеки модел контролер има свой собствен трибайтов идентификатор (Signature). Можете да го прочетете с команди като
    00110000 000xxxxx xxxxxxbb xxxxxxxx
    Вместо bb(трети байт от командата) трябва да бъде заменен 00 за първия байт на идентификатора, 01 - за втория и 10 - за третото. Съответният идентификационен байт ще бъде предаден от контролера при изпращане на 4-тия байт от командата.

    За ATtiny13 стойността на идентификатора е 00011110 10010000 00000111 (0x1E 90 07).

    Почистване на контролера

    Ориз. 8. Команда "Chip Erase".

    Следващата стъпка е изчистване на паметта на MK, което става чрез изпращане на командата "Chip Erase".
    10101100 100xxxxx xxxxxxxx xxxxxxx
    Тази команда изтрива съдържанието на Flash и EEPROM (всички клетки ще съдържат FF), както и премахва заключващите битове, ако са зададени.

    Пишете във флаш памет

    Програмната памет (Flash) в ATtiny13 се състои от 512 двубайтови думи (1K байта). Адресът на думата е широк 9 бита. Флаш паметта е разделена на страници, всяка страница е с дължина 16 думи (общо 32 страници). Записването във флаш се извършва на два етапа.

    Първо трябва да заредите данните в буфера на страницата, за това се използва командата "Зареждане на страницата с програмна памет".
    01000000 000xxxx xxxxbbbb iiiiiiii- за зареждане на ниския байт на думата и 01001000 000xxxxx xxxxbbbb iiiiiiii- за изтегляне на по-старата.
    4 ниски бита от 3-тия команден байт bbbb- адреса на думата на страницата, иииииииии- зареден байт. Винаги първо трябва да се зарежда младият байт на думата, а след това старшият байт на същата дума.

    Ориз. 9. Команда Load Program Memory Page.

    След като буферът на страницата се зареди, трябва да изпълните командата "Записване на страница с програмна памет" 01001100 0000000a bbbbxxxx xxxxxxxxза да запишете страницата директно в паметта на контролера.
    Ниският бит на втория байт и високите 4 бита на третия a:bbbb- петбитов номер на страницата за записа.

    Ориз. 10. Команда "Записване на страница с програмна памет".

    Всичко това изглежда доста объркващо, но нищо сложно. Адресът на всеки байт от програмната памет се състои от 10 бита: ppppp:bbbb:w, Където
    ppppp- номер на страница (използва се в командата "Write Program Memory Page");
    bbbb- адрес на думата на страницата (в командата "Зареждане на страница с програмна памет");
    w- бит, който определя високия или ниския байт в думата (шифрован в първия байт на командата "Зареждане на страницата с програмна памет").

    флаш четене


    Ориз. 11. Команда "Четене на програмната памет".

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

    Четенето на паметта на програмата е по-лесно, отколкото записването в нея. Забравете за страниците, четенето се извършва байт по байт. Командата "Четене на програмна памет" изглежда така:
    00100000 0000000a bbbbbbbb xxxxxxxx- за четене на ниския байт на думата и 00101000 0000000a bbbbbbbb xxxxxxxx- за старши.
    Най-малкият бит от втория байт и целия трети байт a:bbbbbbbbе адресът на думата в паметта. Прочетеният байт се връща по време на предаването на 4-тия байт от командата.

    Завършване на програмирането

    Може би най-простата операция. За да завършите програмирането и да поставите MK в работен режим, достатъчно е да приложите логическо ниво "1" към RESET. Контролерът ще стартира и работи с новата програма.

    Практикувайте

    Време е да приложите на практика наученото. Жертвата на експеримента - ATtiny13 - е включена в макетната платка, до нея е монтиран климатизаторът на сигнала, всичко е готово:


    Ориз. 12. Експериментална схема.

    Ще шием програма като „никъде по-лесно“:
    ldi R24, 0x02 изход DDRB, R24 изход PORTB, R24 L1: rjmp L1
    Всичко, което прави, е да изведе по едно на PB1 крак и да влезе в безкраен цикъл. В машинните кодове са необходими само четири думи:
    E082BB87BB88CFFF
    За да го флашнете в контролера, трябва да въведете следните команди:
    1010 1100 0101 0011 0000 0000 0000 0000 // активиране на програмата 1010 1100 1000 0000 0000 0000 0000 0000 0010 // зареждане на адр.0000 нисък байт 82 0100 1000 0000 000 0 0000 0000 1110 0000 / / зареждане на адрес 0000 висок байт E0 0100 0000 0000 0000 0000 0001 1000 0111 // зареждане на адрес 0001 нисък байт 87 0100 1000 0000 0000 0000 0001 1011 1011 BB 0100 0000 0000 0000 0000 0010 1000 1000 // зареждане на адрес 0010 нисък байт 88 0100 1000 0000 0000 0000 0010 1011 1011 // зареждане на адрес 0010 висок байт BB 0100 0000 0000 0000 0000 0011 1111 1111 FF 0100 1000 0000 0000 0000 0011 1100 1111 // зареждане на адрес 0011 висок байт CF 0100 1100 00 00 0000 0000 0000 0000 0000 // страница за писане
    Ключ за начало, да тръгваме!

    декември 2015 г

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

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

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

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

    За да напишем програма на MK без програмист, се нуждаем от преобразувател на USB-RS232TTL порт и също. Конверторът USB-RS232TTL ви позволява да създадете COM порт с помощта на USB порта, който се различава от "истинския" само по това, че на неговите входове и изходи се използват логически нива на 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 MCU на Atmel с функциите за запис/четене на флаш памет, задаване на конфигурационни битове и автоматично откриване на типа на контролера. Записването и четенето на EEPROM не са внедрени. Имаше планове за допълване на функционалността на скрипта: добавяне писане и четене на EEPROM, прилагане на поддръжка за PIC контролери и т.н. Поради тази причина скриптът все още не е публикуван. Но поради липса на време изпълнението на плана беше забавено и за да не стане най-добрият враг от доброто, беше решено да се публикува съществуващата версия. внедрените функции няма да са достатъчни, моля, не се разстройвайте. В този случай можете да опитате сами да добавите желаната функция. Няма да го крия: идеята за ​​​​Създаването на този скрипт първоначално също носи образователен смисъл.След като разберете алгоритъма и добавите нещо свое към него, ще можете да разберете по-добре работата на MK в режим на програмиране, така че в бъдеще няма да се окажете в положението на момиче пред счупена кола, гледайки замислено вътрешностите й и не разбирайки защо „не върви“.

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

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

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

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

    Ориз. 1. SPI комуникация в режим на програмиране

    Сега нека се обърнем към фигура 1, взета от документацията за MK ATmega128A. Той показва процеса на изпращане на един байт към MCU и едновременно с това получаване на един байт от MCU. И двата процеса, както виждаме, използват едни и същи часовникови импулси, идващи от програмиста към микроконтролера на неговия SCK вход - един от щифтовете на микросхемата, за който тази роля е назначена в режима на програмиране SPI. Още две сигнални линии осигуряват приемане и предаване на данни по един бит на такт. Чрез входа MOSI данните влизат в микроконтролера, а данните за четене се вземат от изхода MISO. Обърнете внимание на двете пунктирани линии, начертани от SCK към MISO и MOSI. Те показват в кой момент микроконтролерът "поглъща" битовете данни, зададени на входа MOSI, и в кой момент задава собствен бит данни на изхода MISO. Всичко е съвсем просто. Но за да влезем в MK в режим на програмиране, все още се нуждаем от сигнал RESET. Нека не забравяме и общия GND проводник и VCC захранването. Общо се оказва, че само 6 проводника трябва да бъдат свързани към микроконтролера, за да го мигате чрез SPI. По-долу ще анализираме това по-подробно, но засега ще добавим, че обменът на данни с MK в режим на програмиране чрез SPI се извършва в пакети от 4 байта. Първият байт на всеки пакет е основно напълно запазен за кодиране на командата. Вторият байт, в зависимост от първия, може да бъде продължение на кода на командата или част от адреса, или може да има произволна стойност. Третият байт се използва главно за предаване на адреси, но в много команди може да има произволна стойност. Четвъртият байт обикновено носи данни или има произволна стойност. Едновременно с прехвърлянето на четвъртия байт някои команди получават данни, идващи от MK. Подробности за всяка инструкция могат да бъдат намерени в документацията на контролера в таблица, наречена „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 KΩ или да го увеличите до 10 KΩ (но във втория случай рискът от смущения се увеличава при използване на дълги проводници по пътя към MC). Що се отнася до връзката между входа на преобразувателя (CTS) и изхода на микроконтролера (MISO), тук се използва резистор от 100 Ohm. Това се дължи на особеностите на входа на използвания конвертор. По време на тестовете беше използван преобразувател на чип PL-2303, чиито входове, очевидно, се изтеглят до мощност плюс с относително ниско съпротивление (от порядъка на няколкостотин ома). За да "убия дърпането" трябваше да сложа резистор с толкова малко съпротивление. Въпреки това, не можете да го поставите изобщо. На преобразувателя това винаги е входът. Той не може да стане изход, което означава, че няма да има конфликт на изходи при каквото и да е развитие на събитията.

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

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


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

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


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


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

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


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

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

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

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

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

    Скриптът се намира в папката 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 controllers inc files" съдържа много полезна и обширна колекция от файлове с описание на контролери. Тези файлове се използват при писане на ваши собствени програми за MK. Още четири папки "MusicBox_..." съдържат файлове с програма за асемблер и фърмуер, готови за изтегляне в MK отделно за ATtiny13, ATtiny44, ATmega8 и ATmega128. Ако вече сте свързали един от тези MK за програмиране, както е предложено в тази статия, тогава можете да го флашнете точно сега - ще получите музикална кутия. Повече за това по-долу.

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

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

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

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

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

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

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

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

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

    • Памет за програми (FLASH) - 1Kb
    • RAM - 64 байта
    • Брой входове/изходи - 6
    • ШИМ изходи - 2 бр
    • Аналогови входове (ADC 10bit) - 4
    • Таймер 8 бита - 1
    • Захранващо напрежение 1.8 - 5.5V
    • Работна честота - до 20 MHz
    • Консумация в активен режим 1.8V / 1MHz - 190uA
    • Консумация в режим на заспиване 1.8V / 1MHz - 24uA

    Програмиране на ATtiny13

    За програмиране настроих Arduino IDE. Както знаете, тази среда за разработка може да поддържа допълнителни контролери. Например, в тази статия говорих за това как да програмирам "народния WiFi" ESP8266 в Arduino IDE. Уебсайтът arduino.cc има нишка, посетена от програмирането на ATTiny13 в средата на Arduino. Имам инсталирана версия 1.6.5. Изтеглям архива на ядрото ATTiny за Arduino. Разопаковам го в папката c:\Program Files (x86)\Arduino\hardware\ и в IDE на Arduino се появяват допълнителни платки

    Сега изтеглете програми. Размерът на паметта на микропроцесора е само 1Kb и там няма да се побере буутлоудър. Следователно изтеглянето на скици се извършва от програмиста чрез ISP. USBAsp, с който програмирах Atmega328, не искаше да работи с тинката. Имам нужда от специален програмен фърмуер, с който не исках да се забърквам. Можете да програмирате микроконтролера с помощта на всеки Arduino. За да направя това, събирам следната схема:

    В Arduino IDE изберете "File->Samples->ArduinoISP" и качете скицата на програмиста в Arduino. След това избирам "Инструменти->Програмист->Arduino като ISP". Сега можете да качвате скици в tinka. Трябва да се отбележи, че ядрото ATTiny13 за Arduino съдържа ограничен набор от функции на Arduino.

    На работа имам настолна елха със светлинни водачи.

    В елхата имаше 12V халогенна крушка и мотор, който върти цветен кръг - цветен филтър, който променя цвета на световодите. За 3 години умряха и крушката и мотора.

    Затова реших да възстановя това коледно дърво с парче RGB лента, управлявана от ATtiny13. Премахването на контрола на лентата се оказа така:

    три транзистора и резистора, линеен регулатор на напрежението и самата тинка.

    Скицата е софтуерен триканален PWM с промяна на яркостта на различни канали, в резултат на което лентата блести в различни цветове

    След това остава само да фиксирате дъската и лентата в кутията за коледно дърво

    Залепена е бяла лента за подобряване на отразяването на светлината вътре в кутията.



    Хареса ли ви статията? Сподели го