реклама на сайте
подробности

 
 
> Выдать пульс при изменении счетчика.
Jenya7
сообщение Dec 25 2014, 14:36
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



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

Вопрос а есть ли более быстрое решение?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ae_
сообщение Dec 26 2014, 15:03
Сообщение #2


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Что-то вроде этого?
Код
if !(counter % 100) PulseOut();
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 30 2014, 11:41
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ae_ @ Dec 26 2014, 21:03) *
Что-то вроде этого?
Код
if !(counter % 100) PulseOut();

тут есть проблема.
если счетчик обновляется медленно то это условие присутствует какое то время и я получу несколько пульсов вместо одного.
или вообще не обновляется - тогда это условие присутствует все время и я получу пульсы все время.
Go to the top of the page
 
+Quote Post
ae_
сообщение Dec 31 2014, 08:45
Сообщение #4


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(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();
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 15:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016