Истражене основе микроконтролера

Испробајте Наш Инструмент За Елиминисање Проблема





Једно је сјајно у вези са микроконтролером, они су доступни у готово свим деловима света и у електронским трговцима.

Увод

У основи микроконтролери се популарно користе у апликацијама које укључују процене околног окружења и у сличној електроници.



Ови уређаји се могу користити за приказивање одређеног параметра, у апликацијама за управљање мотором, ЛЕД осветљењем, сензорима различитих врста, као што су сензори нагиба, акцелерометар, мерач брзине, регистратори података, регулатор температуре, тастатуре итд.

Примарно разумевање микроконтролера могло би се добити позивањем на АВР Амега32 микроконтролер који је толико напредан да се понекад назива рачунаром у чипу.



Овај уређај је додељен за извршавање низа наредби за формирање програма.

Језик програма који бисте овде видели је Ц ++. На овом курсу ћете овај језик научити дубље.

Што се тиче МЦУ-а, добијате могућност контроле и конфигурисања свих његових пиноута.

Ако се помало уморите од овога, само се охладите јер то уопште није ништа сложено, бићете лагани кроз све аспекте стабилно, али чврсто како напредујемо.

У МЦУ чипу сви пинови, осим Вдд и Всс који су напојни пинови чипа, могу се доделити ексклузивним ознакама.

Детаљи пиноута

Ако баците поглед на чип одозго, пронашли ћете мали троугласти зарез који означава почетну тачку одакле започињу пиноути, рачунајући да је # 1 чип чипа започет одмах испод овог зареза.

Полазећи од овог пина, нашли бисте 20 пинова до дна на тој страни (лево) и још 20 пинова на другој страни (десно), настављајући одоздо према горе на десној страни.

Првих 8 пинова почев од зареза су ПБО-7 који чине индексне пинове ИЦ-а, јер сви програми овде почињу индексом нула.

Горња серија пиноута назива се ПОРТ Б, док постоје други идентични скупови портова који су додељени од А до Д.

Ови портови могу бити додељени за прихватање и препознавање података који се зову ИНПУТ, као и за пренос података у неком одређеном облику који се назива ОУТПУТ.

Две пинове које спадају у општу категорију су (+) / (-) пинови који се такође називају Вдд и ГНД.

Може се видети један пин из ПОРТА Д (ПДО-6) који се налази на левој страни чипа у доњем делу.

ПД7, који је пин # 7 ПОРТ-а Д, могао би се пратити самостално и започињући серију пиноута са десне стране.

Сада се крећући са десне стране чипа где се завршава ПОРТ Д, ПОРТ Ц започиње одбројавање нагоре по редоследу.

Они доприносе многим занимљивим пиновима МЦУ-а, тачно од аналогних до дигиталних.

Ови пинови имају функцију да постану сензорски улази за откривање многих параметара кроз екстерно конфигурисане фазе аналогних кола.

Горе наведене чиоде чине ЛУКУ А.

Аналогно дигитално претварање преко горе наведених пинова могло би се разумети уз помоћ примера у коме се аналогни ниво температуре откривен помоћу уобичајеног сензора као што је термистор примењује на један од ПОРТ А пинова који МЦУ лако прихвата и претвара. да би се произвело дигитално очитавање од нула до 255 степени Ф (8-битна цифра која се може надоградити за постизање 10-битног излаза).

Још једна карактеристика која би се могла посматрати у МЦУ-има је доступан програмски простор или меморија која одређује простор за променљиве и програм назначен за микроконтролер.

Поред тога, МЦУ-ови имају уграђени сат за бројање релевантних параметара.

Карактеристике сата омогућавају МЦУ-у да се примени за много различитих процеса бројања који могу бити брзи у опсегу микросекунди у зависности од спецификација одређеног уређаја, а такође могу бити спорији у било којој жељеној мери.

До сада сте можда већ донекле разумели концепт микроконтролера и његове портове и пинове.

Како створити СПИ конектор од програмера до микроконтролера

Сада је време да мало дубље зађемо у тему и истражимо свет програмирања.

Рекавши то, пре него што се упуштамо у процедуру учитавања програма у чип, морамо пронаћи прави начин да интегришемо СПИ (серијски периферни интерфејс) конектор са МЦУ.

Међутим, чак и након овога не можемо само угурати СПИ у МЦУ пиноутс, зар не? Такође не можемо дозволити да се продужене жице са СПИ директно убаце у даску за хлеб. То би такође могло довести до нетачног подешавања жица повезаних са нетачним пиновима који праве лоше везе.

Стога, како бисмо ствари учинили апсолутно беспрекорнима, радимо поступке преко мале веродостојне плоче у којој добивамо потребне лемере за спајање који се називају и залемљени заглављем. Ови затичи заглавља сада би се могли користити за повезивање са СПИ конектором. Везе из овог заглавља могу се прекинути са другим паралелним затичима заглавља који се могу користити за везе на плочи.

Стога горњи склоп сада чини чврсту и поуздану међуповезницу за СПИ на МЦУ.

До сада све изгледа лепо и савршено, па пређимо на зараду од програмера који је потребан између вашег рачунара и МЦУ-а.

Могло би бити мноштво компанија које производе и продају ове јединице за програмирање, па вам набавка ових не би требало да представља проблем, као што су Адафруит Индустриес, УСБтиниИСП или Спаркфун итд.

Неколико од њих може изгледати потпуно другачије од конвенционалних типова, али у основи има све идентично и следи стандардна правила програмирања и може се користити као интерфејс између вашег рачунара и АВР микроконтролера.

Међутим, припазите мало, ако користите неки други МЦУ, а не АВР Атмега32, можда ћете морати потражити одговарајуће компатибилни програмер за тај одређени МЦУ чип.

Може се приметити да доста ових програмера запошљава идентичне управљачке програме, о чему се мора водити рачуна, а о томе ћемо сазнати више у наредним поглављима.

Повезивање вашег рачунара са микроконтролерским чипом је заиста основно и било би вам драго да знате колико су једноставни поступци потребни за ово. Хајде одмах да притиснемо дугмеЈ

Израда горе објашњене плоче интерфејса СПИ није тешка, све је у томе да ваше гвожђе за лемљење ради кроз све везе на приказана два реда заглавља игала на малој плочи опште намене.

Горња слика приказује детаље везе које бисте морали да пратите док међусобно повезујете жице између заглавља.

Да бисмо ствари учинили још једноставнијим, прођите кроз следеће детаље везе за исте позивајући се на горњу слику:

СПИ пин почев од левог горе иде у „Мастер ИН, Славе ОУТ“ (МИСО)

СПИ клин из левог центра повезује се са клином за сат (СЦК)

СПИ клин у доњем левом углу спаја се са Ресетовањем. (О овој иглици ћемо детаљно научити у следећим водичима)

СПИ релевантан за доње десно закачење са ГНД пином МЦУ-а, ГНД се односи на пин који чини нулту линију напајања или негативну (релативну) шину напајања.

СПИ који се завршава из средњег десног заглавља повезује се са „Мастер Оут, Славе ИН“ (МОСИ) пином МЦУ-а.

СПИ који излази из горњег десног заглавља повезан је са (+) МЦУ-а, што је сасвим очигледно Вдд или позитивни пин напајања МЦУ-а.

То је то.

Повежите два конектора како је објашњено и ваша плоча СПИ интерфејса је спремна за потребне радње.

За даљу помоћ можете погледати слику приказану горе, ваша коначна интерфејс плоча би требала изгледати овако након што се све жичане везе на одговарајући начин ураде уз помоћ горе наведене расправе.

Надам се да сте можда већ направили СПИ интерфејс као што је објашњено у претходном водичу, а сада је време да осигурамо да наш рачунар прихвати програмер који треба да интегришемо између рачунара и МЦУ-а.

Израда једноставног програмског кода за МЦУ

Узимамо УСБТиниИСП јединицу доступну од Спаркфуна за повезивање рачунара са микроконтролером.

Знамо да ће за сваки оперативни систем рачунара, попут Виндовс-а, бити потребни управљачки програми без којих би било бескорисно учитати било шта у рачунар, тако да ће нашем програмеру бити потребни управљачки програми да би се учитао у ваш рачунар.

Завиримо у процедуре потребне за инсталирање управљачких програма у ОС вашег рачунара, овде ћемо узети пример Виндовс 7 ОС-а са 32-битним или 64-битним спецификацијама.

Отворите спаркфун.цом и кликните на „страницу џепног АВР програмера“. Линк се може лако визуализовати на страници.

Затим испод докумената пронађите „Виндовс дривер“ и једноставно кликните на њега.

Ово ће вам обезбедити датотеку поцкетпрог-дривер.зип на вашем рачунару.

Идите на свој рачунар, пронађите место за преузимање и само распакујте преузету датотеку у фасциклу.

У случају да је ваш рачунар 64-битни ОС, потребно је да следите још неколико корака како је дато испод, са 32-битним ОС-ом можете директно започети инсталацију из распаковане датотеке.

За 64-битне следите ове, за 32-битне једноставно занемарите:

Погуглајте „либусб соурцефорге“ и кликните на ове везе најновију верзију.

Наишли бисте на неколико додатних датотека, али би вас занимало да пронађете биб датотеку, то јест: либусб-вин32-бин - #. #. #. #. Зип

Сада идите и пронађите ово место за преузимање на рачунару, распакујте га и сачувајте у једној од фасцикли.

У ову фасциклу, пређите преко фасцикле бин, настављајући до фасцикле амд64.

Овде бисте видели неколико директоријума као: гхцаллед либусб0.длл и либусб0.сис.

Желели бисте да их преименујете у: либусб0_к64.длл и либусб0_к64.сис.

Сада ћете морати да копирате горе наведене датотеке у директоријум поцкетпрог-дривер, једноставно препишите датотеке на постојећу верзију.

Да бисте инсталирали горње управљачке програме, занимао би вас следећи метод који је прилично неконвенционалан:

То је режим „додај застарели хардвер“.

Кликните на „Старт Мену“

Затим наставите десним кликом на „рачунар“

Кликните на „Управљање“ и на крају кликните на „управитељ уређаја“

Даље, у менију одаберите „Додај застарели хардвер“

Наставите да притискате „нект“, док се чаробњак не убаци

Следећи упутства, кликните на „Инсталирајте хардвер који бисте требали одабрати са напредне листе“, то ће затражити икону радио дугмета у тај одабир. То је заправо дугме за контролу прозора које би сада изгледало попут мајушног круга који у себи има округло плаву подлогу.

Сада једноставно кликните на „Даље“

Ово ће вам приказати мени „Прикажи све уређаје“ на који ћете морати кликнути.

Након тога кликните на икону „Хаве Диск“.

Уз помоћ иконе „Прегледај“ идите на место мапе поцкетпрог-дривер. Ако сте одабир правилно урадили, визуелизовали бисте датотеку поцкетпрог.инф која се налази у тој одређеној фасцикли.

Двапут кликните на ову датотеку и сигурно бисте били сведоци да се управљачки програм инсталира на ваш рачунар.

Готово!! Наставимо са нашим следећим упутством на следећој страници.

До сада сте можда инсталирали потребан софтвер и изградили СПИ интерфејс.

Како пребацити програм у чип микроконтролера

Следећи корак ће захтевати неколико компонената, као што су плоча за плочу, ЛЕД и прорачунски отпорник за предвиђену примену.

У овом одељку ћемо научити методу тестирања програмера и потврдити инсталацију одговарајућих управљачких програма и софтвера.

Да бисмо проверили да ли су управљачки програми и софтвер исправно инсталирани, имплементираћемо једноставан програм познат као аврдуде.

АВРдуде је програм повезан са најновијом инсталацијом ВинАВР-а без којег стварни пренос датотеке у МЦУ не може бити могућ.

Овај програм је .хек формат датотеке који у основи постаје разумљив МЦУ-у за потребна извршења.

У случају да верификација не успе, програмер неће моћи да изврши пренос датотеке.

Хајде да брзо видимо како можемо да применимо поступак тестирања уз помоћ следећих упутстава:

Отворите упит ДОС (Диск оперативни систем) кликом на „мени Старт“ и укуцавањем цмд.еке у дато поље за претрагу.

Сада се извођење АВРдуде може обавити једноставним откуцавањем аврдуде -ц усбтини -п м32 преко ДОС упита. Чим се ово примени, ДОС ће одмах препознати да ли је веза успела.

У горњој наредби, „-ц“ је обавештајна застава која укључује спецификацију параметара програмера „усбтини“, док ознака „-п“ идентификује уређај микроконтролера („м32 који означава Атмега32).

У случају да сте користили другачији МЦУ, мораћете да укључите одговарајуће префиксе за имплементацију.

Када се горенаведена процедура заврши, можете уписати „излаз“ преко ДОС упита и то ће вас одвести ван прозора.

Ако се озбиљно питате у вези са стварним детаљима програмирања, добро би за то прво требало лемити и конструисати спољни аналогни ЛЕД круг преко кога би програм могао да се примени, јер уколико не постоји систем који потврђује одговор МЦУ-а, програмирање а покретање микроконтролера било би сасвим бесмислено.

Израда ЛЕД плоче је врло једноставна, све се своди на лемљење два кабла ЛЕД-а преко комада веро-плоче и повезивање отпорника са једним од каблова ЛЕД-а. Улога ове ЛЕД је само да ограничи струју на ЛЕД тако да не изгори због прекомерног напона и струје напона са МЦУ излаза.

Вредност отпорника може се израчунати помоћу следеће једноставне формуле:

Р = (Уб - ЛЕДфвд) / И

Тамо где је Уб напон напајања, ЛЕДфвд је оптимални радни напон ЛЕД-а који се користи, а И његова оптимална појачала.

Претпоставимо да користимо ЦРВЕНУ ЛЕД диоду која има предњи напон ЛЕД = 2,5В и струју И = 20мА, горња једначина се може решити на следећи начин:

Пошто би напон из МЦУ био 5В, он се може изразити као:

Р = (5 - 2,5) /. 02 = 125 ома, ¼ вати, најближа вредност је 120 ома.

Сада имамо ЛЕД, отпор од 120 ома и веробоард, једноставно повежите горе наведене компоненте како је дато на дијаграму са микроконтролером.

Једном када се то уради, МЦУ се може програмирати за предвиђени одговор на горе постављеној ЛЕД лампици.

Следи програмирање МЦУ-а.

Да би се микроконтролеру омогућило да изврши неке значајне примене, неопходно је уписати одговарајућа упутства у МЦУ.

Како инсталирати окружење за програмирање и истражити ВинАВР

За ово бисмо вероватно могли да користимо сопствени „уређивач текста“ на рачунару, мада би неко од нас ценио употребу професионалнијег „програмског окружења“ уместо уобичајеног уређивача текста, једноставно јер би вам овај приступ омогућио уживање у неким уграђене занимљиве карактеристике у оквиру овог пакета „програмског окружења“.

Подржао би стварање и уређивање програма на различитим језицима, а такође би их компајлирао у испоручни мод који лако разуме и прихвата микроконтролерски чип.

На крају би ово подржао ВинАВР и пребацио га у дотични МЦУ чип.

ВинАВР такође може бити опремљен за извршавање многих других операција, попут решавања проблема са програмима и упозоравања на могућу синтаксу и компајлирање грешака и грешака. О њима ћемо разговарати у нашим каснијим водичима.

Курс инсталације ВинАВР-а бисте учинили изузетно брзим и брзим. Заронимо у детаље са следећим тачкама:

Морате да преузмете најновије верзије из директоријума фалсификованих датотека ВинАВР. Наћи ћете корисне информације повезане са овим преузимањем са његове званичне веб странице.

Биће вам затражено да унесете сигурносни упит, тако да можете да одговорите да ли желите да се преузимање изврши, поставило се да је датотека коју треба преузети извршна датотека.

Преузмите датотеку и започните поступак извршења кликом на њу. Нека инсталација започне.

Процес ће вас упутити са неколико питања на која можете одговорити, тако да ћете моћи да поједноставите инсталацију према својој удобности. Многе од њих желите занемарити према њиховим подразумеваним обрасцима, а на вама би било да изаберете оне за које сматрате да су најпогоднији за радње.

До сада бисте сматрали да је све сасвим нормално и лако и пронашли бисте неколико опција у менију Старт који вам се баца. Без бриге, само неки од њих би у ствари користили само један од назива „програмерска бележница“.

Једном када кликнете на ову икону, покренуће кориснички интерфејс како бисте могли да примените писање програма (као што је стварање и уређивање). Такође бисте били сведоци програма који се састоји од команди менија који вам помажу да саставите кодове и уградите их у микроконтролер.

Основни посао горе наведеног бележника програмера је трансформација читљивог кода који бисте написали у низ упутстава разумљивих само МЦУ-у.

Следећи водич обухватиће тестирање горе наведеног програмера како бисмо били сигурни у вези са његовом компатибилношћу са Виндовсом и да ли се савршено „рукује“ са ИЦ-ом вашег микроконтролера.

Како програмирати МЦУ за укључивање ЛЕД диоде

Када се ово потврди, наставили бисмо са стварањем малог кода „не радите ништа“, само да бисмо осигурали да поступак преноса кода не наиђе на грешке.

Наравно да смо сада спремни да имплементирамо наш први програм унутар МЦУ-а, али пре тога било би занимљиво брзо резимирати оно што смо радили током наших претходних водича:

Ми смо набавили АВР Атмел микроконтролер према нашој захтеваној спецификацији, овде смо за илустрације користили АТМега32. Следеће смо сазнали о основама микроконтролера и програмској јединици која је одговорна за пренос програма у МЦУ чип.

Даље, направили смо конектор за интерфејс СП који је неопходан како би ваш рачунар могао да буде повезан са микроконтролером за програмирање.

Након тога смо потврдили да ли су управљачки програми исправно инсталирани у рачунар за 32-битни и 64-оперативни систем.

Затим смо инсталирали програмско окружење под називом Вин АВР за олакшавање једноставног писања преноса огласа кодова у микроконтролер, праћено имплементацијом аврдуде за верификацију програмера са вашим рачунаром и микроконтролером који су међусобно повезани.

Коначно, у претходном поглављу смо завршили са израдом кола ЛЕД / отпорника и повезали га са одговарајућим МЦУ излазима.

То је заиста пуно посла, ипак је време да се одмах упустите у неке стварне програмске ствари!

За почетак бисмо желели да микроконтролер поделимо у три категорије, што би нам много поједноставило разумевање:

Контрола, откривање и комуникација

Било би занимљиво знати да се горе наведене функције могу програмирати на много различитих начина.

У нашем првом програму покушали бисмо да наредимо микроконтролеру да „контролише“ спољни параметар, да, у праву сте, то би била ЛЕД диода коју смо недавно изградили.

Да будемо прецизни, рећи ћемо МЦУ да укључи повезану ЛЕД диоду, да, знам да ово изгледа прилично примитивно, али почетна фаза увек мора бити лака.

Кретање према садашњем послу, чинећи да МЦУ управља ЛЕД диодом, заправо је прилично једноставно:

Због тога наређујемо пину # 0 на ПОРТУ Б да произведе потребних 5 В за ЛЕД.

Подсетимо из претходног упутства, аноду ЛЕД-а повезали смо на горе поменути пин МЦУ-а.

Постоје две основне ствари које је потребно адресирати на овај пин МЦУ-а: 1) излаз и 2) 5 волти

Научићемо начин на који ћемо упутити одређени пин да постане излаз МЦУ-а.

Једном када се постави за излаз чипа, можемо му наложити да буде или „висок“ (5 В) или „низак“ (0 В) по жељи за апликацију.

Будући да било који логички круг, као што је МЦУ, пинови могу бити или излаз или улаз и могу бити конфигурисани да производе или логичку високу или логичку ниску вредност, пинове треба доделити само да буду логички високи или логички ниски , не постоје никаква средња или недефинисана стања осим ових неколико стања за микроконтролере или било коју дигиталну ИЦ-у по том питању. Такође се исто односи на сваки пин МЦУ-а.

Што се тиче доделе улазног и излазног пина, улази би били позиционирани да прихвате сигнале са спољних аналогних степени, док би излази били одговорни за њихово тумачење у наведена логичка стања или фреквенцију.

Иако би се горњи задаци могли изводити на много различитих метода, ми бисмо ради једноставности разговарали о једном од њих. Међутим, мора се напоменути да, иако онај који би се сада представио изгледа лако и занимљиво, није толико одржив и није препоручљив тип за све МЦУ апликације, из истог разлога из којег бисте се касније током курса упознали са популарнијим методама програмирања . Ови програми омогућавају додељивање само жељених пинова према спецификацијама, без утицаја на остале суседне које би могле бити већ додељене за обављање неких других функција.

Међутим, тренутно се нећемо толико мучити око осталих чиода и користили бисмо само релевантне чиоде од интереса, избегавајући у одређеној мери компликације.

Да бисмо доделили пин као излаз, морамо да користимо Дата Дирецтион Регистер (ДДР). Ако се питате шта овде значи регистар, то је једноставно простор у МЦУ-у који омогућава микроконтролеру да одговори на неки одређени начин.

Коришћењем ДДР-а можемо подесити пин да шаље податке који су попут „излаза“ или да прихватимо податке који су у облику „улаза“.

Како год да сте збуњени речју, шта то подразумева? Подаци додају трећу димензију пиновима којима се може доделити континуирано логичка нула (0В) или логичка висока (5В), али шта је са сигналима који могу брзо да варирају, попут фреквенције импулса. Фреквенција би била праћена високом и ниском логиком (5В и 0В) која осцилира са одређеним интервалима или периодима, па постаје временски оријентисана и може се прилагодити у односу на време, зато идентификујемо као „податак“ што значи параметар који указује функција у односу на другу функцију (логичка стања и време).

Један од начина додељивања пин0 као излаза је писањем следећег кода:

ДДРБ = 0б00000001

У горе наведеном програму, ДДРБ означава Регистар правца података за ПОРТ Б 0б, упућује компајлер у вези са следећим бинарним изразом броја, док „1“ на крају израза означава положај пин0, односно локацију у облику првог пина ЛУКЕ Б.

Ако се сећате сазнали смо да ПОРТ Б са њим повезује 8 пинова (од 0 до пин7), а ако приметите да горњи код садржи и 8 цифара, што значи да свака цифра означава ових 8 пинова ПОРТА Б.

Сада би следећи поступак био доделити 5В овом пину (пин0). Опет је принцип рада идентичан ДДР-у као што је горе изражено кроз следећи бинарни код:

ПОРТБ = 0б00000001

Као што се може видети, једина разлика између горњег кода и ранијег је та што смо у овом коду користили ПОРТ регистар. Овај регистар посебно рукује додељивањем пинова одређеног порта за који је постављен унутар МЦУ-а. Стога нам омогућава да додијелимо стварне логике података (0 или 1) за те пиноуте.

Сада ћемо можда бити заинтересовани да разговарамо о неким приближним детаљима нашег програма. Као што знамо да сви програми захтевају одређени простор за покретање извршења, ово се може упоредити са куваром који зна све састојке у вези са одређеним рецептом, али није упућен одакле да почне.

Овде је „главна“ функција локација на којој сваки од Ц / Ц ++ програма покреће извршавање. Стога се главни може створити као:

инт маин (воид)
{
}

Међутим, да би програм могао да интерпретира детаље ДДР и ПОРТ регистра и њихово функционисање унутар МЦУ чипа, потребно је укључити додатну изјаву која се може састојати од свих података у вези са АВР МЦУ. Можда бисмо желели да додамо ово укључивање у све наше програме.

#инцлуде
инт маин (воид)
{
}

Чим се компилација покрене, одељак пре-процесора компајлера фокусира се на АВР директоријум да би идентификовао датотеку „ио.х“. Екстензија „.х“ овде означава да је то датотека заглавља и да ће овај код унутар датотеке бити уведен на почетку (хеад) изворне датотеке која се креира, па отуда и назив „хеадер“.

Овде у свој код можемо увести ДДР и ПОРТ изјаве, јер би додавање датотеке заглавља ио.х упутило компајлера на њих.

#инцлуде

инт маин (воид)

{

ДДРБ = 0б00000001 // Подешавање регистра података смера података подешавање пин0 на излаз и преостале пинове као улаз

ПОРТБ = 0б00000001 // Подесите пин0 на 5 волти

}

Горе наведено поправља оријентацију пин0 као излаза, величине 5В. Међутим, још увек постоји један проблем који није утврђен за овај пин, односно тај пин још увек треба да буде укључен на неодређено време док је МЦУ укључен. Ова бесконачна повратна спрега би осигурала да се овај пин из МЦУ-а не ИСКЉУЧИ, већ наставља са 5В излазом на неодређено време.

Иако постоји много различитих метода примене инструкције петље за пин, овде бисмо покушали да употребимо петљу „вхиле“. Као што и само име говори, петља „вхиле“ говори микроконтролеру да је „док је напајање доступно потребно да останете активирани са додељених 5В за додељени пиноут.

#инцлуде

инт маин (воид)

{

ДДРБ = 0б00000001 // Подешавање регистра података смера података подешавање пин0 на излаз и преостале пинове као улаз

ПОРТБ = 0б00000001 // Подесите пин0 на 5 волти

док (1)

{

// Код би био овде ако би га требало изводити изнова и изнова и изнова ... бескрајно

}

}

Можда бисте желели да приметите да смо овде користили „1“ у облику аргумента за петљу „вхиле“, јер би се све осим „0“ могло сматрати логичним „истинитим“.

То имплицира, разматрање петље „вхиле“ никада не би било одговорно за било шта осим за логично „труе“, што значи да би се одређени пин на неодређено време закачио са наведеним стањем.

Може се посвједочити да ЛЕД диода стално свијетли преко додијељеног пина све док МЦУ добија снагу преко својих Вдд и Всс.

То је то, сада имамо резултат који смо желели да добијемо и коначно можемо да видимо како се то дешава након толико напорног рада, али ипак гледање слатког резултата нашег напорног рада је толико задовољавајуће.

У оквиру следећих водича научићемо како да додамо димензију „време“ горњој ЛЕД лампици, односно како да натера да трепће одређеном брзином.

Заправо, у горњој имплементацији, ЛЕД заправо трепће, али брзина петље је толико брза да је готово попут сталног УКЉУЧИВАЊА преко ЛЕД осветљења.

Видећемо како се ова петља може додати са закашњењем по жељи како би ЛЕД трепнуо при тој одложеној брзини.

Како направити ЛЕД трептај помоћу АВР микроконтролера

У последњој дискусији научили смо како да укључимо ЛЕД прекидач преко микроконтролера, било је изванредно зар не? Можда није толико!

Овде ћемо научити како да зачинимо горњу ЛЕД расвету приписујући двосмерну функционалност, односно покушаћемо да трепће или трепће на одређеној фреквенцији или брзини. Такође ћемо видети како ову стопу може да повећа или смањи по жељи корисника.

Погледајмо ово:

#инцлуде

#инцлуде

инт маин (воид)

{

ДДРБ | = 1<< PINB0

док (1)

{

ПОРТБ ^ = 1<< PINB0

_делаи_мс (100)

}

}

Ако се збуњујете оним чудним симболима (&, ^, | итд.) Који се користе у горенаведеном изразу (& није ту, али би се могао користити у другим сличним кодовима), ево повезаних информација које бисте желели да знате о њима :

Укључује многе стандардне логичке алгоритме попут АНД, ОР, НОТ и КСОР који се обично користе са горњим кодом.

Ове логичке функције посебно упоређују два бита '1' и '0' у складу са додељеним табелама истине.

Идеју ћемо добити анализом следећег аранжмана битова:

01001011 &
10001101
једнако
00001001

У горњем коду & односи се на АНД како се користи у програмирању Ц.

Вертикално читање редова сугерише да су 0 и 1 једнаке 0, 1 и 0 такође једнако 0, 0 и 0 једнако је 0, 1 и 1 једнако 1. Читање је једноставно као то. То су према табели истине оператора АНД.

Ако проценимо следећу табелу, она означава симбол „|“ означавајући употребу „ИЛИ“ функционалности, „|“ може се наћи с леве стране „бацкспаце“ на тастатури рачунара:

01001011 |
10001101
једнако
11001111

Овако табела истинитости функције ОР логике указује да су битови 0 или 1 једнаки 1, 1 или 0 такође једнаки 1, 0 или 0 једнако 0, док је 1 или 1 једнако 1.

Следећа комбинација битова је за КСОР логички оператор означен са ^ и може се проучавати баш као што смо то радили са табелама И, ИЛИ истине:

01001011 ^
10001101
једнако
11000110

Сада наставимо са првим програмом и научимо шта значи следећи ред у њему:

#инцлуде

Кроз наше претходне водиче знамо како израз функционише, па га нећемо понављати, међутим чини се да су они ново „укључивање“ изражено с #инцлуде које треба истражити.

У ово „укључи“ одлагање.х омогућава нам неколико једноставних метода примене.

Као што и само име говори, делаи.х омогућава нам да кашњемо у одређеном програму.

Следећи израз инт маин (воид) могао би се изоставити из текуће дискусије, јер смо ово већ покривали у нашим ранијим постовима.

Следи измењени ДДРБ.

Следеће приказује ранији облик који није бољи начин додељивања пинова јер су сви пинови од 0 до 7 пребачени да формирају улазе. Али само замислите каква би била ситуација када бисмо желели да створимо дужи програм који захтева те пинове за неку другу функционалност? На пример, пин2 може бити потребан за примену даљинског пребацивања уређаја. У том случају не бисмо били захвални за додељивање истог као уноса само путем покушаја и грешака. То може значити нетачан одговор даљинског предајника на пријемник уређаја.

ДДРБ = 0б00000001

Радије желимо да утичемо само на један бит, на пин0 бит, бацајући поглед на „ИЛИ“ функционалност која се може извршити бинарним маскирањем.

ДДРБ = ДДРБ | 0б00000001

Овде је застрта маском „ИЛИ“: 0б00000001, иако се чини да је аутентичан бинарни број, у случају да ранија ДДРБ, на пример: 0б01001010, онда применом ОР на ово путем маскирања може добити: 0б01001010 | 0б00000001 = 0б01001011.

Добијена разлика као што се могло видети само је код пин0 чији су се битови променили!

Компресија горње изјаве још даље преко Ц ++ даје:

ДДРБ | = 0б00000001

Међутим, откривамо да у датом програму има још више. Иако може изгледати сасвим легитимно и очигледно, требало би да искористимо неке од изјава из датотеке заглавља ио.х, посебно када је она у основи створена за нашу удобност?

Дакле, ако је „ДДРБ | = 1<< PINBO, why it’s like that?

1<< PINBO is implemented for applying the masking effect. The “1” indicates what may be introduced inside the mask, while the < < is simply the left shift functionality. It executes exactly as it’s named, and PINBO is the number of locations that the “1” would sequence across the left hand side. To be precise PINBO may be equivalent of a 0.

Дакле, почињемо са 0б00000000, и стављамо „1“ да произведемо 0б0000001, а затим га пребацујемо у леве 0 позиције, што даје тачно идентичан 0б00000001 као горе.

Ако се претпоставља да је ПИНБ4, изјава би могла да се изрази као 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Пазимо да користимо нулти индекс што значи да након „1“ постоје четири нуле.

Сада прелазећи на петљу „вхиле“ коју смо раније имали на уму преко „бесконачне петље“. Али можда сада желимо да микроконтролер примени нека од жељених извршења. Ово је могуће само унутар дате петље. То је петља у којој се одређени низ понавља изнова и изнова.

У случају да би извршење било постављено пре петље, имплементирало би се само једном.

Међутим, да би ЛЕД непрекидно трептао, било би потребно да се ПИНБ0 наизменично УКЉУЧУЈЕ / ИСКЉУЧУЈЕ у кругу. Овде такође налазимо кашњења која се уводе, без којих би трептање ЛЕД-а било немогуће. Али ово би приморало ЛЕД да трепће врло брзо, што је тешко препознати голим оком, мораће мало да успори како би постало препознатљиво са нашим очима.

Свесни смо поступка подешавања одређеног бита у бинарном броју, али нисмо сигурни у метод примене одређеног бита „0“ у случају да је то још „1“.

Могао је да се види следећи програм како то ради, али такође ћемо утврдити да можда није видљив у програму.

Почетне две изјаве мењају бит у „1“ (5 В, ЛЕД светла), а затим се уводи пауза од 100 мс.

Следећих неколико редова претвара ПИНБ0 бит у „0“ (нулти напон, ЛЕД искључен), али жао нам је што АНД упоређивање неће моћи да изврши „0“ из бита, али ако користимо НОТ „~“ за бинарну маску могао би пребацити све 0 на 1 и обрнуто.

То ће нам омогућити да утичемо само на ПИНБ0 бит и преокренемо га на „0“. Заграда је укључена како би садржала извршавање маскирања тако да се операција НОТ може примијенити на цијеле маске, а не само на „1“ прије помјерања улијево „<<”.

ПОРТБ | = 1<< PINB0
_делаи_мс (100)
ПОРТБ & = ~ (1<< PINB0)
_делаи_мс (100)

Да бисмо створили кашњења УКЉУЧЕНО ИСКЉУЧЕНО или периоде једнаког трајања, претходне четири линије можемо пресећи на два и применити КСОР функционалност у своју корист. Мора се напоменути да је КСОР извршење додијељено пину на 1 у случају да је 0 и обрнуто. Ово извршење утицало би само на ПИНБ0. Као што се можда примени наредба, она би једноставно претворила бит у супротност постојеће логике.

ПОРТБ ^ = 1<< PINB0
_делаи_мс (100)

ГОТОВО! Ваша ЛЕД лампица би сада трепнула према задатој брзини ... Једноставно, зар не?




Претходно: Даљинско управљање више уређаја Следеће: Фаза наизменичне струје, неутрална, круг индикатора земљоспоја