Появилась минутка, сделал блок на ST.
Получается, для генерации следующей пачки импульсов нужно передёрнуть вход enable (сделать enable==false, дождаться пока ready перейдёт в false, потом передать enable=true и тогда пойдёт вторая пачка). Это то, что ожидалось?
По поводу изменения частоты импульсов: текущий подход к программированию PRU предполагает, что PRU выполняется своим циклом, поэтому тут я сделал "переключение сигнала out при каждом цикле PRU". Норм? Или делитель какой-то нужен?
Или с такой стороны: нормально ли, если для изменения частоты меандра нужно перезаливать PRU программу?
Нужны ли меандры разной частоты по разным выходам?
Код:FUNCTION_BLOCK PRU_GENER_BURST VAR_INPUT enable : BOOL; quantity : WORD; END_VAR VAR_OUTPUT out : BOOL; ready : BOOL; END_VAR VAR qtyLeft : WORD; END_VAR IF enable THEN IF qtyLeft > 0 THEN (* Идёт генерация *) qtyLeft := qtyLeft - 1; ELSIF ready THEN (* Всё сгенерировали, ждём пока передёрнут enable для следующего включения *) ELSE (* Поступила команда на включение *) qtyLeft := quantity * 2; END_IF; ELSE (* Выключаемся *) qtyLeft := 0; END_IF; ready := qtyLeft = 0; (* Если всё сделали, то out выключится. Если пачка ещё генерируется, то младший бит и есть меандр *) out := qtyLeft.0; END_FUNCTION_BLOCK




Ответить с цитированием