Страница 1 из 2

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 14:23
aidar_i
Штатный генератор наворочен, часто нужен генератор подающий импульс в один цикл, сделал для уменьшения веса скетча.
Генератор 1ц.flp

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 16:42
Phazz
Вообще такой вариант генератора должен быть в штатных. Нужно Сергею писать петицию)

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 20:51
Dryundel
aidar_i писал(а): 19 мар 2023, 14:23 Штатный генератор наворочен, часто нужен генератор подающий импульс в один цикл, сделал для уменьшения веса скетча.
[ref=#ff8000]aidar_i[/ref], вот Вам еще идея генератора, но привязанная к циклам. С millis() такой фортель не покатит.

cycles++;

и теперь используем в нужных условиях типа так:

if ( ! (cycles % timer)) {
//....Требующееся действие
}

Где timer - период генератора (в циклах).

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 20:57
Phazz
[ref=#ff8000]Dryundel[/ref], а практический смысл в чем?

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 21:15
Dryundel
Phazz писал(а): 19 мар 2023, 20:57 Dryundel, а практический смысл в чем?
Практический смысл чего? Такого генератора?
О! это отдельная песня. Когда идет борьба за каждый бйт, сия штука даст вам очень много.
Ну сами посчитайте. Для обычного минимального таймера нужен один флаг - это один байт и переменная типа unsigned long oldTime, а это еще 4 байта. и того 5 байт с каждого генератора. А их к примеру а какой нибудь STM8S003 не так уж много.

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 21:22
Phazz
[ref=#ff8000]Dryundel[/ref], но тогда нужно будет четко знать сколько времени займет 1 цикл.

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 21:36
Dryundel
Phazz писал(а): 19 мар 2023, 21:22 Dryundel, но тогда нужно будет четко знать сколько времени займет 1 цикл.
Во первых, данный вариант не для блока общего пользования. Во вторых, очень часто и не требуется великая точность по времени. В третьих, иногда к циклам привязываться даже выгодней. Ну и наконец, "жить захочешь не так раскорячишься". :)
История одного байта

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 23:16
aidar_i
Dryundel писал(а): 19 мар 2023, 20:51 вот Вам еще идея генератора, но привязанная к циклам.
Видел аналогичное решение в примерах для stm8s, но не догадался использовать.
Спасибо, сделаю блок и испытаю, уход с миллис с его unsigned long даст хорошую экономию памяти. В термостате не нужна особая точность таймера. И вообще хочу там только один генератор оставить, убрать из дисплея и датчика.

Генератор импульса в один цикл

Добавлено: 19 мар 2023, 23:59
Phazz
[ref=#ff8000]Dryundel[/ref], ну в общем вы правы, можно просто измерить время цикла конкретного проекта . Она вряд ли сильно меняется.

Генератор импульса в один цикл

Добавлено: 21 мар 2023, 09:56
aidar_i
Dryundel писал(а): 19 мар 2023, 21:15
Phazz писал(а): 19 мар 2023, 20:57 Dryundel, а практический смысл в чем?
Практический смысл чего? Такого генератора?
О! это отдельная песня. Когда идет борьба за каждый бйт, сия штука даст вам очень много.
Ну сами посчитайте. Для обычного минимального таймера нужен один флаг - это один байт и переменная типа unsigned long oldTime, а это еще 4 байта. и того 5 байт с каждого генератора. А их к примеру а какой нибудь STM8S003 не так уж много.
Испытал, тратится больше памяти для такого генератора на стм8.
Dryundel писал(а): 19 мар 2023, 21:15 unsigned long
от него не возможно уйти, если выдавать время напрямую(там нужно сотни тысяч ставить) , попробую со счётчиком, может так меньше будет или генератор в генераторе поставить, чтобы уложиться в ин-тежер.

Генератор импульса в один цикл

Добавлено: 21 мар 2023, 10:42
Dryundel
aidar_i писал(а): 21 мар 2023, 09:56 Испытал, тратится больше памяти для такого генератора на стм8.
Очень странно. А почему?
Можно код испытуемый глянуть?
aidar_i писал(а): 21 мар 2023, 09:56 от него не возможно уйти,
Совсем не возможно. Но в случае с той идеей что я предложил, такая переменная нужна одна на весь проект, а не для каждого таймера своя.

Отправлено спустя 5 минут 39 секунд:
Dryundel писал(а): 21 мар 2023, 10:36 чтобы уложиться в ин-тежер.
Можно и интеджер применить в моём случае. Только будет чаще сбой точности происходить. Один раз на 64000 циклов, если бесзнаковый.

Генератор импульса в один цикл

Добавлено: 21 мар 2023, 11:28
aidar_i
[ref=#ff8000]Dryundel[/ref], может сделаете свой блок и мне скинете, я пока с пид для стм8 копаюсь, в память вписывается, но не проверил работоспособность.

Генератор импульса в один цикл

Добавлено: 21 мар 2023, 14:38
Dryundel
aidar_i писал(а): 21 мар 2023, 11:28 Dryundel, может сделаете свой блок и мне скинете
Ок. Через часик до компа доберусь.

Отправлено спустя 2 часа 53 минуты 45 секунд:
Вот. Попробуй.
GEN-TICK.flp

Генератор импульса в один цикл

Добавлено: 11 апр 2023, 14:08
Kot
[ref=#ff8000]aidar_i[/ref], а если сделать на апаратном таймере который не привязан к милес и куклес тогда ещё точнее будет отрабатывать ?

Генератор импульса в один цикл

Добавлено: 11 апр 2023, 20:35
ecoins
Kot писал(а): 11 апр 2023, 14:08 aidar_i, а если сделать на апаратном таймере который не привязан к милес и куклес тогда ещё точнее будет отрабатывать ?
Только сейчас посмотрел проект и понял о чем он -генератор периодических событий.
Таким блоком из библиотеки ecoins мы пользуемся давно, в профессиональной версии редактора предусмотрены два отключаемых выхода - меандр и событие(один цикл). Есть блоки и на простом редакторе. В блоках используется генератор из RT_HW_BASE.h, но без проблем может быть заменен генератором-библиотекой от FLProg или автономным генератором.

Генератор импульса в один цикл

Добавлено: 11 апр 2023, 21:36
waswas
Phazz писал(а): 19 мар 2023, 16:42 нужен генератор подающий импульс в один цикл
а где такой использовать нужно?
чисто теоретически можно примеры?)

Генератор импульса в один цикл

Добавлено: 11 апр 2023, 22:35
Phazz
[ref]waswas[/ref], запись в переменную, тактирование платы дисплея. Отправка данных по вайфай. Я очень часто использую.

Генератор импульса в один цикл

Добавлено: 12 апр 2023, 19:21
Naladchik
Dryundel писал(а): 19 мар 2023, 20:51 if ( ! (cycles % timer)) {
aidar_i писал(а): 21 мар 2023, 09:56 Испытал, тратится больше памяти для такого генератора на стм8.
Dryundel писал(а): 21 мар 2023, 10:42 Очень странно. А почему?
А потому что " % - остаток от деления ", а любое деление это ресурсоемкая операция.

Генератор импульса в один цикл

Добавлено: 12 апр 2023, 19:57
waswas
ecoins писал(а): 11 апр 2023, 20:35 запись в переменную, тактирование платы дисплея. Отправка данных по вайфай. Я очень часто использую
а чем r-trigger или условие для платы не подходит?
взвели его/её и получили на один цикл запись

Генератор импульса в один цикл

Добавлено: 12 апр 2023, 20:56
ecoins
waswas писал(а): 12 апр 2023, 19:57 а чем r-trigger или условие для платы не подходит?
взвели его/её и получили на один цикл запись
В принципе тоже самое.
Но блок, который упоминался, совмещает в себе и генератор с минимальным количеством настроек (только период) и формирователь события(триггер), на плате занимает мало места, удобен в использовании.