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

1.       Когато таймера се препълни се вдига флага за прекъсване на таймера, процесора обработва командите които са във функцията на прекъсването и след това се връща към изпълнение на функциите в главната функция void main(void) във файла main.c

2.       ВНИМАНИЕ !!!!! КОЛКОТО ПО-ЧЕСТО ПРЕПЪЛВАТЕ ТАЙМЕРА, ТОЛКОВА ПО-ЧЕСТО ЩЕ СЕ ГЕНЕРИРА ПРЕКЪСВАНЕ В ПРОЦЕСОРА И МОЖЕ ДА НЕ ОСТАНЕ ВРЕМЕ ЗА ИЗПЪЛНЕНИЕ НА ОСНОВНИТЕ ФУНКЦИИ ВЪВ ГЛАВНАТА ФУНКЦИЯ !!!! АКО СТАРТИРАТЕ ПОВЕЧЕ ОТ ЕДИН ТАЙМЕР КОИТО И ДА СА ТЕ ВНИМАВАЙТЕ ЗА ВРЕМЕТО ЗА КОЕТО ГИ ПРЕПЪЛВАТЕ СЪОТВЕТНО В ПРОЦЕСОРА СЕ ГЕНЕРИРА ПРЕКЪСВАНЕ !!!

3.       Ще разгледаме това във показания код по-надолу във урока
На тази графика има няколко съществени разлики в настройката на таймер 2, таймер 4 и/или таймер 6. Таймерите в процесора с тази конфигурация като три отделни хардуерни блока са три броя с имена таймер 2, таймер 4 и таймер 6. В описанието на процесора микрочип са дали възможност да използваме няколко различни по хардуерна настройка таймера с цел по-голяма гъвкавост в различните приложения в електрониката.



 

Описание на параметрите на таймера :
1.       FOSC/4 е тактовата честота подавана на входа на таймера разделена предварително на 4.

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

3.       TMRx e регистъра на таймера 2,4,6 който се увеличава с 1 на всеки постъпил импулс след входящия делител според коефициента на делене.

4.       PRx е регистъра в който давате стойност до колко да брои таймера. В таймер 0 този регистър го няма. Таймер 0 винаги брой до 255 от колкото му зададете предварително. Таймерите 2,4,6 имат възможност да зададете и стойност на регистъра от колко да започне, както и стойност до колко да брои със тактова честота постъпваща от делителя преди таймера и подавани след делителя на таймера ако искате да го използвате и него.

5.       COMPARATOR e регистърът който ще отчете дали има равенство между двата регистъра, което съответно ще означава, че таймера се е препълнил и ще се подаде импулс на ИЗХОДЯЩИЯ ДЕЛИТЕЛ – POSTSCALER

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

7.       TMRxIF е флага съответно 2, 4, 6 за всеки от трите таймера, който ще се установи в 1, когато таймера се препълни и се генерира прекъсване.

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

Така, да направим разбор на показните две диаграми за двата таймера които ще разгледаме. Първата е за таймер с номер 0, който често употребяваме за най-различни задачи. Кое какво означава :
1.       FOSC/4 е входящата тактова честота от тактовия генератор на процесора. Тактовият генератор може да бъде, както външен кварц или кварцов резонатор, така и вътрешният генератор на процесора. FOSC/4 означава frequency oscilator divide by 4 или преведено означава, че взимаме тактова честота от генератор разделена на 4. Или това е 1 импулс към таймера на всеки 4 подадени от тактовия генератор. Честотните делители ще разгледаме в друг урок с процесорите, но за честотните делители в TTL електрониката има урок написан на блога, както и в нета има доста.

2.       TMR0CS е таймер 0 чип селект e бит от регистър, който има две състояния 0 или 1 за да изберем от къде да постъпи тактов сигнал към таймера. Ако бита има стойност 0 ще използваме тактова честота постъпила от генератора на процесора. Ако стойността е 1 може да подаваме тактова честота към таймера от външен хардуерен генератор например с чип таймера 555 на определен пин на процесора като вход за импулси.

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

4.       Следва синхронизиращият блок в който ние нямаме възможност за контрол. Той е хардуерен модул вътре в кристала на процесора и софтуера не може да контролира този модул. Има процесори на които може да се задават разни опции за този модул, но за 16F1829 тази опция не е валидна.

5.       8 bit PRESCALER – този модул е честотен делител с възможност за задаване на коефициента на деление. В пдф файла в регистъра за настройка на таймера има стойностите с които може да се настрои делителя, в зависимост кои битове са 0 и кои 1 от тази част на регистъра.

6.       TMR0 е регистъра на таймер 0, към който сочи цялата електроника в процесора. Ако четете внимателно пдф описанието ще видите че постъпилата честота с определени параметри ще увеличава съдържанието на таймер с +1 докато таймера стигне стойност 255. Този таймер както казахме е 8 битов и максимума на достигане на стойността в регистъра  НЕ МОЖЕ ДА БЪДЕ ПО-ГОЛЯМА ОТ 255 !!! регистърът може предварително да бъде зареден със стойност ОТ КОЯТО увеличаващо да брои таймера нагоре до 255 или това е препълване и прекъсване.

7.       Най-важната част от таймера е неговият флаг за препълване – TMRIF0 . този е флага за таймер 0 който показва кога таймера се е препълнил. Щом флага е вдигнат или това означава че е равен на 1, значи имаме препълване на таймера и ще се изпълнят командите записани във функцията за прекъсване на този таймер. Флагът трябва да се нулира софтуерно, като веднага след това се изпълняват командите във функцията за прекъсването.

8.       Overflow to timer 1 означава че този изход е свързан към таймер 1 като може да се използва ако сте пуснали и използвате и таймер 1.

употреба на таймерите в пик процесорите – тест с процесор 16F1829

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

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

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

В описанието на процесора таймерните блокове са няколко на брой като се различават по номер и брой битове на таймерите. Имаме няколко 8 битови таймера и няколко 16 битови таймера
8 битовите таймери са с възможност на броене до 255, както знаете максимум на стойността, която може да запишете във 8 битова клетка е 255 числова стойност, но възможните комбинации са 256 защото 0 също е вариант за запис на 8 битовият регистър/клетка.
16 битовите таймери са двубайтови като максимум стойноста може да бъде до 65535 числова стойност, като прибавим и вариант 0 стават 65536 варианта.

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

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

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

Можете също с таймер и със аналоговия изход на процесора да направите честотен генератор не само на правоъгълни ами и на всякакви импулси, като определяте честотата, периода, амплитудата на сигнала, също и коефициента на запълване на импулса /duty cycle/, когато ползвате ШИМ модулация или така наречения PWM сигнал за управление на мощността на различни товари.
Схема  на таймерите които ще разгледаме във този урок. И двата таймера са с почти еднакво софтуерно управление, което ще разгледаме след като обясним показаните графики.

много добър сайт за уроци за ПИК ПРОЦЕСОРИТЕ >>> https://deepbluembedded.com/

волтов делител за +5V>>3,3V = една бърза схема за волтов делител със симулация в протеус за да се види по-ясно как се прави комуникация със пик процесор през конвертор от сериен порт към усб за компютър.

при процесорите със захранване +5 волта изходите също са на +5 волта. ако включите конвертора директно, веднага ще изгорите входния му пин RX, който очаква напрежение НЕ ПО-ВИСОКО ОТ +3,3V волта. на някой конвертори предлагани на пазара има обозначение на гърба на платката че RX пина е на +3,3 волта.

!!!!! ОБЪРНЕТЕ ВНИМАНИЕ НА МОДЕЛА НА КОНВЕРТОРА КОЙТО ПОЛЗВАТЕ И ПОТЪРСЕТЕ ИНФО В НЕТА ЗА НАЧИНА НА УПОТРЕБА !!!!!! в описанието трябва да пише какъв волтаж са RX входа приемащия и TX изхода предаващия !!!!

ако трябва пуснете си някакъв сериен терминал и пращайте данни докато измервате напрежението и на двата пина TX/RX докато установите какъв е волтажа който ви трбява към и от процесора с който ще комуникарате !!!!

!!!! ГРЕШКИТЕ ИЗГАРЯТ ПИНОВЕТЕ НА ПРОЦЕСОРА И / ИЛИ КОНВЕРТОРА ВЕДНАГА !!!!!

в последната графика съм показал снимка от нета където е свързан по стандартен начин HC-05 блутут модул към стандартна ардуино платка. както виждате волтов делител има само за предаващата част ОТ ПРОЦЕСОРА КЪМ БЛУТУТ МОДУЛА, като приемащата е свързана директно. захранването е стандартно +5 волта и за двете схеми. модели на конвертори можете на намерите в нета всякакви.

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


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

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