реклама на сайте
подробности

 
 
> PIC18 Compare & PinRB3 CCP2, CCP2CON обслуживание в КАЖДОМ цикле
Мур
сообщение Nov 12 2006, 02:46
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



После 7-летнего перерыва (подсел на AVR после РIC16) вернулся к PIC18...
Вроде получилось! Благо С помогает на ассемблер не отвликаться, а обслуживание регистров легко по формату таблицы, что перед глазами всегда.
twak.gif Затык произошёл от нечёткой информации в даташите. НЕТ предупреждения, что для нормальной работы пина ССР2 требуется в КАЖДОМ цикле возобновлять значение CCP2CON!
Долбался неделю. maniac.gif Наверное сработал привычный AVR-ский подход...Не расслабляйтесь!!!
Флажком на другой ноге прописал програмно штатное поведение ССР2. Убедился ,что живёт...Но оказывается, чтобы родной выход работал, надо в прерывании постоянно подгружать CCP2CON!!

Делюсь находкой tort.gif Удачи пытливым!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Мур
сообщение Nov 13 2006, 05:27
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



PIC18F2455 santa2.gif
#pragma interrupt high_isr
void high_isr(void)
{
if(PIR2bits.TMR3IF&&PIE2bits.TMR3IE) //select int COMP
{
WORD temp;
PIE2bits.TMR3IE = 0; //OVF Interrupt disableable bit
CCPR2H =MOD_buffer[mod].byte1 ;
CCPR2L =MOD_buffer[mod].byte0 ;
PIR2bits.TMR3IF = 0;//clr OVF
PIE2bits.TMR3IE = 1; //OVF Interrupt Enable bit
temp._word = MOD_buffer[mod++]._word-SYSTEMATIC ;//+ SYSTEMATIC
TMR3H = temp.v[1] ;//setup begin count!
TMR3L = temp.v[0] ;
TEST_FLAG = !TEST_FLAG;////////////

PIR2bits.TMR3IF = 0;
}
CCP2CON = 0x09; //compare -> low CCP2
}
Я тоже считал это чушью...
Go to the top of the page
 
+Quote Post
Мур
сообщение Nov 13 2006, 12:28
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Да нет же! Назвать это ШИМом нельзя, т.к. в основном этот выход молчит и только при наступлении стартового события формируется переменная(разная в каждом сеансе!) последовательность, где 1-ное значение фиксированной длительности, а информация в периоде. Причём ССР модуль нужен для точности формирования,-аппаратная реализация всё-таки!....Кстати число этих периодов тоже программируемое! blink.gif

Если не делать такой (выделенной в тексте) операции,- импульс появляется на ноге ТОЛЬКО ОДИН раз, хоть таймер и компарирование ведёт себя корректно(флагом это отслеживается..) ! И далее железный 0 cranky.gif

Обратите внимание, после новой инициализации CCP2CON появление 1 на ноге честное, в момент переполнения таймера, а не в момент загрузки CCP2CON, как ВЫ педположили... tongue.gif
Go to the top of the page
 
+Quote Post
Мур
сообщение Nov 13 2006, 15:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Важная деталь! PWM имеет всего-лишь 10разрядное разрешение..
Здесь у меня все 16!

Поясню Ваш вопрос рисунком
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016