| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Как увеличивать скорость пересчёта
28.07.2010, 22:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от Godzilla82
|
|
Наверное, в начале функции main объявить переменную delay_init
|
И что из этого выйдет? Строку с ошибкой можно вообще удалить, кроме присвоения значения 100 переменная delay_init больше нигде не используется.
|
|
|
|
28.07.2010, 22:21
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от Godzilla82
|
Наверное, в начале функции main объявить переменную delay_init:
|
Код:
|
unsigned int delay_init; |
|
Спасибо всё заработало, всем спасибо (буду учится дальше).
|
|
|
|
28.07.2010, 22:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от kison
|
|
И что из этого выйдет? Строку с ошибкой можно вообще удалить, кроме присвоения значения 100 переменная delay_init больше нигде не используется.
|
Попробовал без delay_init тоже работает, ещё раз всем спасибо.
|
|
|
|
28.07.2010, 22:29
|
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Угу, забыл просто грохнуть строчку
__________________
Найди путь или проложи сам!
|
|
|
|
28.07.2010, 22:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
А вот почему в плюс работает а в минус нет, вроде написал верно (может нет)
if((!kn_plus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_plus)
{if (ph ‹ 32700)
{if (ph›(ph_state_save+30))
ph += 10;
else ph += 1;
set_pch();
delay_ms(100);}}};
if((!kn_minus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_minus)
{if (ph › 32700)
{if (ph›(ph_state_save-30))
ph -= 10;
else ph -= 1;
set_pch();
delay_ms(100);}}};
|
|
|
|
28.07.2010, 23:29
|
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
У меня такое чувство что ты свой код ВООБЩЕ не читаешь. Когда уменьшаем нам же надо ориентироваться не на "показатель больше сохраненного" а на "показатель меньше сохраненного"
|
PHP код:
|
if((!kn_plus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_plus)
{if (ph ‹ 32700)
{if (ph›(ph_state_save+30))
ph += 10;
else ph += 1;
set_pch();
delay_ms(100);}}};
if((!kn_minus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_minus)
{if (ph › 0) //Мы теперь уменьшаем поэтому мы задаем рамки до какого значения уменьшать.
{if (ph‹(ph_state_save-30)) //Мы начнем ускоряться только когда полученное ph уже стало МЕНЬШЕ чем то с которого мы начали уменьшать значение
{ //Внимание тут ставим "предохранитель" который не позволит скакнуть меньше нуля если уменьшаем сразу значениями 10
if (ph ›10) //Если есть в запасе больше 10ти ph
ph -= 10; //То отнимаем сразу по 10
else ph -= 1; //Если у нас меньше 10 то замедляемся отнимаем по одному.
}
else ph -= 1;
set_pch();
delay_ms(100);}}};
|
__________________
Найди путь или проложи сам!
|
|
|
|
28.07.2010, 23:45
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Не знаю, что нужно топикстартеру, но подозреваю, что организацию кнопочного ввода, напрмер как для часов. Чтобы одиночное нажатие на кнопку увеличивало значение на 1, а более длительное (более 2 с) - быстрое непрерывное увеличение.
Я поступал так:
|
Код:
|
void main(void)
{
char cnt1 = 0;
begin:
if (!PINA.1) {
if ( (cnt1 == 0) || (cnt1 == 20) ) press_1();
if ( cnt1 ‹ 20) cnt1++;
}
else cnt1 = 0;
delay_ms(100);
goto begin;
}; |
В функции press_1() выполнялись все необходимые действия для кнопки №1.
P.S. MasterMushi: Сделайте перенос в строчках с комментариями. Не у всех 1280х1024 или выше.
Последний раз редактировалось Godzilla82; 28.07.2010 в 23:58.
|
|
|
|
29.07.2010, 00:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от MasterMushi
|
|
У меня такое чувство что ты свой код ВООБЩЕ не читаешь. Когда уменьшаем нам же надо ориентироваться не на "показатель больше сохраненного" а на "показатель меньше сохраненного
|
Да собственно разобрался, я просто забыл поставить минус перед значением
(ph › -32700)
вот собствеено что получилось
|
PHP код:
|
{
if((!kn_plus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_plus)
{if (ph ‹ 32700)
{if (ph›(ph_state_save+30))
ph += 10;
else ph += 1;
set_pch();
delay_ms(100);}}}
if((!kn_minus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
while(!kn_minus)
{if (ph › -32700)
{if (ph‹(ph_state_save-30))
ph -= 10;
else ph -= 1;
set_pch();
delay_ms(100);}}}
}
|
Мне нужно не только прибавлять но и отнимать значение.
Это для цифравой шкалы ПЧ +\-
Последний раз редактировалось sdsrem; 29.07.2010 в 00:32.
|
|
|
|
29.07.2010, 00:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от sdsrem
|
|
Мне нужно не только прибавлять но и отнимать значение.
|
Ну так в чём проблема-то?
|
Код:
|
void main(void)
{
char cnt1 = 0;
char cnt2 = 0;
begin:
if (!PINA.1) {
if ( (cnt1 == 0) || (cnt1 == 20) ) press_1();
if ( cnt1 ‹ 20) cnt1++;
}
else cnt1 = 0;
if (!PINA.2) {
if ( (cnt2 == 0) || (cnt2 == 20) ) press_2();
if ( cnt2 ‹ 20) cnt2++;
}
else cnt2 = 0;
delay_ms(100);
goto begin;
}; |
Вместо press_1() в вашем случае надо поставить ph++, а вместо press_2() - ph--.
|
|
|
|
29.07.2010, 00:53
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от Godzilla82
|
Ну так в чём проблема-то?
|
Код:
|
void main(void)
{
char cnt1 = 0;
char cnt2 = 0;
begin:
if (!PINA.1) {
if ( (cnt1 == 0) || (cnt1 == 20) ) press_1();
if ( cnt1 ‹ 20) cnt1++;
}
else cnt1 = 0;
if (!PINA.2) {
if ( (cnt2 == 0) || (cnt2 == 20) ) press_2();
if ( cnt2 ‹ 20) cnt2++;
}
else cnt2 = 0;
delay_ms(100);
goto begin;
}; |
Вместо press_1() в вашем случае надо поставить ph++, а вместо press_2() - ph--.
|
Сейчас попробую ваш вариант, тоже интересно.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:49.
|
|