Управление нагрузками одной кнопкой.
- Сообщения: 217
- Зарегистрирован: Сб янв 16, 2010 15:14:57
В контроллерах я мягко говоря не очень, посему прошу помощи. Устройство должно одной кнопкой без фиксации управлять двумя нагрузками и иметь третье, неактивное состояние. Т.е при нажатии и удержании кнопки (2-3 сек) подключается одна нагрузка, при обычном, кратковременном нажатии, нагрузки должны переключаться неограниченое количество раз. И опять же при нажатии и удержании устройство должно отключиться, т.е ни одна нагрузка не должна быть подключена... Как то так...
- Реклама
я бы написал но я не знаю программирования. никак научится не могу))
А контроллер обязательно? Можно взять RC-цепочку, заряжаемую кнопкой, напряжение с нее подавать на 2 компаратора с разными порогами, выходы компараторов на 2 счетных триггера. Один триггер включает/выключает нагрузку, второй переключает. Хотя на контроллере конечно схема попроще будет.
mixon46, вы просто шедевр! 
serega-29, что конкретно не получается?
serega-29, что конкретно не получается?
Если с длительным нажатием более-менее понятно(и то, какая из двух?), то вот это:
совершенно невсасываемо.serega-29 писал(а):при обычном, кратковременном нажатии, нагрузки должны переключаться неограниченое количество раз.
Docendo discimus
- Реклама
- Сообщения: 217
- Зарегистрирован: Сб янв 16, 2010 15:14:57
без разницы, но при первоначальном включении всегда одна и та жеpyzhman писал(а):Если с длительным нажатием более-менее понятно(и то, какая из двух?)
а что тут не всасываемо? сколько раз кратковременно не нажимал бы, что б состояние нагрузок поочередно изменялось - 1-я вкл 2-я выкл, кнопочку нажал - наоборот 1-я выкл 2-я вкл и т.д.pyzhman писал(а): то вот это:совершенно невсасываемо.serega-29 писал(а):при обычном, кратковременном нажатии, нагрузки должны переключаться неограниченое количество раз.
Вы здесь известный экстрасенс, я уже не удивляюсь.

Docendo discimus
Если мне не изменяет память - DIHALT разрабатывал управление одной кнопкой...
Гляньте у него..
Гляньте у него..
Выпрямите спину и уберите левую руку от лица.
Мой Youtube канал
Мой Youtube канал
Сударь хочет код или совет?
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
ТС хочет, судя по затравке, устройство. Т.е. ящик с клеммами.
Docendo discimus
- Сообщения: 217
- Зарегистрирован: Сб янв 16, 2010 15:14:57
Закажите фрилансерам, сделают цивильно и быстро, но за деньги.
Могу гору костылей написать, но не думаю, что это хорошая идея.
Могу гору костылей написать, но не думаю, что это хорошая идея.
Господа, [url=http://google.ru/][b]это[/b][/url] - не стыдно.
Жаль.. Могу написать, только под тот, для которого смогу написатьserega-29 писал(а):Прошивку под конкретный контроллер хотелось бы...
- Сообщения: 217
- Зарегистрирован: Сб янв 16, 2010 15:14:57
Ты немного не правильно понял - мне все равно под какой контроллер, лишь бы попроще и понадежнее...Аlex писал(а):Жаль.. Могу написать, только под тот, для которого смогу написать
Проще кому ?лишь бы попроще
Могу для PIC32 написать, я как раз их изучаю
- Сообщения: 217
- Зарегистрирован: Сб янв 16, 2010 15:14:57
Так сложно? Может ну его... Старый добрый механический переключатель и проблема решена. Не так эстетично и технологично, зато дешево и практично, как говаривал небезызвестный персонаж...Аlex писал(а):Проще кому ?лишь бы попроще
Могу для PIC32 написать, я как раз их изучаюБоюсь, другие МК не потянут такую задачу
Ну вот, видите, и решение сразу само пришло 
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
НЕ ШАГУ НАЗАД!serega-29 писал(а):Может ну его... Старый добрый механический переключатель и проблема решена.
Никаких тебе переключателей..... Только вперед! К светлому будущему!
Внедрим в ближайшую пятилетку в каждый коробок по ATtiny13A !!!!!
тем более и код уже испечен (кстати времени потратил столько же, сколько на прочтение данной страницы.....)
Спойлер
Код: Выделить всё
//#######################################################################################################################
//#######################################################################################################################
//##
//## УПРАВЛЕНИЕ 2-МЯ НАГРУЗКАМИ С ПОМОЩЬЮ ОДНОЙ КНОПКИ
//##
//-----------------------------------------------------------------------------------------------------------------------
// включаемые файлы
#define F_CPU 9600000
#include <util/delay.h>
#include <avr/io.h>
//дефайны
#define BtnPIN PINB /*порт подключения кнопки*/
#define BtnLine (1<<0) /*пин подключения кнопки*/
#define LedPORT PORTB /*порт подключения светодиода*/
#define LedLine1 (1<<1) /*пин подключения светодиода*/
#define LedLine2 (1<<2) /*пин подключения светодиода*/
#define BtnShort (1<<0) /*бит короткого нажатия*/
#define BtnLong (1<<1) /*бит длинного нажатия*/
//прототипы функций
char BtnGet (void); //ф-ция опроса кнопки
//-----------------------------------------------------------------------------------------------------------------------
//Главная функция
int main (void)
{
DDRB = (LedLine1| LedLine2); //включение линий порта на вывод
PORTB = BtnLine; //включит подтяжку на кнопке
while(1) //бесконечный цикл
{
char BtnMask = BtnGet(); //опрос кнопки
if (BtnMask & BtnShort){ //проверка на короткое нажатие
if (LedPORT & LedLine1)
LedPORT = LedLine2; //если светик 1 был включен, выключить его и включить 2-й
else
LedPORT = LedLine1; //если светик 2 был включен, выключить его и включить 1-й
}
if (BtnMask & BtnLong){ //проверка на длинное нажатие
if (LedPORT & (LedLine1| LedLine2))
LedPORT = 0; //если хоть какой-то светик был включен, выключить все
else
LedPORT = LedLine1; //если оба светика были выключены, включить 1-й
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
//ФУНКЦИЯ ОБРАБОТКИ НАЖАТИЯ КНОПКИ
//ЗНАЧЕНИЕ - маска нажатой кнопки (короткое\ длинное нажатия)
char BtnGet (void)
{
//задержки обработки событий кнопки
#define BtnLockTime 30 /*время обработки дребезга в милисекундах (10-100)*/
#define BtnLongPressTime 1000 /*время фиксации длинного нажатия в милисекундах (1000 - 2500)*/
static unsigned char BtnLockBit; //защелка (защита от дребезга)
static unsigned char BtnLockCoun; //счетчик защелки (защита от дребезга)
static unsigned char BtnLongCoun; //счетчик длинного нажатия
char BtnFlags = 0; //байт флагов нажатых кнопок
_delay_ms (10); //задержка для организации частоты опроса 100Гц
if (!(BtnPIN & BtnLine)){ //клавиша нажата
if (BtnLockCoun < (BtnLockTime/10)){
BtnLockCoun++;
goto m1;
}
BtnLockBit=1; //нажатие зафиксировано
if (BtnLongCoun == (BtnLongPressTime/10))
goto m1;
BtnLongCoun ++;
if (BtnLongCoun == (BtnLongPressTime/10)){
BtnFlags |= BtnLong; //установка бита длинного нажатия (старшие 4 бита флагов ButtonByte)
}
}
else{ //клавиша отжата
if (BtnLockCoun != 0){
BtnLockCoun --;
goto m1;
}
if (! (BtnLockBit)) //отжатие зафиксировано
goto m1;
BtnLockBit =0;
if (BtnLongCoun < (BtnLongPressTime/10))
BtnFlags |= BtnShort; //установка бита короткого нажатия (младшие 4 бита флагов ButtonByte)
BtnLongCoun = 0;
}
m1: return BtnFlags;
}
//#######################################################################################################################
//####################################################################################################################### - Вложения
-
- sh.gif
- (15.35 КБ) 3982 скачивания


