- Подготовка за програмиране:
- Създаване на нов проект с помощта на MPLAB-X:
- Запознаване с регистрите за конфигуриране:
- Задаване на конфигурационни битове в MPLAB-X:
- Програмиране на PIC за мигане на светодиод:
- Електрическа схема и симулация на Proteus:
Това е вторият урок от нашата серия уроци по PIC. В нашия предишен урок Първи стъпки с PIC Microcontroller: Въведение в PIC и MPLABX, научихме основните неща за нашия PIC микроконтролер, инсталирахме и необходимия софтуер и закупихме нов PicKit 3 програмист, който скоро ще използваме. Сега сме готови да започнем с нашата първа мигаща програма с LED, използвайки PIC16F877A. Също така ще научим за конфигурационните регистри в този урок.
Този урок очаква, че сте инсталирали необходимия софтуер на вашия компютър и знаете някои прилични основи за PIC MCU. Ако не, моля, върнете се към предишния урок и започнете от там.
Подготовка за програмиране:
Тъй като решихме да използваме PIC16F877A, с компилатора XC8 нека започнем с техния лист с данни. Препоръчвам на всички да изтеглят таблицата с данни PIC16F877A и ръководството за компилатор XC8, тъй като ще се позоваваме на тях често, докато напредваме в нашия урок. Винаги е добра практика да прочетете пълния лист с данни на който и да е MCU, преди да започнете да програмирате с него.
Сега, преди да отворим нашия MPLAB-X и да започнем програмирането, има няколко основни неща, с които човек трябва да е наясно. Както и да е, тъй като това е първата ни програма, не искам да ви преследвам, хора с много теория, но ще спрем тук и там, докато програмираме и ще ви обясня нещата като такива. Ако нямате достатъчно време да прочетете всичко това, просто погледнете и скочете във видеото в долната част на страницата.
Създаване на нов проект с помощта на MPLAB-X:
Стъпка 1: Стартирайте MPLAB-X IDE, която инсталирахме в предишния клас, след като се зареди, тя трябва да изглежда нещо подобно.
Стъпка 2: Кликнете върху Файлове -> Нов проект или използвайте клавишната комбинация Ctrl + Shift + N. Ще получите следния POP-UP, от който трябва да изберете Standalone Project и да натиснете Next.
Стъпка 3: Сега трябва да изберем нашето устройство за проекта. Така че напишете като PIC16F877A в падащото меню Избор на устройство . След като го направите, трябва да бъде така и след това щракнете върху Напред.
Стъпка 4: Следващата страница ще ни позволи да изберем инструмента за нашия проект. Това ще бъде PicKit 3 за нашия проект. Изберете PicKit 3 и кликнете върху следващия
Стъпка 5: Следващата страница ще поиска да изберете компилатора, изберете XC8 Compiler и щракнете върху next.
Стъпка 6: На тази страница трябва да посочим нашия проект и да изберете мястото, където проектът трябва да бъде запазен. Кръстих този проект като Blink и го запазих на работния си плот. Можете да го наименувате и запазите по вашия предпочитан начин. Нашият проект ще бъде запазен като папка с разширението .X, което може да бъде стартирано директно от MAPLB-X. Щракнете върху Finish веднъж готово.
Стъпка 7: Това е !!! Нашият проект е създаден. Най-левият прозорец ще покаже името на проекта (Тук мига), щракнете върху него, за да можем да видим всички директории вътре в него.
За да започнем програмирането, трябва да добавим C Основен файл, в нашата директория с изходни файлове. За да направите това, просто щракнете с десния бутон върху изходния файл и изберете New -> C Main File, както е показано на изображението по-долу.
Стъпка 8: Ще се появи следният диалогов прозорец, в който трябва да се спомене името на C-файла. Отново съм посочил в Blink, но изборът е оставен на вас. Дайте му име в колоната Име на файл и кликнете върху край.
Стъпка 9: След като бъде създаден основният файл на C, IDE ще го отвори за нас с някои кодове по подразбиране в него, както е показано по-долу.
Стъпка 10: Това е всичко, сега можем да започнем да програмираме нашия код в C-main файла. Кодът по подразбиране няма да се използва в нашите уроци. Така че нека ги изтрием напълно.
Запознаване с регистрите за конфигуриране:
Преди да започнем да програмираме който и да е микроконтролер, трябва да знаем за неговите конфигурационни регистри.
И така, какви са тези конфигурационни регистри, как и защо трябва да ги задаваме?
Устройствата PIC имат няколко местоположения, които съдържат битове за конфигуриране или предпазители. Тези битове определят основната работа на устройството, като режим на осцилатор, таймер за наблюдение, режим на програмиране и защита на кода. Тези битове трябва да бъдат зададени правилно, за да стартираме кода, в противен случай имаме неработещо устройство . Затова е много важно да знаем за тези конфигурационни регистри, преди дори да започнем с нашата програма Blink.
За да използваме тези конфигурационни регистри, трябва да прочетем листа с данни и да разберем какви са различните типове конфигурационни битове и техните функции. Тези битове могат да бъдат зададени или нулирани въз основа на нашите изисквания за програмиране с помощта на конфигурационна прагма.
Прагмата има следните форми.
#pragma config setting = state-value #pragma config register = стойност
където настройката е дескриптор на настройка на конфигурацията, напр. WDT, а състоянието е текстово описание на желаното състояние, например OFF. Обмислете следните примери.
#pragma config WDT = ON // включване на таймер за наблюдение #pragma config WDTPS = 0x1A // посочете стойността на скалата на таймера
ОТПУСНЕТЕ СЕ!!….. РЕЛАКС !!…. РЕЛАКС !!…...
Знам, че това е прекалено много в главите ни и настройването на тези битове за конфигуриране може да изглежда малко трудно за начинаещ !! Но предизвикателно не е с нашия MPLAB-X.
Задаване на конфигурационни битове в MPLAB-X:
Microchip е направил този уморителен процес много по-лесен, като използва графични изображения на различните видове битове за конфигуриране. Така че сега, за да ги настроим, ние просто трябва да следваме стъпките по-долу.
Стъпка 1: Щракнете върху Window -> PIC Memory View -> Configuration Bits. Както е показано по-долу.
Стъпка 2: Това трябва да отвори прозореца за конфигурационни битове в долната част на нашата IDE, както е показано по-долу. Това е мястото, където можем да настроим всеки от конфигурационните битове според нашите нужди. Ще обясня всеки бит и неговата цел, докато напредваме през стъпките.
Стъпка 3: Първият бит е битът за избор на осцилатор.
PIC16F87XA може да работи в четири различни режима на осцилатор. Тези четири режима могат да бъдат избрани чрез програмиране на два конфигурационни бита (FOSC1 и FOSC0):
- LP Кристал с ниска мощност
- XT кристал / резонатор
- HS високоскоростен кристал / резонатор
- RC резистор / кондензатор
За нашите проекти използваме 20Mhz Osc, поради което трябва да изберем HS от падащото поле.
Стъпка 4: Следващият бит ще бъде нашият таймер за наблюдение Активиране на бита.
Watchdog Timer е свободно работещ RC осцилатор, който не изисква външни компоненти. Този RC генератор е отделен от RC осцилатора на щифта OSC1 / CLKI. Това означава, че WDT ще работи дори ако часовникът на щифтовете OSC1 / CLKI и OSC2 / CLKO на устройството е спрян. По време на нормална работа, изчакване на WDT генерира нулиране на устройството (Нулиране на таймера за наблюдение). Битът TO в регистъра на състоянието ще бъде изчистен при изчакване на таймера на Watchdog Timer. Ако таймерът не е изчистен в нашето софтуерно кодиране, тогава целият MCU ще се нулира при всяко препълване на WDT таймера. WDT може да бъде деактивиран за постоянно чрез изчистване на конфигурационния бит.
Ние не използваме WDT в нашата програма, така че нека го изчистим, като изберем OFF от падащото поле.
Стъпка 5: Следващият бит ще бъде Бит с таймер за включване.
Таймерът за включване осигурява фиксиран 72 ms номинален таймаут при включване само от POR. Таймерът за включване работи на вътрешен RC генератор. Чипът се поддържа в Reset, докато PWRT е активен. Закъснението на PWRT позволява на VDD да се повиши до приемливо ниво. Предоставен е бит за конфигуриране, за да се активира или деактивира PWRT.
Няма да имаме нужда от такива закъснения в нашата програма, така че нека изключим и това.
Стъпка 6: Следващият бит ще бъде програмирането с ниско напрежение.
LVP битът на конфигурационната дума позволява програмиране на ICSP с ниско напрежение. Този режим позволява на микроконтролера да бъде програмиран чрез ICSP, използвайки VDD източник в диапазона на работното напрежение. Това означава само, че VPP не е необходимо да се привежда към VIHH, а вместо това може да се остави при нормалното работно напрежение. В този режим RB3 / PGM щифтът е посветен на функцията за програмиране и престава да бъде I / O щифт с общо предназначение. По време на програмирането VDD се прилага към щифта MCLR. За да влезете в режим на програмиране, VDD трябва да се приложи към RB3 / PGM, при условие че е зададен битът LVP.
Нека изключим LVP, за да можем да използваме RB3 като I / O щифт. За да направите това, трябва само да включите тази OFF помощта на падащото поле.
Стъпка 7: Следващите битове ще бъдат EEPROM и битове за защита на паметта на програмата. Ако този бит е включен, след като MCU е програмиран, никой няма да изтегли нашата програма от хардуера. Но засега нека оставим и трите изключени.
След като настройките бъдат изпълнени според инструкциите, диалоговият прозорец трябва да изглежда по следния начин.
Стъпка 8: Сега кликнете върху Generate Source Code to Output, нашият код ще бъде генериран, сега просто го копирайте заедно със заглавния файл и го поставете в нашия Blink.c C-файл, както е показано по-долу.
Това е нашата работа по конфигуриране. Можем да имаме тази конфигурация за всички наши проекти. Но ако се интересувате, можете да се забъркате с тях по-късно.
Програмиране на PIC за мигане на светодиод:
В тази програма ще използваме нашия PIC микроконтролер, за да мига светодиод, свързан към I / O щифт. Нека да разгледаме различните I / O щифтове, налични на нашия PIC16F877A.
Както е показано по-горе, PIC16F877 има 5 основни входно / изходни порта. Те обикновено се обозначават с PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) и PORT E (RE). Тези портове се използват за входно / изходно взаимодействие. В този контролер „PORT A“ е широк само 6 бита (RA-0 до RA-5), „PORT B“, „PORT C“, „PORT D“ са само 8 бита (RB-0 до RB-7, RC-0 до RC-7, RD-0 до RD-7), „PORT E” има само 3 битова ширина (RE-0 до RE-2).
Всички тези портове са двупосочни. Посоката на порта се контролира чрез използване на TRIS (X) регистри (TRIS A, използван за задаване на посоката на PORT-A, TRIS B, използван за задаване на посоката за PORT-B и др.). Задаването на TRIS (X) бит '1' ще зададе съответния бит PORT (X) като вход. Изчистването на TRIS (X) бит „0“ ще зададе съответния бит PORT (X) като изход.
За нашия проект трябва да направим щифта RB3 на PORT B като изход, за да може нашият светодиод да бъде свързан към него. Ето кода за мигане на LED с PIC микроконтролер:
#include
Първо посочихме външната кристална честота, използвайки #define _XTAL_FREQ 20000000. След това във функция void main () , инструктирахме нашия MCU, че ще използваме RB3 като изходен (TRISB = 0X00;) щифт. След това накрая се използва безкраен цикъл, докато мигането на LED продължава вечно. За да мига един светодиод, трябва просто да го включваме и изключваме със значително забавяне.
След като кодирането завърши, изградете проекта, като използвате командата Изпълнение -> Изграждане на главния проект. Това трябва да компилира вашата програма. Ако всичко е наред (както трябва да бъде), изходна конзола в долната част на екрана ще покаже съобщение BUILD SUCCESSFUL, както е показано на снимката по-долу.
Електрическа схема и симулация на Proteus:
След като изградим проект и ако Build е успешен, HEX файл би бил генериран на фона на нашата IDE. Този HEX файл може да бъде намерен в долната директория
За вас може да е различно, ако сте запазили на друго място.
Сега, нека бързо да отворим Proteus, който сме инсталирали по-рано, и да създадем схеми за този проект. Няма да обясняваме как да направим това извън обхвата на този проект. Но за да не се притеснявате, това е обяснено във видеото по-долу. След като следвате инструкциите и изградите схемите, тя трябва да изглежда нещо подобно
За да симулирате изхода, щракнете върху бутона за възпроизвеждане в долния ляв ъгъл на екрана след зареждане на Hex файла. Той трябва да мига светодиода, свързан към RB3 на MCU. Ако имате някакъв проблем в него, моля, гледайте видеоклипа, ако все още не е разрешен, използвайте раздела за коментари за помощ.
Сега направихме първия си проект с PIC микроконтролер и проверихме изхода, използвайки симулационен софтуер. Отидете и променете програмата и наблюдавайте резултатите. Докато не се срещнем по следващия ни проект.
О, чакай !!
В следващия ни проект ще научим как да накараме това да работи на действителен хардуер. За това ще ни трябват следните инструменти, които да ги поддържат готови. Дотогава ЧЕСТИТ УЧЕНИЕ !!
- PicKit 3
- PIC16F877A IC
- 40-пинов държач на IC
- Перфектна дъска
- 20Mhz Crystal OSC
- Женски и мъжки щифтове Bergstick
- 33pf кондензатор - 2Nos
- 680 ома резистор
- LED от всякакъв цвят
- Комплект за запояване.