В последната статия обсъдихме структурата на програмата на AVR за сглобяване, събрахме една проста схема и провежда фърмуеъра на микроконтролера. С микроконтролер два светодиода са свързани, че сме водени да светне.
Тук ще разгледаме примерна програма за микроконтролера AVR в езика С (С), която ще използвате същия подход както в примера на програма в парламента, така че ние ще трябва да работи със същото оформление като в последната статия. Мига светодиода, които правим не само в ротация, както и малко по-различен начин и с допълнителни закъснения.
Накратко за езика за програмиране на C
Първоначално, на езика C, използвани в операционната система Unix за писане на приложения и на ядрото на операционната система. По-късно е пренесен към други платформи, като го много широка популярност печелите.
При програмиране на C за AVR микроконтролери използва набор от библиотеки AVR-библшотеката и съставител AVR-ССЗ, инсталирането на които в Linux, вече сме измислили в предишна статия.
Изходният код на езика С
Може да се окаже, че никога не са писали програма на С - това е какво да се притесняваш. С цел да се напише, че първата програма за AVR C и провежда експерименти с него достатъчно основни познания за работа с конзолата в Linux. По-късно, вие ще бъдете в състояние да намери липсващата информация и да разгледате всичко, което трябва сами.
Следният код на С ще изпълнява следните действия (последователности от действия):
- светлината на LED 1 и гаси с леко забавяне (два пъти);
- извършване на голямо закъснение;
- светлината на LED 2 и гаси с леко забавяне (два пъти);
- да започне всичко отначало.
Тук е изходния код, който работи на по-горе алгоритъм:
"#include на низ
Разберете къде файлове с данни се намират на 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. Това ще помогне за откриване на грешки и коментари, ако нещо не работи както трябва. Брайън 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 не е светна два пъти, както в примера, но три или четири. Също така, да експериментират с закъснения.Съставяне и програма на фърмуера в МС
Документация C и AVR език C
заключение
Свързани статии