Ово је наш 9. водич за учење ПИЦ микроконтролера помоћу МПЛАБ и КСЦ8. До сада смо обрађивали многе основне водиче, попут почетка рада са МПЛАБКС-ом, трептања ЛЕД-а са ПИЦ-ом, тајмера у ПИЦ-у, повезивања ЛЦД-а, повезивања 7-сегмента итд. Ако сте апсолутни почетник, онда посетите комплетну листу водича за ПИЦ овде и започните учење.
У овом упутству научићемо како се користи АДЦ са нашим ПИЦ микроконтролером ПИЦФ877А. Већина пројеката микроконтролера укључиће АДЦ (аналогни у дигитални претварач), јер је то један од најчешће коришћених начина за читање података из стварног света. Готово сви сензори попут сензора температуре, сензора флукса, сензора притиска, струјних сензора, напонских сензора, жироскопа, акцелерометара, сензора растојања и готово сваки познати сензор или претварач производе аналогни напон од 0В до 5В на основу очитавања сензора. На пример, температурни сензор може издати 2,1 В када је температура 25 ° Ц и попети се на 4,7 када је температура 60 ° Ц. Да би знао температуру стварног света, МЦУ мора само очитати излазни напон овог температурног сензора и повезати га са реалном температуром. Стога је АДЦ важан радни алат за МЦУ пројекте и омогућава нам да научимо како га можемо користити на нашем ПИЦ16Ф877А.
Такође погледајте наше претходне чланке о коришћењу АДЦ-а у другим микроконтролерима:
- Како се користи АДЦ у Ардуино Уно?
- Водич за АДЦ за Распберри Пи
- Повезивање АДЦ0808 са 8051 микроконтролером
АДЦ у ПИЦ микроконтролеру ПИЦ16Ф877А:
Доступно је много врста АДЦ-а и сваки има своју брзину и резолуцију. Најчешћи типови АДЦ-а су блиц, узастопна апроксимација и сигма-делта. Тип АДЦ користи у ПИЦ16Ф877А се зове као Наредни приближавања АДЦ или САР укратко. Дакле, научимо мало о САР АДЦ пре него што почнемо да га користимо.
Сукцесивно приближавање АДЦ: САР АДЦ ради уз помоћ упоређивача и неких логичких разговора. Овај тип АДЦ користи референтни напон (који је променљив) и упоређује улазни напон са референтним напоном помоћу упоређивача, а разлика, која ће бити дигитални излаз, чува се из најзначајнијег бита (МСБ). Брзина поређења зависи од фреквенције такта (Фосц) на којој ПИЦ ради.
Сад кад знамо неке основе о АДЦ-у, отворимо наш технички лист и научимо како да користимо АДЦ на нашем ПИЦ16Ф877А МЦУ. ПИЦ који користимо има 10-битни 8-канални АДЦ. То значи да ће излазна вредност нашег АДЦ бити 0-1024 (2 ^ 10) и на нашем МЦУ има 8 пинова (канала) који могу читати аналогни напон. Вредност 1024 добија се са 2 ^ 10 пошто је наш АДЦ 10 бит. Осам пинова који могу читати аналогни напон споменути су у техничком листу. Погледајмо слику испод.
Аналогни канали АН0 до АН7 су истакнути за вас. Само ови пинови ће моћи да читају аналогни напон. Дакле, пре читања улазног напона морамо у нашем коду навести који канал треба користити за очитавање улазног напона. У овом упутству користићемо канал 4 са потенциометром за очитавање аналогног напона на овом каналу.
А / Д модул има четири регистра која морају бити конфигурисана за читање података са улазних пинова. Ти регистри су:
• А / Д резултат високог регистра (АДРЕСХ)
• А / Д резултат ниског регистра (АДРЕСЛ)
• А / Д контролни регистар 0 (АДЦОН0)
• А / Д контролни регистар 1 (АДЦОН1)
Програмирање за АДЦ:
Програм за коришћење АДЦ са ПИЦ микроконтролером је веома једноставна, само треба да разумеју ове четири регистре, а затим читање било аналогни напон ће бити једноставно. Као и обично, иницијализујте конфигурационе битове и кренимо са воид маин ().
Унутар воид маин () морамо да иницијализујемо наш АДЦ користећи АДЦОН1 регистар и АДЦОН0 регистар. Регистар АДЦОН0 има следеће битове:
У овом регистру морамо укључити АДЦ модул тако што ћемо направити АДОН = 1 и укључити А / Д сат конверзије помоћу битова АДЦС1 и АДЦС0 битова, остало за сада неће бити постављено. У нашем програму је А / Д сат конверзије изабран као Фосц / 16, можете испробати своје фреквенције и видети како се резултат мења. Потпуни детаљи доступни су на листи података на страници 127. Стога ће АДЦОН0 бити иницијализован на следећи начин.
АДЦОН0 = 0б01000001;
Сада регистар АДЦОН1 има следеће битове:
У овом регистру морамо направити А / Д формат резултата Изаберите бит бит хигх би АДФМ = 1 и направити АДЦС2 = 1 да поново изаберемо Фосц / 16. Остали битови остају нула јер смо планирали да користимо интерни референтни напон. Комплетни детаљи доступни су на техничком листу странице 128. Стога ћемо АДЦОН1 поставити на следећи начин.
АДЦОН1 = 0к11000000;
Сада након иницијализације АДЦ модула унутар наше главне функције, омогућавамо улазак у вхиле петљу и започињање читања АДЦ вредности. Да би се очитала вредност АДЦ, морају се следити следећи кораци.
- Иницијализујте АДЦ модул
- Изаберите аналогни канал
- Покрените АДЦ тако што ћете Го / Доне учинити мало високим
- Сачекајте да се бит Го / ГОТОВО смањи
- Добијте АДЦ резултат из АДРЕСХ и АДРЕСЛ регистра
1. Иницијализујте АДЦ модул: Већ смо научили како да иницијализујемо АДЦ, па само позивамо ову функцију испод како бисмо иницијализовали АДЦ
Функција воид АДЦ_Инитиализе () је следећа.
воид АДЦ_Инитиализе () {АДЦОН0 = 0б01000001; // АДЦ ОН и изабран је Фосц / 16 АДЦОН1 = 0б11000000; // одабран је интерни референтни напон}
2. Изаберите аналогни канал: Сада морамо да одаберемо који ћемо канал користити за читање АДЦ вредности. Хајде да направимо функцију за ово, тако да ће нам бити лако да се пребацујемо између сваког канала унутар вхиле петље.
унсигнед инт АДЦ_Реад (унсигнед цхар цханнел) {// **** Одабир канала ** /// АДЦОН0 & = 0к11000101; // Брисање битова за избор канала АДЦОН0 - = цханнел << 3; // Постављање потребних битова // ** Избор канала завршен *** ///}
Тада се канал који треба изабрати прима унутар променљивог канала. У реду
АДЦОН0 & = 0к1100101;
Претходни избор канала (ако постоји) се брише. То се постиже коришћењем битног и оператора „&“. Битови 3, 4 и 5 су присиљени да буду 0, док су остали остављени у претходним вредностима.
Тада се жељени канал бира померањем броја канала улево три пута и подешавањем битова помоћу битног или оператора „-“.
АДЦОН0 - = канал << 3; // Постављање потребних битова
3. Покрените АДЦ тако што ћете поставити Го / Доне бит бит: Када је канал изабран, морамо започети АДЦ конверзију једноставно постављањем ГО_нДОНЕ бит високо
ГО_нДОНЕ = 1; // Иницијализује А / Д конверзију
4. Сачекајте да бит Го / ДОНЕ постане низак: ГО / ДОНЕ бит ће остати висок док се АДЦ конверзија не заврши, стога морамо сачекати да овај бит поново падне. То се може учинити помоћу вхиле петље.
док (ГО_нДОНЕ); // Сачекајте да се заврши А / Д конверзија
5. Добијте АДЦ резултат из АДРЕСХ и АДРЕСЛ регистра: Када бит Го / ДОНЕ поново постане низак, то значи да је АДЦ конверзија завршена. Резултат АДЦ-а биће 10-битна вредност. Будући да је наш МЦУ 8-битни МЦУ, резултат је подељен на горњи 8-битни и доњи 2-битни. Горњи 8-битни резултат се чува у регистру АДРЕСХ, а доњи 2-битни у регистру АДРЕСЛ. Стога их морамо додати у регистре да бисмо добили нашу 10-битну АДЦ вредност. Овај резултат враћа функција као што је приказано доле:
ретурн ((АДРЕСХ << 8) + АДРЕСЛ); // Враћа резултат
Комплетна функција која се користи за одабир АДЦ канала, покретање АДЦ-а и враћање резултата приказана је овде.
унсигнед инт АДЦ_Реад (непотписани цхар канал) {АДЦОН0 & = 0к11000101; // Брисање битова за избор канала АДЦОН0 - = цханнел << 3; // Постављање потребних битова __делаи_мс (2); // Време стицања за пуњење кондензатора задржавања ГО_нДОНЕ = 1; // Иницијализује А / Д конверзију вхиле (ГО_нДОНЕ); // Сачекајте да се А / Д конверзија доврши ((АДРЕСХ << 8) + АДРЕСЛ); // враћа резултат}
Сада имамо функцију која ће узети избор канала као улаз и вратити нам вредност АДЦ. Стога можемо директно да позовете ову функцију унутар нашег вхиле петље, с обзиром да се чита аналогни напон од канала 4 у овом упутству, функција позив ће бити као што следи.
и = (АДЦ_Реад (4)); // чувамо резултат адц у „и“.
Да бисмо визуализовали излаз нашег АДЦ-а, требат ће нам нека врста модула за приказ попут ЛЦД-а или 7-сегментног. У овом упутству користимо 7-сегментни екран да бисмо верификовали излаз. Ако желите да знате како да користите 7-сегмент са сликом, следите упутства овде.
Комплетан код је дат испод, а процес је такође објашњено у видео на крају.
Постављање и тестирање хардвера:
Као и обично, симулирајте код помоћу Протеуса пре него што се стварно повежете са нашим хардвером, шеме пројекта су приказане испод:
Прикључци четвороцифреног седмосегментног модула за приказ са ПИЦ микроконтролером исти су као и у претходном пројекту, управо смо додали потенциометар на пин 7 који је аналогни канал 4. Промењивањем лонца, променљиви напон ће се послати на МЦУ који ће читати АДЦ модул и приказивати на 7-сегментном модулу приказа. Погледајте претходни водич да бисте сазнали више о четвороцифреном 7-сегментном дисплеју и његовом повезивању са ПИЦ МЦУ.
Овде смо користили исту плочу ПИЦ микроконтролера коју смо креирали у водичу за трептање ЛЕД диода. Након осигурања везе отпремите програм у ПИЦ и требали бисте видети овакав излаз
Овде смо прочитали вредност АДЦ из лонца и претворили је у стварни напон мапирањем излаза 0-1024 као 0-5 волти (као што је приказано у програму). Вредност се затим приказује на 7-сегменту и верификује помоћу мултиметра.
То је то, сада смо спремни да користимо све аналогне сензоре доступне на тржишту, само пробајте и ако имате било каквих проблема као и обично, користите одељак за коментаре, радо ћемо вам помоћи.