ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1461256 Топик полностью
my504 (05.09.2024 09:10, просмотров: 97) ответил Ig_B на Использую MC202. Удалось настроить, но не понял почему так.
Манипуляции с телом таймера присоединенным к модулю будут приводить к неприятным фронтам на выходе. Поэтому самым лучшим вариантом считаю коммутацию RPOR0bits.RP20R=0b010000; / RPOR0bits.RP20R=0b000000; при выведенном в этот пин порта нуле или единице - что требуется. 

По поводу синхронизации.

Есть ТРИ точки управления этим процессом.

Первая - OC1CON1bits.TRIGMODE=1; позволяет управлять сбросом таймера от источника синхронизации через флаг OC1CON2bits.TRIGSTAT

Вторая - OC1CON2bits.OCTRIG=1; включает режим триггерного запуска в отличии от режима синхронизации (OC1CON2bits.OCTRIG=0;), который лишь привязывает фронт автоколебательного процесса модуля

Третья - выбор источника синхронизации в OC1CON2bits.SYNCSEL.

Так что жесткий триггерный режим требует единицы в TRIGMODE и OCTRIG. Тогда на каждое входное синхронизирующее событие мы получим один период ШИМа.

При равенстве OC1R и OC1RS и не равенстве их нулю рефмануал на модуль (DS70005159A) регламентирует следующее поведение модуля в режиме OCM=0b101 (Table 3-5 on Page 22):

The timer counts up to the first compare (Timer = OCxR) and the first rising edge is generated. The timer continues to count and eventually resets when synchronization occurs or a rollover from FFFFh occurs. The timer then restarts from 0x0000 and counts up to the second compare (TMRx = OCxRS), and the second falling edge of the signal is generated. The falling edge of the output pulse generates an interrupt condition. The sequence repeats until the module is disabled.