Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.07.2010, 01:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Как увеличивать скорость пересчёта
Как правильно сделать чтоб нажал на кнопку пересчёт был допустим со скоростью 1 секунда, но ежели кнопку удерживать 3 секунды то пересчёт должен повысить скорость например до 0,1 секунды?
Вот кусочек кода куда надо это вставить.
Может для этого есть более простое решение?
if((PINC.1 == 0)&&(PINB.0 == 1)){
delay_ms(50);
while(PINC.1 == 0){
if (ph ‹ 32700){
ph += 1;
set_pch();
delay_ms(100);
}
}
}
|
|
|
|
28.07.2010, 06:33
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Посчитай время нажатия кнопки. Но скорее всего придется писать свою собственную функцию задержки. Чтобы убирать в цикле.
Чтото типа такого
PHP код:
|
void delay_button(char mikrisekundi) { while (mikrisekundi--) delay_ms(1); }
unsigned int ph_state_save; char delay_init; // - счетчик для задержки
if((PINC.1 == 0)&&(PINB.0 == 1)){ delay_ms(50); ph_state_save=ph; //Вот тут мы сохраним опорное PH значение перед //ускорением. Как только превысим порог в +50 пунктов начнем гнать. delay_init=100; //Зададим первоначальную задержку while(PINC.1 == 0){ if (ph ‹ 32700){ ph += 1; set_pch();
//Теперь если мы удерживая удержали до сдвига больше чем на 50 //пунктов То каждый следующий пункт будет на миллисекунду быстрее //(можно еще быстрее ускорение счета сделать если надо.) Я бы сделал //сразу -10 if ((ph›(ph_state_save+50))&&(delay_init›1)) delay_init--; //И так уменьшаем пока не будет задержка всего в 1 миллисекунду
delay_button(delay_init); } } }
|
__________________
Найди путь или проложи сам!
|
|
|
|
28.07.2010, 16:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
[QUOTE=MasterMushi;231855]Посчитай время нажатия кнопки. Но скорее всего придется писать свою собственную функцию задержки. Чтобы убирать в цикле.
Чтото типа такого
Спасибо большое, интересная прога.
Но мне нужно не совсем так, нужно просто чтоб через допустим 3 секунды пересчёт начинал считать в 10 или в 20 раз быстрее при этом не увеличивая и не уменьшая скорость пересчёта.
|
|
|
|
28.07.2010, 16:44
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Нет предела патриотам!
В твоем желанном варианте даже дополнительных функций не надо!!
PHP код:
|
unsigned int ph_state_save;
if((PINC.1 == 0)&&(PINB.0 == 1)){ delay_ms(50); ph_state_save=ph; //Вот тут мы сохраним опорное PH значение перед //ускорением. Как только превысим порог в +30 пунктов начнем гнать. delay_init=100; //Зададим первоначальную задержку while(PINC.1 == 0){ if (ph ‹ 32700){ if (ph›(ph_state_save+30)) //Три секунды это 30 пунктов если задерживаем по 0.1 секунды ph += 10; //Как только прошли три секунды начинаем добавлять сразу по 10 пунктов else ph += 1; //Если только нажата кнопка добавляем по одному set_pch(); delay_ms(100); } } }
|
__________________
Найди путь или проложи сам!
|
|
|
|
28.07.2010, 17:05
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Да почти все то же самое. Только не задержку уменьшаете, а делаете переменную шага ph_step=1;
и вместо ph+=1; прописываете ph+=ph_step; . Ну и вначале это прибавление единицы, если кнопка удерживается по последнему условию, то делаем ph_step+=10; или 20 и т.д. Ну или если надо в геометрической прогрессии, то ph_step умножается на константу.
|
|
|
|
28.07.2010, 17:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Спасибо всем, буду пробовать.
|
|
|
|
28.07.2010, 18:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Блин где задефайнить, или какую функцию включить, использую CVAVR
delay_init=100; //Зададим первоначальную задержку
ато ошибку выдаёт
|
|
|
|
28.07.2010, 18:48
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Начнем с того что в функции delay_ms и delay_us как параметры можно только константы передавать.
Код пересмотрел, все верно. Смени тип переменных на int. Может поможет. Или я гдето русские символы повставлял. Перепроверь
__________________
Найди путь или проложи сам!
|
|
|
|
28.07.2010, 19:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Вот видимо должно получится так
unsigned int ph_state_save;
if((!kn_plus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
delay_init=100; ‹‹‹‹‹‹‹---сдесь ошибка
while(!kn_plus)
{ if (ph ‹ 32700)
{ if (ph›(ph_state_save+30))
ph += 10;
else ph += 1;
set_pch();
delay_ms(100);}}}
что сделать?
|
|
|
|
28.07.2010, 21:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: Как увеличивать скорость пересчёта
Сообщение от sdsrem
|
Вот видимо должно получится так
unsigned int ph_state_save;
if((!kn_plus)&&(kn_TX))
{delay_ms(50);
ph_state_save=ph;
delay_init=100; ‹‹‹‹‹‹‹---сдесь ошибка
while(!kn_plus)
{ if (ph ‹ 32700)
{ if (ph›(ph_state_save+30))
ph += 10;
else ph += 1;
set_pch();
delay_ms(100);}}}
что сделать?
|
Наверное, в начале функции main объявить переменную delay_init:
Код:
|
unsigned int delay_init; |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:08.
|
|