Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выдать пульс при изменении счетчика.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Jenya7
У меня есть счетчик (переменная) который я отображаю на 8-сегментом дисплее, что впрочем не важно.
Я хочу при изменении какой либо цифры счетчика выдать пульс наружу.
Ну скажем по третьей цифре справа,
то есть если было 00000199 и стало 00000200 выдать пульс.
Очевидное решение такое
Код
digit = (counter / 100); //test 3-d digit
if (digit != old_digit)
{
    old_digit = digit;
    PulseOut();
}

Вопрос а есть ли более быстрое решение?
TSerg
И чем Вас не устраивает быстрота Вашего решения и какая она вообще?
Jenya7
Цитата(TSerg @ Dec 25 2014, 22:11) *
И чем Вас не устраивает быстрота Вашего решения и какая она вообще?

у меня приборчик работает от батарейки. борюсь за каждый бит. sm.gif
TSerg
При чем тут мощность и "быстрота" и бит?
Jenya7
Цитата(TSerg @ Dec 25 2014, 22:54) *
При чем тут мощность и "быстрота" и бит?

это так к слову. быстро порешал все задачи и пошел спать. в спящем режиме потребление в разы меньше.
ae_
Что-то вроде этого?
Код
if !(counter % 100) PulseOut();
Jenya7
Цитата(ae_ @ Dec 26 2014, 21:03) *
Что-то вроде этого?
Код
if !(counter % 100) PulseOut();

тут есть проблема.
если счетчик обновляется медленно то это условие присутствует какое то время и я получу несколько пульсов вместо одного.
или вообще не обновляется - тогда это условие присутствует все время и я получу пульсы все время.
Dog Pawlowa
Цитата(Jenya7 @ Dec 25 2014, 17:36) *
Вопрос а есть ли более быстрое решение?

Я думаю, что боле быстрое решение будет, если внедриться в тот фрагмент, где получаются цифры на дисплее.
А так Вы анализируете count дважды - вначале при выводе, а потом для формирования импульса.
Jenya7
Цитата(Dog Pawlowa @ Dec 30 2014, 18:21) *
Я думаю, что боле быстрое решение будет, если внедриться в тот фрагмент, где получаются цифры на дисплее.
А так Вы анализируете count дважды - вначале при выводе, а потом для формирования импульса.

нет. я передаю счетчик в функцию которая отображает его на дисплее а потом отслеживаю изменение в нем. нет никакой разницы где я буду это делать - я все равно обязан проверить изменилась цифра или нет.
TSerg
"Чушь собачья" (С)
ae_
Цитата(Jenya7 @ Dec 30 2014, 20:41) *
если счетчик обновляется медленно то это условие присутствует какое то время и я получу несколько пульсов вместо одного.
или вообще не обновляется - тогда это условие присутствует все время и я получу пульсы все время.

Если счётчик не изменяется, то зачем его проверять всё время?
Переместите проверку в то место программы, где происходит изменение счётчика:
Код
counter++; // или любая другая функция изменения counter
if !(counter % 100) PulseOut();

Если counter изменяется вне программы (volatile), тогда так:
Код
if (digit != counter)
{
    digit = counter;
    if !(digit % 100) PulseOut();
}

upd:
т.к. операция взятия остатка от деления тяжелая, можно находить разность счётчика и временной переменной, но тогда вызов PulseOut будет происходить не обязательно в момент перехода сотен, а просто каждые 100 импульсов. Например, если начальное значение счётчика было 17, то вызовы PulseOut() будут в 117, 217, 317 и т.д.
Код
if (counter-digit >= 100 || digit-counter >=100)
{
    digit = counter;
    PulseOut();
}
Jenya7
эээ....последний момент требует более внимательного рассмотрения, может это самое оптимальное решение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.