Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.04.2011, 21:08
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от oleg_harp
|
poligon_85, Вы нас запутываете. Вы в реале проверяете или в Proteus? В Proteus у кнопок нет никакого дребезга.
|
Да какой протеус. Конечно в реале. Макетка передо мной
Последний раз редактировалось poligon_85; 15.04.2011 в 21:15.
|
|
|
|
15.04.2011, 21:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
ладно, корректируем. Выбираем другой порт выхода - в3 у нас под шим и ставим дополнительный флаг блокировки, чтобы не мигало при нажатой кнопке.
PHP код:
|
interrupt [TIM0_OVF] void Time0_ovf_isr(void)
{
TCNT0=0xB2;
if (!button)// если кнопка нажата
{
if(!stp)// и не заблокирована
{
if(!first) // и флаг сброшен
{
first=1; // ставим флаг счета
timer_count=0; // обнуляем счетчик
}
else
{
timer_count++; // увеличиваем счетчик антидребезга
if (timer_count › MAX_ANTI)//проверяем его
{
PORTB.1^=1;
stp=1;// стопим, пока не рассосется
}
}
}
}
else // кнопка отжата
{
if(first) // но флаг взведен
{
if(timer_count)timer_count--;// уменьшаем счетчик антидребезга
else
{
first=0; // если нельзя сбрасываем флаг cчета
stp=0;// сбрасываем флаг блокировки
}
}
}
}
|
|
|
|
|
15.04.2011, 21:46
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
|
|
|
|
15.04.2011, 21:50
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Да да, это тоже я. Но там вообще всё глухо.
urry, всё заработало! Четкая реакция на клавиши. вкл/выкл, и без моргания при удержании
|
|
|
|
15.04.2011, 22:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
ну, собственно, к теме это никакого отношения не имеет - просто чтобы как бы сказать.. неважно. Разбирайте предложенный Вам ранее код, определитесь с режимами, в которых может находиться фонарик - я вижу 4 - включено, выключено, увеличение яркости и уменьшение яркости . Нарисуйте кружочки, как оно из одного в другое переходит и от чего.
Необходимость записывать в еепром текущее значение яркости я не вижу - Вы можете отправить контроллер в спячку.
|
|
|
|
15.04.2011, 22:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
urry, всё заработало!
|
Кто бы сомневался...
Проверил в кристалле свой вариант. Работает, но мееееедлеееенноооо.
Поменял в 47 посту. https://kazus.ru/forums/showpost.php...0&postcount=47
А вот видео как работает 11.zip
...это только начало. Дальше будет стабилизация тока через светодиод...
Последний раз редактировалось omercury; 15.04.2011 в 22:11.
|
|
|
|
15.04.2011, 22:24
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Залил вашу прошивку, светодиод постоянно горит, на кратковременные нажатия не реагирует. При удержании меняется яркость. Че то не то опять
Сообщение от omercury
|
...это только начало. Дальше будет стабилизация тока через светодиод...
|
Стабилизациии не будет, только токоограничивающий резистор 0,33 Ом (аккумуляторы 3.7 вольта, светодиод: 3.4 вольта, 2.8 А (700 мА х 4) max)
Последний раз редактировалось poligon_85; 15.04.2011 в 22:29.
|
|
|
|
15.04.2011, 22:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Я у себя использую подобную конструкцию, может поможет.
Код:
|
#define ButtonPin PINB.0
#define ButtonTremor 10
#define ButtonLong 20
volatile bit ButtonPressed = 0;
volatile bit ButtonReleased = 0;
volatile bit ButtonLongPressed = 0;
volatile bit ButtonLongReleased = 0;
volatile bit ButtonPinLast = 1;
volatile unsigned char BtDelayCnt = 0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
...
BtDelayCnt++;
if (ButtonPinLast^ButtonPin) BtDelayCnt = 0;
ButtonPinLast = ButtonPin;
if (BtDelayCnt==ButtonTremor)
{
if (!ButtonPinLast)
ButtonPressed = 1;
else
ButtonReleased = 1;
}
if (BtDelayCnt==ButtonLong)
{
if (!ButtonPinLast)
ButtonLongPressed = 1;
else
ButtonLongReleased = 1;
}
...
}
int main
{
...
{
//Обработка кнопок
}
ButtonPressed = ButtonReleased = 0;
ButtonLongPressed = ButtonLongReleased = 0;
...
} |
Сильно не пинать - набросал заново, мог и ошибиться.
З.Ы. ButtonTremor и ButtonLong поставьте на свое усмотрение.
|
|
|
|
15.04.2011, 22:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от poligon_85
|
Стабилизациии не будет
|
Будет. И StepUP преобразователь будет.
PHP код:
|
#define shortkey 0x50 //80 . Константа - минимум для короткого нажатия
#define longkey 0xF0 //240. Константа - минимум для длинного нажатия
#define PWM_del 0x0F //15. Константа задержки изменения яркости
|
Поменяйте константы по своему вкусу и откомпилируйте заново. Первая задаёт время(в тактах таймера) короткого нажатия, вторая длинного. Третья регулирует скорость изменения яркости.
|
|
|
|
15.04.2011, 22:56
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
Поменяйте константы по своему вкусу и откомпилируйте заново.
|
PHP код:
|
#define shortkey 0x3C //60. Константа - минимум для короткого нажатия #define longkey 0xFE //254. Константа - минимум для длинного нажатия #define PWM_del 0x0A //10. Константа задержки изменения яркости
|
То же самое
Последний раз редактировалось poligon_85; 15.04.2011 в 22:59.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:22.
|
|