По поводу синхронизации.
Есть ТРИ точки управления этим процессом.
Первая - 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.
-
- Спасибо за пояснения и идею отключать пин от модуля. Ig_B(190 знак., 05.09.2024 09:31)