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

 
 
 
Reply to this topicStart new topic
> Выдать пульс при изменении счетчика.
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
Guest_TSerg_*
сообщение Dec 25 2014, 17:11
Сообщение #2





Guests






И чем Вас не устраивает быстрота Вашего решения и какая она вообще?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 25 2014, 17:51
Сообщение #3


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

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



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

у меня приборчик работает от батарейки. борюсь за каждый бит. sm.gif
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 25 2014, 17:54
Сообщение #4





Guests






При чем тут мощность и "быстрота" и бит?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 25 2014, 18:02
Сообщение #5


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

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



Цитата(TSerg @ Dec 25 2014, 22:54) *
При чем тут мощность и "быстрота" и бит?

это так к слову. быстро порешал все задачи и пошел спать. в спящем режиме потребление в разы меньше.

Сообщение отредактировал Jenya7 - Dec 25 2014, 18:04
Go to the top of the page
 
+Quote Post
ae_
сообщение Dec 26 2014, 15:03
Сообщение #6


Участник
***

Группа: Свой
Сообщений: 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
Сообщение #7


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

Группа: Участник
Сообщений: 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
Dog Pawlowa
сообщение Dec 30 2014, 12:21
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Jenya7 @ Dec 25 2014, 17:36) *
Вопрос а есть ли более быстрое решение?

Я думаю, что боле быстрое решение будет, если внедриться в тот фрагмент, где получаются цифры на дисплее.
А так Вы анализируете count дважды - вначале при выводе, а потом для формирования импульса.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 30 2014, 14:54
Сообщение #9


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

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



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

нет. я передаю счетчик в функцию которая отображает его на дисплее а потом отслеживаю изменение в нем. нет никакой разницы где я буду это делать - я все равно обязан проверить изменилась цифра или нет.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 30 2014, 17:57
Сообщение #10





Guests






"Чушь собачья" (С)
Go to the top of the page
 
+Quote Post
ae_
сообщение Dec 31 2014, 08:45
Сообщение #11


Участник
***

Группа: Свой
Сообщений: 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
Jenya7
сообщение Dec 31 2014, 14:29
Сообщение #12


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

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



эээ....последний момент требует более внимательного рассмотрения, может это самое оптимальное решение.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:22
Рейтинг@Mail.ru


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