цветни системи - CMYK - RGB

разлика във видовете цветни системи
CMYK >> линк wiki <<<

RGB >>> линк wiki <<<

АЦП - аналогов към цифров преобразувател - урок 2

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

ще дам линк към статия която е ни бъде полезна.
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

АЦП - аналогов към цифров преобразувател - урок 1

аналогов към цифров преобразувател / конвертор / - ADC analog to digital convertor

пик процесорите, както и всички други предлагат възможност за цифровизиране на всякакви аналогови сигнали със определена точност на преобразуване. в различните фамилии процесори точността може да варира между 8, 10, 12 и 14 бита. има и процесори в които точността на измерване на аналоговит сигнали може да достигне и 32 бита.

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

в нашият случай ще разгледаме процесора 16F1827/47 със който сме започнали уроците за програмиране.

първо да кажем и да покажем какво представлява цифровизирането на аналоговите сигнали

http://www.microcontrollerboard.com/analog-to-digital-converter.html

една статия която ще ни помогне да напишем нашият урок

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

в схемата на процесора 1827 ясно се вижда че първият аналогов порт който можем да използваме се намира на RA0 в порт А - пин номер 17. според таблицата с разположениео на пиновете във пдф файла, този пин има и други функции. ние ще изберем да ползваме само аналоговият вход като това ще бъде указано във TRISA /входове или изходи/ регистъра и във ANSELA /аналогови или цифрови/ регистъра. след това във кода който ше дадем като пример ще добавим коментари за по-голяма яснота кой регистър какво прави към пиновете на процесора. този процесор има възможност да укаже само на един порт от всички аналогови да бъде използван за адц конверсия. имайте предвид че във някои процесори когато инициализирата адц блока имате таблица по която можете да укажете кои да бъдат цифрови и коои аналогови входове или изходи. в някои процесори стартирането на адц блока стартира всички аналогови портове. внимателно прочетете пдф файла на съответния процесор за да настроите необходимите ви пинове за работа според вашата схема.

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

какво представлява цифровизирането на сигнал от аналогов вход ?

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



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

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

Готфрид Лайбниц - Двоична бройна система - история

Двоична бройна система от Уикипедия, свободната енциклопедия >> ЛИНКА Е ТУКА <<<
ето и линк към страницата в уикипедия за този велик учен, измислил тази супе система за превръщане на числата от десетична в двоична бройна система >>> Готфрид Лайбниц
Двоичната бройна система (също и бинарна система) е позиционна бройна система с основа 2, при която числата се изобразяват само с помощта на две цифри: 0 и 1.

така, прочетете внимателно статията за двоичната система, като обърнете внимание на частта за Готфрид Лайбниц <<< . в тази част е дадена една таблица която е била измислена от този немски математик, учен и т.н. още през 1679 година.

изключително полезна ТАБЛИЦА за употреба при превръщане на числа от десетична към двоична /бинарна/ система. има даже и няколко примера с числа.

Изчисленията му се показват със следната таблица. Удебелените десетични числа горе представляват стойността на кореспондиращата единица, като се попълват нарастващо от дясно наляво; а в ляво е сборът от произведението на тези стойности. В таблицата се получава готовия бинарен код:

 

 

Десетична система

Продукт по десетичната система 512 256 128 64 32 16 8 4 2 1
6         0 0 0 1 1 0
48         1 1 0 0 0 0
27           1 1 0 1 1
4             0 1 0 0
805 1 1 0 0 1 0 0 1 0 1

както се вижда което и число да изберете от множеството можете с тази система да го превърнете във двоично, като правилно пресмятате сумата от всеки бит в десетичната скала. които числа участват във сумата за постигане на резултата получават статус 1, ако които не статус 0. тази система е доста по добра от стандартната на която учат във всички училища в електрониката и програмирането. по точна, по лесна и по прегледна както и в употреба на доста големи резултати от представените в примера. удобна може да бъде използвана и в програмирането на процесорите където всеки 8 битов или 16 битов порт може да бъде дефиниран като сумата от десетичните числа на всеки бит е  равна на най-голямото десетично число за този порт. пример ако имате 8 битов порт А на процесора 16F1827/47 и дефинирате неговите битове със числата от 1 до 128 както в таблицата, ще можете в масив от данни да сумирате две числа и да изпратите резултата директно към порта на процесора.

това ще доведе до светване на порта във същата комбинация в единици 1 и нули 0 в която е двоичният резултат на даденото число. в горната таблица можете да си направите няколко примера с числа, като първо сумирате числата от 1 до 512 за да видите до колко големи числа можете да превръщате с тази таблица.

следващият въпрос е >> кое е следващото число което следва след 512 в редицата и съответно каква ще бъде сумата на числата за да знаем границата до която можем да превръщаме числа в бинарна стойност.

директен програмен код за употреба във пик процесорите използвайки тази система ще дадем когато дойде ред за урока за управление на масиви от данни. тъй като това е малко по трудна част от програмирането, ще се изисква внимание и прочитане на няколко предварителни статии и уроци от други автори. директен С/С++ код също ще има както за процесорите, така и за уиндоус ще дадем пример в компилатора на пелес С/С++. чети внимателно, печелиш обезателно. ако има нещо неясно емайла е ясен ;)

нов проект - компилиране в MPLAB

нов проект - компилиране в MPLAB

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

 
 

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

 



графика от симулацията на процесора и новият софтуер във протеус

 
 

линк за сваляне на рар файла със целия проект >>>> www.karadev.net/basto/new_project_1827.X.rar

https://www.programiram.com/home

   

уроци, задачи, информация и много други :)
линк >> натисни тук <<<

   

1001 задачи в програмирането
линк >>
натисни тук <<<

   
НАУЧИ МЕ много добър сайт
линк >>
натисни тук <<<
   

Много добра книга с примери за програмирането на езика С от автора Стенли Липман.

Може да си я разпечатате като учебник.

Има примери към всяка функция, цикъл и задача.
линк към фйла >>>
www.karadev.net/uroci/pdf_basic/CPP-Primer-BG.pdf