Zandy 0 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба В даташите описывается последовательность процедур, как осуществить SETUP FOR PWM OPERATION. Все сделал, как в даташите. Все прекрасно работает. Меняю DUTY CYCLE. ШИМ шимит прекрасно. Теперь хочу остановить ШИМ. bit 2 регистра T2CON ставлю в 0. Вроде бы таймер должен остановиться. Хрен, не тут то было. ШИМ продолжает шимить. Ладно, думаю, выключу сам модуль, CCP1CON = 0; Остановился. Но на выходе CCP сидит 1. и никакими LATB =0; не удается поставить 0. Такое ощущение, что вывод остался привязан к модулю CCP. Полазил по интернету. нигде не нашел примеров реализации функций, деактивирующих ШИМ. В чем тут может быть дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 20 июня, 2019 Опубликовано 20 июня, 2019 · Жалоба Ну чисто беглым взглядом в Datasheet (стр. 208): Цитата Note 1: The corresponding TRIS bit must be cleared to enable the PWM output on the CCPx pin. 2: Clearing the CCPxCON register will relinquish control of the CCPx pin. Не оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zandy 0 20 июня, 2019 Опубликовано 20 июня, 2019 · Жалоба Спасибо конечно, но я же писал в начальном посте: "Ладно, думаю, выключу сам модуль, CCP1CON = 0; Остановился. Но на выходе CCP сидит 1. и никакими LATB =0; не удается поставить 0." Пробовал другие модули CCP. В CCP3 при отключении CCP3CON = 0; на выводе устанавливается 0. Но управлять этим выводом, записывая в рег. LATx я все равно не могу. Сдается мне, что дело в глючном симуляторе. Соберу в железе, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 20 июня, 2019 Опубликовано 20 июня, 2019 · Жалоба Что ж сразу не сказали, что симулятор использовали. Так до бесконечности можно гадать. Соберите в железе, ИМХО, будет все работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба Читаем параграф 12.1 , начиная со страницы 118. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zandy 0 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба Ну..., почитал. И ранее читал неоднократно. Скажу по секрету, даже пользовался тем, что там написано. И что ж там такого интересного, что относится к данной проблеме? Скажите уж, не интригуйте. Может у меня глаз замылился, и главного я не вижу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 22 июня, 2019 Опубликовано 22 июня, 2019 · Жалоба Нужно проверить регистр MDCON, если речь идет о пине RB3. Я имел ввиду, что порядок приоритетов ремапа таков, что выходная защелка всегда имеет низший приоритет. Кроме того, совершенно непонятно почему работает ШИМ при остановленном таймере. Проверьте бит TMRxON по факту его реального состояния, а не факту наличия инструкции по его сбросу. Проверьте TMRS регистр CCP модуля. Может ассоциирован другой таймер. Вы работаете в дебаге? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsl2640free 0 22 июня, 2019 Опубликовано 22 июня, 2019 · Жалоба можно вот так инициализировать Spoiler #include <xc.h> #include "epwm2.h" /** Section: Macro Declarations */ #define PWM2_INITIALIZE_DUTY_VALUE 511 /** Section: EPWM Module APIs */ void EPWM2_Initialize (void) { // Set the PWM to the options selected in MPLAB® Code Configurator // CCP2M P2AP2Chi_P2BP2Dlo; P2M halfbridge; DC2B 48; CCP2CON = 0xBD; // PSS2BD P2BP2D_0; CCP2AS disabled; CCP2ASE operating; PSS2AC P2AP2C_0; ECCP2AS = 0x00; // P2RSEN automatic_restart; P2DC 0; PWM2CON = 0x80; // STR2D P2D_to_port; STR2C P2C_to_port; STR2B P2B_to_port; STR2A P2A_to_port; STR2SYNC start_at_begin; PSTR2CON = 0x00; // CCPR2L 127; CCPR2L = 0x7F; // CCPR2H 0x0; CCPR2H = 0x00; // Selecting Timer2 CCPTMRS0bits.C2TSEL = 0x0; } void EPWM2_LoadDutyValue(uint16_t dutyValue) { // Writing to 8 MSBs of pwm duty cycle in CCPRL register CCPR2L = ((dutyValue & 0x03FC)>>2); // Writing to 2 LSBs of pwm duty cycle in CCPCON register CCP2CON = (CCP2CON & 0xCF) | ((dutyValue & 0x0003)<<4); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 22 июня, 2019 Опубликовано 22 июня, 2019 · Жалоба Вопрос об инициализации никто не задавал. Вопрос стоял об ОСТАНОВКЕ модуля и получении на выходе НИЗКОГО УРОВНЯ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zandy 0 22 июня, 2019 Опубликовано 22 июня, 2019 · Жалоба Спасибо всем. Извините, что отнял ваше время. Собрал в железе - все заработало! Чтобы никто не повторял мои ошибки: Симулятор - Proteus 8.4 SP0 - в помойку. ...ну если не сам симулятор, то модель PIC16F1827 точно в нее родимую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться