ПредишенСледващото

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

Тук ще разгледаме примерна програма за микроконтролера AVR в езика С (С), която ще използвате същия подход както в примера на програма в парламента, така че ние ще трябва да работи със същото оформление като в последната статия. Мига светодиода, които правим не само в ротация, както и малко по-различен начин и с допълнителни закъснения.

Накратко за езика за програмиране на C

Първоначално, на езика C, използвани в операционната система Unix за писане на приложения и на ядрото на операционната система. По-късно е пренесен към други платформи, като го много широка популярност печелите.

При програмиране на C за AVR микроконтролери използва набор от библиотеки AVR-библшотеката и съставител AVR-ССЗ, инсталирането на които в Linux, вече сме измислили в предишна статия.

Изходният код на езика С

Може да се окаже, че никога не са писали програма на С - това е какво да се притесняваш. С цел да се напише, че първата програма за AVR C и провежда експерименти с него достатъчно основни познания за работа с конзолата в Linux. По-късно, вие ще бъдете в състояние да намери липсващата информация и да разгледате всичко, което трябва сами.

Следният код на С ще изпълнява следните действия (последователности от действия):

  • светлината на LED 1 и гаси с леко забавяне (два пъти);
  • извършване на голямо закъснение;
  • светлината на LED 2 и гаси с леко забавяне (два пъти);
  • да започне всичко отначало.

Тук е изходния код, който работи на по-горе алгоритъм:

"#include на низ "Създава файл връзка" io.h "към текущия файл на изходния код, и линия" #include "- дава възможност на файла" delay.h ".

Разберете къде файлове с данни се намират на Linux, можете да използвате "намерете" команда. Например, тичам да се намерят начини, където се намират файловете "io.h" и филтрирате резултатите, които съдържат комбинация от "AVR":

Резултатът е списък с пътищата до всички файлове, в които името се случва "io.h", и пътя съдържа подниза "AVR":

Тук можем да видим какво се нуждаем, е файл от "/usr/lib/avr/include/avr/io.h" на пътя. След като съдържанието му може да се види това, което тя съдържа включването на други файлове с дефиниции (AVR устройство-специфични определения IO), която от своя страна зависи от избрания тип на микроконтролер. Вид микроконтролер (тип MCU) в този случай е определен като параметър "-mmcu = ATmega8" (за ATmega8), когато се обадите на съставител команда "AVR-ССЗ".

В моя случай, микроконтролера ATmega8 чрез файла "io.h" свързва следващия файл - "iom8.h" (Input Output Mega8), тя съхранява всички дефиниции на променливи като PD0, PD1, PB8, DDRD, DDRB, RAMSTART, RAMEND и много повече.

Също така, с помощта на командата "котката" може да показва само тези редове, които съдържат файл е посочено комбинация от символи или думи:

Тази команда показва текст тук:

По този начин можете да видите какви са константи и определения в библиотеката AVR-ССЗ за работа с IO (вход-изход), техните стойности, и още за вашия тип микроконтролер!

"Delay.h" файл съдържа определението за забавяне функции, по-специално, че съдържа функцията код "_delay_ms", което ще използваме в този пример. За изчисляване на интервал от време, тези функции може да използват постоянно "F_CPU", която обявихме още в началото на кода.

String "невалидни основни (свободен)" с лявата скоба започва тялото на нашата програма и завършва с десния скоба ">" в долната част на списъка. По този начин, ние обявихме на основната функция "главен", с която започва програмата, тялото на функция се поема в скоби и ключова дума "нищожен" означава, че функцията не приема и не даде никакви данни в този случай.

Важно е да се знае, че в C език с точка и запетая ";" е специален характер - Нека оператора (който не прави нищо) и се използва за обозначаване на компилатора, че е в края на командата.

В линията "INT delay_ms_1 = 100;" обявихме нова променлива "delay_ms_1" с "INT" на типа (Цяло число, целочислени стойности тип от -32 768 до 32 767) и определя стойност на 100. Той служи в нашата програма, за да настроите закъснението в милисекунди когато мига на всеки LED.

В следващия ред "INT delay_ms_2 = 300;" ние извършваме и инициализация на променлива, която ще бъде използвана, за да настроите времето на забавяне между отделните светодиоди трептене - 300 милисекунди.

След това идва команда "DDRD на | = (1 <

Следващата команда е идентичен с предишния тази разлика, че тя определя канала към изходен порт PD1 DDRD.

Чрез канали PD0 и PD1 (крака 2 и 3 чипа) ние свързан светодиоди, които светят, а ние ще се управлява.

Line "PORTD | = (1 <

След това изпълнява малки време на забавяне "_delay_ms (delay_ms_1);" причинява _delay_ms функция и преминават като променлива delay_ms_1 аргумент, който вече съдържа редица 100.

Line "PORTD =

(1 <

(1 <

(1 <

"(Промяна на всички битове в обратното).

В следващите редове ние отново извърши настройка и нулиране на бита в Regitra порт PD0 PORTD инсталирани забави "delay_ms_1", отколкото ние правим индикаторът е свързан с канала PD0 запали и да гасят (трептене, премигване).

Низ "_delay_ms (delay_ms_2);" тече по-дълъг интервал от време, като се използва стойността на променливата "delay_ms_2", който е получил по-високата стойност 300 (300 мс закъснение) на.

Следваща произвеждаме два пъти за създаване и възстановяване бита PD1 (2-ия бит в регистъра на байт) в PORTD порт регистър отколкото принуди трептене LED, който е свързан с канал порт PD1 PORTD микроконтролер.

След завършване на горните команди всичко започва отново в безкраен цикъл ", докато (1)".

Най-трудното нещо да се разбере тук е, може би, на работата на инсталиране на необходимите бита в пристанищата. По-подробно, по темата са включени в статията: Работа с регистри AVR микроконтролер в битови операции C.

Съставяне и програма на фърмуера в МС

За съставянето на програмата ще спести на изходния код във файл, наречен "leds_blinking.c". Ако вече сте конфигурирали Geany сряда, за да компилирате само да кликнете върху бутона "Събиране" в лентата с инструменти. За да съставят досие с програма на С в конзолата изпълнете следната команда:

В резултат на работата, ако няма грешка, ние получаваме leds_blinking.o обектен файл, от което имаме нужда, за да извлича необходимите данни за нашия микроконтролер фърмуер (в моя случай ATmega8 активност Kit Ръчна, параметър "-mmcu = ATmega8").

За да извлечете данни и изграждане на даден файл фърмуер в Intel Hex формат, трябва да натиснете бутона "Билд" на Geany. От конзолата, можете да получите желания файл с командата:

Сега, когато имаме файла на фърмуера в Intel HEX формат ще записва съдържанието (I) в флаш паметта на микроконтролера, за да извършите тази операция, можете да натиснете в подготвената среда Geany бутона контакт ", управлявани или да видите текущия файл" (изпълнение). В конзолата, можете да извършвате фърмуер използване avrdude отбор (опция ATmega8 "-p M8", програмист USBAsp "-с usbasp"):

Веднага след пробиването на КН ще бъдат изпратени за нулиране на команда (RESET) и програмата ще бъде изпълнена в кристала, както ще бъде доказано pomigivayuschie светодиоди. RESET също може да се извърши ръчно да кандидатствате отново за тази мощност към микроконтролера.

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

Документация C и AVR език C

Брайън Kernighan и Денис Ричи - език за програмиране C: brian-kernighan-and-dennis-ritchie-c-language.pdf.zip (2,1Mb, PDF).

Хърбърт Шилдт - The Complete Референтен C: gerbert-shildt-c-complete-guide.zip (912Kb, HTML).

Ако е възможно, купете един добър и чист наръчник за C, на хартиен носител за по-лесно учене и работа.

На линка по-горе можете да прочетете документацията (на английски) директно на сайта или да го изтеглите на файл в HTML и PDF, той има цялата необходима информация за използването на AVR-библшотеката библиотека за програмиране AVR микроконтролери.

заключение

Като убеден, работещ код по-горе, се опитват да експериментират с него. Например, за да направите така, че всяка LED не е светна два пъти, както в примера, но три или четири. Също така, да експериментират с закъснения.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!