Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.03.2015, 19:56  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
А я думал, что проще константу времени автоотключения оставить!
Выставить её например в 60 (то есть 1 мин.), и в зависимости от того, сколько раз инкрементируется счетчик, множить на соответствующее значение! Например:
- прошла 1 секунда после нажатия - множим на 1
- 2 секунды на 2;
- 3 на 4
- 4 на 8
Я очень плохо разбираюсь в программировании, но мне кажется здесь можно обойтись и без умножения, достаточно сдвигать один бит, если я не ошибаюсь, влево! Или нет?
Всем доброго времени суток.
Я, думаю, что Вы будете очень ограничены с математическим алгоритмом, только кратные величины, а через сase - Вы можете делать, все-что угодно. даже сразу увеличивать время, а потом уменьшить при большей длительности нажатия.
А насчет делителей, ну, может я где-то сбился. Я просмотрел - Вы сразу обсуждали делители и их реинит, а остановились на режимах. Ну, я и решил напомнить, на всякий случай.
Реклама:
МВА вне форума  
Непрочитано 07.04.2015, 18:35  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

К сожалению, я очень плохо разбираюсь в синтаксисе C++, поэтому не знаю, как правильно написать код, но по-мойму там будет достаточно изменить функцию void key_scan(void) на int key_scan(int) и добавить в неё строку
PHP код:
return count
перед обнулением счетчика длительности нажатия кнопки! То есть написать так:
PHP код:
//Сканирование кнопки
void    key_scan(void)
{
    
M.KeyEXE 0;          //Запрет опроса кнопок, который кто-то выкинул)))))
    //Вся логика работы поменялась, теперь его место здесь
    
if (KeyPress)                //Если кнопка нажата. ЕСЛИ КНОПКА НАЖАТА МЫ ВОШЛИ В ЭТУ ФУНКЦИЮ
    
{                            
        if  (
count›=longkey//Если длинное нажатие
        
{                                
               if(!(
M.F_longkey))
           {
           
M.F_longkey=1;
               
BACKLIGHT_on_off();
                  return 
count;    // ‹‹‹‹-------------------возвращаем значение счетчика длительности нажатия
                  
count=0;         // сбрасываем счетчик когда кнопка не нажата
           
}
        }                   
//Выход

        
count++;          //Увеличиваем счётчик задержки. 
        // Его надо делать ПОСЛЕ проверки условия, иначе может быто перепрлнение.
        
systemClock 0;        //Сброс таймаута выключения подсветки.
    
}
    else               
// если кнопка не нажата...
    
{
        
M.F_longkey=0;
        
count=0;         // сбрасываем счетчик когда кнопка не нажата
        
asm("sleep");
    }    
// ...микроконтроллер "засыпает"

А строку
PHP код:
#define secundes 10    // количество секунд для автоотключения 
Заменить на
PHP код:
int secundes count 100;  //  100 - это для примера, можно написать и 1000 
Мне кажется, этот вариант проще всего! Или нет?
prosto_andriy вне форума  
Непрочитано 07.04.2015, 19:06  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Мне кажется, этот вариант проще всего! Или нет?
Всем доброго времени суток.
Думаю нет. Так работать не должно.
Переменная count - определяет порог срабатывания (длинное/короткое) после длинного она обнулится, а после короткого заснет.
Надо менять программу так, чтобы она и дальше увеличивалась, а после отпускания переписывалась в secundes, а уже после этого обнулялась. И еще, когда программа достигнет команды return, то программа будет выходить из функции при одном и том же значении count. так что строка count=0;после команды return скорее всего никогда не выполнится.

Последний раз редактировалось МВА; 07.04.2015 в 19:14.
МВА вне форума  
Сказали "Спасибо" МВА
prosto_andriy (07.04.2015)
Непрочитано 08.04.2015, 05:06  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Обнаружил странный глюк в предыдущем варианте кода! Почему-то ATtiny13A входит в режим "крепкого сна" только по таймеру автоотключения!
А вот после нажатия кнопки (даже когда светодиод гаснет) полностью не засыпает!!!
Непонятно, почему так происходит?
Я уже кучу вариантов перепробовал, меняя MCUCR=0x20; на MCUCR=0x30; но все равно ничего не получилось - контроллер либо засыпает так, что его не разбудишь, либо засыпает не полностью после выключения светодиода кнопкой!
Не могу понять, что нужно исправить? Подскажите пожалуйста!
prosto_andriy вне форума  
Непрочитано 08.04.2015, 20:53  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Обнаружил странный глюк в предыдущем варианте кода! Почему-то ATtiny13A входит в режим "крепкого сна" только по таймеру автоотключения!
А вот после нажатия кнопки (даже когда светодиод гаснет) полностью не засыпает!!!
Непонятно, почему так происходит?
Я уже кучу вариантов перепробовал, меняя MCUCR=0x20; на MCUCR=0x30; но все равно ничего не получилось - контроллер либо засыпает так, что его не разбудишь, либо засыпает не полностью после выключения светодиода кнопкой!
Не могу понять, что нужно исправить? Подскажите пожалуйста!
Всем доброго времени суток.
Все правильно, так это и будет работать. У тебя режим глубокого сна включается при загрузке программы, или по истечению тайм-аута. после включения, на кнопку вообще не должен реагировать. Нет включать выключать он будет, потому-что реверсируется бит включения и выключения, и больше ничего, правда после истечения тайм-аута он уснет даже с выключенной лампой. Надо в функции key_scan проверять длину нажатия, или дeлать else на count›=longkey в ней выключать подсветку и потом функция "Я хочу спать!" Или еще проще, вставь эту функцию в тело условия выключения фонаря.
Кстати, погоняй в AVR Studio (чтоб долго не ждать прерываний используй контекстное меню работать до курсора), и сам все увидишь.

Последний раз редактировалось МВА; 10.04.2015 в 20:06.
МВА вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


Часовой пояс GMT +4, время: 14:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot