| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Обработка на прекъсване от Timer0 -PIC18 http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=11113 |
Страница 1 от 2 |
| Автор: | polinom [ Нед Фев 17, 2013 10:51 pm ] | |||||||||
| Заглавие: | Обработка на прекъсване от Timer0 -PIC18 | |||||||||
Искам да обработвам препълването на Timer0 на един PIC18f4620. И горе долу искам да мига един диод през секунда. за целта дефинирам таймера да 16 ботов и такт от вътрешен генератор 32khz. Ама не става нищо както си го мисля.
Това ми е кода компилатора е С18. Ако може някой да ми разясни как се организират прекъсванията за тоя компилатор. Знам че има два вектора на прекъсване, приоритет на прекъсванията, може да се забраняват и разрешават ама някъде ми се губят нещата. |
||||||||||
| Автор: | Stoimen [ Нед Фев 17, 2013 11:34 pm ] | ||
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 | ||
Погледни това http://www.enmcu.com/guides/usingtimerandinterruptinc18
|
|||
| Автор: | sparkybg [ Пон Фев 18, 2013 12:16 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Виж си внимателно последния ред на сорса. Как искаш да мига като му казваш да не мига. Изпуснал си едно !. |
|
| Автор: | polinom [ Пон Фев 18, 2013 1:46 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Това съм го изпуснал след суматите преправения съм го махнал.Направих там нещо и то тръгна но изкочиха други въпроси. Таймера не се препълва инкрементира се само младшата част а съм го направил в 16 битов режим. |
|
| Автор: | Cekins [ Пон Фев 18, 2013 10:21 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Мда... с това конфугуриране на Т0, прекъсване ще имаш веднъж на 9 минути. Ти колко време го чакаш да се препълни ? Като четеш даташитовете, гледай какъв е дифолт стейта на регистрите - на Т0 прескалера е сетнат по подразбиране на 1:256, и 16 битов таймер ти брои до 65535, и това при честота 31kHz. Айде сега сметни и ти да видиш колко време ще му е нужно да се препълни. |
|
| Автор: | polinom [ Пон Фев 18, 2013 6:23 pm ] | |||||||||
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 | |||||||||
Прав си, че не съм го видял.
|
||||||||||
| Автор: | Cekins [ Пон Фев 18, 2013 7:05 pm ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Ами пак не си разбрал - тоя буфер е с цел да може да изпълни едноцикловото писане/четене в двата байта. Не знам защо за таймер0 е описано сякаш по-криво отколкото за Т1/3/5 - там е подобно, само дето може да избираш дали да е буферирано или не. Дефакто не можеш да четеш/пишеш "истинския" брояч, но четейки TMR0, буфера TMR0H автоматично се зарежда и с действителния HighByte на таймера. Целта е ако в момента на четене на младшия байт има препълване/пренос на/към старшия, това да не ти повлияе на четенето. Примерно ако е трябвало да прочетеш 65535 (hFFFF), ще прочетеш първо единия - 255 и имаш препълване и другия ще го прочетеш 0. |
|
| Автор: | polinom [ Пон Фев 18, 2013 8:22 pm ] | |||||||||
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 | |||||||||
Добре това го схванах тогава защо в режим на симулация в MPLAB старшият байт TMR0H не се вижда ,той се инкрементира- не влиза в прекъсването след превъртане на младшата част,ама аз не го виждам, седи си само 0х00, младшият се вижда как се увеличава при изпълнение стъпка по стъпка. |
||||||||||
| Автор: | Cekins [ Вто Фев 19, 2013 10:01 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
За да го видиш ти трябва примерно : movf TMR0,w Този регистър се ъпдейтва само при четене на TMR0. Може и да не съм го обяснил много точно но го има написано в предния ми пост. При запис съответно първо се зарежда TMR0H със желаната стойност и после се прави запис в TMR0. В момента на записа на младшия байт се прехвърля и буфера в действителния брояч. Става в рамките на 1 цикъл записа на двата регистъра. Това е пак с цел да няма изненади ако записа става в момент на инкрементиране - обясних го по горе ефекта какъв е. |
|
| Автор: | polinom [ Вто Фев 19, 2013 3:58 pm ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Разбирам какво се има предвид: понеже са физически два регистъра е направено така че да се ъпдейтват едновременно, все едно са един 16 битов. Въпросът ми е как да го видя в режим на дебъг или кое да гледам за да виждам него ? |
|
| Автор: | Cekins [ Вто Фев 19, 2013 5:22 pm ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Нали това ти обяснявам че няма как да го видиш, докато не прочетеш младшия байт. Физическия брояч НЕ Е МАПНАТ като регистър и НЕ можеш да го видиш... Всъщност пиковете имат и други подобни регистри до които нямаш пряк достъп : например такива са двата буфер байта на УАРТ-ите. Разни шифт регистри на серийните модули. И подобни... |
|
| Автор: | polinom [ Вто Фев 19, 2013 11:57 pm ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Аз си мислих че дебъг режима е по-гъвкав, заобикалят се някои особености, в същност за да го виждам в watch-a трябва периодично да прочитам младшият байт. Благодаря за инфото. |
|
| Автор: | Cekins [ Сря Фев 20, 2013 9:37 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Не виждам пряк смисъл от "виждането" на тоя регистър, освен да му се любуваш докато цъка. Ако ти трябва неговата стойност, то ще ти трябва и младшия и ще си го прочетеш - това в случай че ползваш таймера като някакъв брояч. Ако го ползваш като тайм бейс - той като се препълни си ти казва. |
|
| Автор: | polinom [ Пон Фев 25, 2013 11:26 pm ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Добре сега, искам да използвам за реализирането на многоканална PWM с таймера. Мисля си че мога след като си го настроя да чета стойността до която е стигнал таймер и да преобръщам порта, но ми се вижда прекалено неелегантен метод. Да кажем ако искам да управлявам повече от 3-4 серво моторчета как да изчислявам PWM индивидуално за всяко един от тях независимо с един таймер. |
|
| Автор: | sparkybg [ Вто Фев 26, 2013 9:32 am ] |
| Заглавие: | Re: Обработка на прекъсване от Timer0 -PIC18 |
Няма какво да изчисляваш и да обръщаш ти. Има си микроконтролери с вграден PWM хардуер. На тях само им задаваш какво да е PWM то (например 128 от 256, което е 50%), и контролера си се грижи за останалото. Прочети си хубаво даташита на PIC18-ката. Вътре си пише всичко. Раздел 15 и 16 на даташита обясняват на дълго и на широко как работи тоя хардуер. Накратко - задаваш си на съответния таймер да брои например от 0 до 1023, и задаваш на хардуера да ти държи някой пин в 0 ако брояча на таймера е под някаква стойност и 1 ако е над нея. Като променяш дадената стойност между 0 и 1023 си регулираш процента на PWM-то. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|