така, да продължим урока за АЦП конвертора със определяне на границните на измерваното напрежение, както и със резолюцията на измерване. настройките са достатъчно много за да имат програмистите избор при получаване на качествен краен резултат.

ще дам линк към статия която е ни бъде полезна.
http://www.circuitsgallery.com/2015/04/digital-voltmeter-using-pic-microcontroller.html

ето и още един линк директно от микрочип с който можете да се научите да конфигурурате АЦП модула с код конфигуратора на микрочип

http://microchipdeveloper.com/8bit:emr-adc

разгледайте графиките и математиките които са необходими за определяне на границите на измерването. по-късно ще дадем пълно обяснение за това как се прави от начало до края сметката и също и във софтуера ще напишем ред по ред с обяснения.

да започнем със графиката на ацп конвертора който е описан във пдф файла на процесора.



както е показано на графиката, битовете, регистрите и възможните варианти за вход на измерваното напрежение са доста. ще ги опиша по ред за да е ясно кой какво прави.

CHS<4:0> - както е видно с тези 5 бита от регистъра можете да изберете от кой пин на процесора /на който е обозначено че има ADC input да свържете някакъв вид подавано аналогово напрежение/сигнал до 5 ВОЛТА !!!!!/. има забележка която ви показва да прегледате ADCON0 регистъра за да видите за съответния брой пинове на процесора колко на брой са аналоговите канали.

комбинациите от тези 5 бита могат да ви настроят регистъра за измерване на входящо аналогово напрежени от датчик, аналогов сигнал от генератор и/или друга апаратура, както и следене на вътрешната температура на кристала на процесора, както и да използвате съществуващият ЦАП модул или това обратното на АЦП модула.

ЦАП модула или цифрово аналоговият преобразувател може да бъде използван за преобразуване на сигнали от процесора в напрежение, аналогови честотни генерации за звук и други аналогови сигнали. забележете че аналоговите входове са много, а ЦАП изхода е само един. има процесори в които ЦАП модулте са повече, но те са по-сложни и големи като функции, пинове и програмиране.

FVR буфера може да бъде използван за задаване на фиксирано стабилно напрежение със точно пределена стойност независимо от захранващото. това се използва при употреба на компараторите на процесора, може също да бъде използвано за АЦП, ЦАП и други задачи.

сега да дадем описание на битовете за конфигуриране на опорното/еталонно напрежение и каква роля играе то за измерването на нашето входящо напрежение/сигнал.

опорното напрежение ни е необходимо за задаване на границите на измерването. или казано направо, границите в които ние ще мерим са от нула/0/ волта до плюс пет волта /+5/. за това входящото напрежение на аналоговия пин на процесора НЕ ТРЯБВА ДА НАДВИШАВА ПЛЮС ПЕТ ВОЛТА !!!!! ако по някаква причина се налага да се мери напрежение и/или аналогов честотен сигнал с по голям волтаж от плюс пет волта, ще направите делител на напрежение със резистори със точност 1% или по-точни за да можете да намалите входящото напрежение към процесора до плюс пет волта !!!! във линка койо съм дал в началото има графика която показва как се прави делител и как се смята. ще дадем обяснение за делителите като дойде ред за това.

VREF+/- >> тези битове се изполват когато се налага да се мери биполярно напрежение от източник с възможност за подаване на такова опорното/еталонно напрежение. това обикновенно са операционни усилватели, биполярни захранвания, биполярни честотни генератори и други апаратури. описаният бит ADNREF със сответната двоична стойност ще превключи входа на АЦП блока съответно към двата възможни варианта. веднъж към VREF- или към VSS/ground/маса/електрическа 0 на схемата/.

както се вижда всеки от двата бита има и точно определени входящи пинове към които трябва да се свърже съответното опорното/еталонно напрежение.

VDD/VSS това са битовете които ни трябват на нас тъй като ние ще използваме за нашето измерване захранващото напрежение на процесора. VDD битът е захранващият плюс пет волта след стабилизатора и филтриращите кондензатори, а VSS битът е общата маса/нула на схемата. тука имаме три варианта в двойчна стойност. ADPREF битът отговаря за включването на АЦП блока към VDD/плюс на захранването +5 волта/ или към FVR буфера или към VREF+ пина на процесора за входящият плюс на биполярното захранване.

така, до тук стана ясно как да се конфогурира АЦП блока според желаната от нас схема при измерването на входящото напрежени. дали ще мерим едно полярно,дву полярно, дали ще мерим температурата на кристала на процесора или може да използваме ЦАП преобразуватела за да генерираме аналогови сигнали според нашият софтуер.

сега е време да кажем и най-важният бит който пуска самият АЦП блок да измери напрежението и/или честотата или какъвто и да е друг аналогов сигнал

GO бит - това е битът GO който се стартира в програмата като поредица от команди за да може АЦП блока да започне измерването и когато този бит се установи в нула/0/ нашето измерено напрежение ще се запише във регистър.

ADFM битът е този който казва по какъв начин да се запише резултата във регистърът за запис.

како се вижда регистрите за запис са два ADRESH и ADRESL. това са два регистъра по 8 бита което прави цял регистър от 16 бита. само че ние имаме по задание на процесора можем да използваме само 10 бита. така, тука идва на помощ ADFM битът. от пдф файла става ясно че, ако ADFM битът е равен на единица/1/ ще бъдат активни битовете на целия ADRESL регистър както и два бита от ADRESH регистъра което прави точно 10 бита. или тази настройка наричаме дясно подравнени битове в регистъра за резултат.

другата стойнот на ADFM битът е когато то е равен на нула/0/. при тази опция 10 бита който можем да използваме от регистъра за резултат на АЦП ще бъдат целият 8 битов /7:0 битове/ регистър ADRESH както и последните два бита 7:6 от регистъра ADRESL. обърнете внимание че съм дал стойностите на битовете във двойчен формат както е записано в пдф файла на процесора.

ако разгледате внимателно пдф файла с описанието на двата варианта на регистъра може да се запитате защо в таблицата на регисъра ADRESH са записани от 7:0 битовете, а на горния ред пише ADRES<9:2> и съответно за регистъра ADRESL пак във третият ред има номер 7:0, а на горния ред са дадени последните два бита като ADRESL<1:0> а предходните младши битове са забранени.

това е защото това на кой край да са подравнени битовете се определя от ADFM битът. когато е равен на единица/1/ битовете в двата регистъра са дясно подравнени и най старшите битове от регистъра ADRESH са неактивни. и в другият вариант когато ADFM битът е равен на нула/0/ или това са ляво подравнени битове на двата регистъра неактивни са младшите битове на ADRESL. разпечатайте тези четири страници изрежете регистрите с ножица и ги наложете един до друг според варианта на бита ADFM. ще видите какъв е резултата от подредбата и кои битиве кога са активни и неактивни.

ето и един цитат от пдф файла директно
if (ADFM = 0) // left side
{
ADRESH<9:2>: ADC Result Register bits
Upper 8 bits of 10-bit conversion result
ADRESL<1:0>: ADC Result Register bits
Lower 2 bits of 10-bit conversion result
} // page 147 from pdf file for pic16f1827/47

if (ADFM = 1) // right side
{
ADRESH<9:8>: ADC Result Register bits
Upper 2 bits of 10-bit conversion result
ADRESL<7:0>: ADC Result Register bits
Lower 8 bits of 10-bit conversion result
} // page 148 from pdf file for pic16f1827/47


ето една нагледна графика която показва точко какво представлява ляво и дясно подравнен резултат спрямо бита ADFM

 

когато започнен обяснението на софтуера ще се разбере каква математика се използва за постигане на крайният резултат според заданието на схемата и дачиците в нея