реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Удержание кнопки 6 секунд
decsal
сообщение Apr 3 2009, 07:13
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 25-05-08
Пользователь №: 37 799



Подскажите с алгоримом удержания кнопки 6 секунд.
Опрос кнопок реализован, оталось сделать что бы при нажатии выводилась уставка прибора, а при удержании 6 секунд войти в меню, прибора.
Я пока сделал, что при нажатии сразу в меню попадаю, но требуют вывод уставки и 6 секунд.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Apr 3 2009, 07:28
Сообщение #2


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(decsal @ Apr 3 2009, 11:13) *
Подскажите с алгоримом удержания кнопки 6 секунд.
Опрос кнопок реализован, оталось сделать что бы при нажатии выводилась уставка прибора, а при удержании 6 секунд войти в меню, прибора.
Я пока сделал, что при нажатии сразу в меню попадаю, но требуют вывод уставки и 6 секунд.

Если кнопка нажата , то запускаете таймер на 6 секунд, далее смотрите, если кнопка отжата, а таймер еще тикает, то входим в уставку, если таймер дотикал, и кнопка все еще нажата, то входим в меню.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 3 2009, 08:55
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



можно завести счетчик нажатия и запоминать предыдущее состояние кнопок. так легко организуется разная длительность нажатия, автоповтор и т.д.

алгоритм такой (опрос оптимально делать с частотой прибл. 100 Гц, счетчик - uint8,uint16 в зависимости от нужной макс. длительности нажатия) :
Код
- прочитать текущее сост.кнопок (uint8,uint16,uint32 в зависимости от количества кнопок)
- сравнить с предыдущим :
-    если не равны - обнулить счетчик, пред.сост=тек.сост.
-    если равны -
-        счетчик++,
-        если нажата кнопка меню и счетчик=6сек - войти в меню,
-        иначе обработать другой код кнопок и длительность....


Сообщение отредактировал ukpyr - Apr 3 2009, 09:05
Go to the top of the page
 
+Quote Post
Herz
сообщение Apr 3 2009, 09:40
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



По-моему, по нажатию кнопки просто следует запускать таймер для определения времени нажатого состояния (с учётом возможного дребезга, конечно). И только после отжатия принимать решение о переходе в нужное место программы.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 3 2009, 10:00
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
И только после отжатия принимать решение о переходе в нужное место программы.
и пользоваться такой клавиатурой будет архинеудобно, пользователи будут еще долго плеваться...
Go to the top of the page
 
+Quote Post
Herz
сообщение Apr 3 2009, 10:05
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(ukpyr @ Apr 3 2009, 12:00) *
и пользоваться такой клавиатурой будет архинеудобно, пользователи будут еще долго плеваться...

Почему? А как Вы предлагаете определять нажатие на 6 сек, если переход будет осуществятся раньше? В Вашем алгоритме последняя строчка выглядит крайне расплывчато. Ведь до достижения счётчиком состояния, соответствующего 6 секундам, он пройдёт ещё множество.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 3 2009, 10:10
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



да...
пора уже коллекцию ФАКов собирать...
или ссылок на них...
чтобы заново каждый раз не вбивать...

Значит так. Проверенный самой Жизнью алгоритм.
1. По таймеру (T=1,2,5,10... ms) сканируем кнопки.
2. Если ничего не нажато, сбрасываем все флаги (эвенты)
3. Если что-то нажато, сравниваем с предыдущим состоянием.
Если совпадает, инкрементируем счётчик тиков. Если нет, сбрасываем счётчик и все флаги (дребезг)
4. Если счётчик >= задержки антидребезга, выставляем флаг KeyPressed
5. Если счётчик >= задержки залипания (1,2,6 секунд), выставляем флаг "Locked"

Итого по результатам работы имеем скан-код и набор флагов, которыми могут пользоваться любые заинтересованные процессы

Цитата(Herz @ Apr 3 2009, 13:40) *
По-моему, по нажатию кнопки просто следует запускать таймер для определения времени нажатого состояния (с учётом возможного дребезга, конечно). И только после отжатия принимать решение о переходе в нужное место программы.

Ага, у меня телефон филибз так работает. Разработчика интерфейса придушил бы собственноручно.

Вот, дарю на память...
CODE

//********************************************************************************
// Функция сканирования клавиатуры (запускается по таймеру)
// © MrYuran
//********************************************************************************
void KbrdScan()
{
if(kbrd_in & lock) // Проверяем ключ блокировки клавиатуры
{
Mode |= Locked;
kbrd_out &= ~kbrd;
}
else
{
Mode &= ~Locked;
kbrd_out |= kbrd;
}

unsigned char temp = kbrd_in&0xf0;

if((temp != 0) || (Kbrd.scanned != 0)) // что-то нажато
{
if(temp != Kbrd.scanned) // дребезг
{
Kbrd.scanned = temp;
Kbrd.PressedTime = 0;
Kbrd.pressed = 0;
}
else // вроде уже не дребезг
{
Kbrd.scanned = temp;
Kbrd.PressedTime ++; // считаем время нажатия
if(Kbrd.PressedTime == press_delay) // кнопка считается нажатой
{
if(!(Kbrd.pressed & KeyLocked)) // если не залипла
{
//Beep(50); // пикаем
Kbrd.pressed = Kbrd.scanned | KeyTick; // выставляем код кнопки и тик
//Kbrd.PressedTime = 0;
}
}
if(Kbrd.PressedTime == lock_delay) // кнопка считается залипнутой
{
Kbrd.pressed |= KeyLocked; // выставляем флаг залипания
Kbrd.PressedTime = 0;
Kbrd.pressed |= KeyTick;
}
if(Kbrd.PressedTime == lock_interval) // быстрые тики при залочке
{
if(Kbrd.pressed & KeyLocked) // если залипнута
{
Kbrd.PressedTime = 0;
Kbrd.pressed |= KeyTick;
}
}
}
}
}


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Herz
сообщение Apr 3 2009, 10:46
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(MrYuran @ Apr 3 2009, 12:10) *
Ага, у меня телефон филибз так работает. Разработчика интерфейса придушил бы собственноручно.

Не знаю про телефон "филибз", тут речь идёт вроде об одной кнопке. Вы всё правильно пишете:
Цитата
Итого по результатам работы имеем скан-код и набор флагов, которыми могут пользоваться любые заинтересованные процессы
, но как предполагаете принимать решения о событии до того, как оно произошло? Не станете ведь отрицать, что о времени, которое была нажата кнопка, можно судить лишь по её отжатию? rolleyes.gif
(Если это нужно, конечно). То бишь, залипнет ли кнопка - заранее неизвестно...
Go to the top of the page
 
+Quote Post
adc
сообщение Apr 3 2009, 11:18
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Herz @ Apr 3 2009, 13:46) *
Не знаю про телефон "филибз", тут речь идёт вроде об одной кнопке. Вы всё правильно пишете:
, но как предполагаете принимать решения о событии до того, как оно произошло? Не станете ведь отрицать, что о времени, которое была нажата кнопка, можно судить лишь по её отжатию? rolleyes.gif
(Если это нужно, конечно). То бишь, залипнет ли кнопка - заранее неизвестно...


По отпусканию кнопки неудобно! Представте пользователя.. он нажал кнопку.. и ждет перехода в режим меню.. и думает -"прошло ли 6секунд или нет? можно ли отпускать клавишу?"... И что?
А если после нажатия считать интервал времени. Если прошло 6 секунд, а кнопка нажата то переходить в меню. Если отпустили раньше другое действие. Защита от залипания так: прошло , к примеру, 12секунд а кнопа нажата.. то ахтунг и т.д.
Причина редактирования: Устранение дублирования в содержании сообщения.


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 3 2009, 12:02
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
MrYuran
не нужно никаких флагов, состояние клавиатуры однозначно определяется текущим и предыдущим состоянием битов клавиш и счетчиком текущего состояния (антидребезг, задержка и автоповтор получаются автоматически) :
CODE

kbd_buf[1] = kbd_rd(); // читаем текущее сост.клавиш

if (kbd_buf[2] != kbd_buf[1]) { // сравнение с предыдущим - не равно
kbd_buf[2] = kbd_buf[1]; // запомнить тек.состояние
kbd_pr_cnt = 0; // обнулить счетчик
} else { // состояние не изменилось - обработать
if (kbd_pr_cnt < KBD_PR_MAX) kbd_pr_cnt++; // нет переполнения - увеличить счетчик
U8 kbd_co = kbd_buf[1]; // код клавиш - в локальную переменную для ускорения сравнений

if ((kbd_pr_cnt >= KBD_PR_EXIT)&&(kbd_co == KBD_CO_NONE)) {
// кнопки долго не нажимались - авто возвр. в пред.сост.индикации
ind_param = 0;
} else if ((kbd_pr_cnt == KBD_PR_SHORT)&&(kbd_co == KBD_CO_UP)) {
// кнопка +, короткое нажатие - увеличить параметр
if (ind_param == (IND_PA_MAX_NORMAL - 1)) ind_param = 0; else ind_param++;
} else if ((kbd_pr_cnt >= KBD_PR_SHORT)&&(kbd_co == KBD_CO_CORR)) {
// кнопка коррекции, короткое нажатие
cli();
if (rtc.min > 30) {
rtc.sec = 59;
rtc.min = 59;
} else {
rtc.sec = 0;
rtc.min = 0;
}
sei();
ind_param = 0;
} else if ((kbd_pr_cnt == KBD_PR_SHORT)&&(kbd_co == KBD_CO_SETUP)) {
// кнопка настройки, короткое нажатие - перейти в режим настройки
ind_param = 0;
ind_mode = IND_MO_SETUP;
} else if ((kbd_pr_cnt == KBD_PR_SETUPEXT)&&(kbd_co == KBD_CO_SETUP)) {
// кнопка настройки, длинное нажатие - перейти в режим расширенной настройки
} else if ... { // и так далее....
}
}
}
Причина редактирования: Уменьшение размера цитаты исходника.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Apr 3 2009, 12:04
Сообщение #11


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(adc @ Apr 3 2009, 15:18) *
По отпусканию кнопки неудобно! Представте пользователя.. он нажал кнопку.. и ждет перехода в режим меню.. и думает -"прошло ли 6секунд или нет? можно ли отпускать клавишу?"... И что?
А если после нажатия считать интервал времени. Если прошло 6 секунд, а кнопка нажата то переходить в меню. Если отпустили раньше другое действие. Защита от залипания так: прошло , к примеру, 12секунд а кнопа нажата.. то ахтунг и т.д.

Самое смешное, что вы как раз и будете производить действие по отжатию smile.gif Кроме того если у вас прошло 6 сек., то вы смотрите 6 сек прошло - да, кнопка нжата - да, и переходите в меню. Тут другой вопрос, если в меню используется таже кнопка, то тогда надо на какое то время надо отрубать действие кнопки иначе получится фигня.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 4 2009, 14:54
Сообщение #12


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Stanislav_S @ Apr 3 2009, 15:04) *
Самое смешное, что вы как раз и будете производить действие по отжатию smile.gif Кроме того если у вас прошло 6 сек., то вы смотрите 6 сек прошло - да, кнопка нжата - да, и переходите в меню.


Этот момент надо обустроить так: при нажатии на кнопку должно выводиться какое-либо сообщение, типа "НА! нажатая я!" а потом, после злополучных 6 секунд тихо переходить в меню и ждать отпускания (залипшей) кнопки. А если юзер отпустил кнопку раньше - сообщение убрали. Имхо, конечно.
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 4 2009, 21:02
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Внесу свои 5 копеек. Поскольку как я понял у топикстартера кнопок несколько, то имеет смысл делать функции кнопок не на задержках, а на комбинации нажатий кнопок. Правда схемотехникой подключения клавиатуры должна обеспечиваться возможность распознавания одновременного нажатия нескольких кнопок.
Я недавно в одном простеньком проекте "реле с таймером" на трех кнопках реализовывал пять различных скан-кодов. Две кнопки "↑" и "↓" в обычном режиме генерировали коды нажатий. Причем с автоповтором. А третья кнопка ("УСТ") генерировала код отпускания и одновременно служила кнопкой ALTернативной функции. Т.е. комбинации нажатой "УСТ" с нажатиями какой-либо из первых двух генерировали еще два дополнительных скан-кода нажатия: функции "запомнить" и "сохранение".
Кстати, а в другом проекте, где каждая из 14 кнопок, должна была иметь возможность генерировать автоповтор независимо от других, я делал иначе. Снималась матрица состояний кнопок. После устранения дребезга определялся факт нажатия и фиксировался момент времени нажатия для каждой кнопки. "Очищенная" от дребезга матрица состояний выдавалась "наружу". А по истечении определенного интервала времени, которое опять же индивидуально для каждой кнопки, соответствующие биты "выходной" матрицы состояний инвертировались до тех пор, пока соответствующий бит "на входе" функции, соответствовал нажатой кнопке.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Apr 4 2009, 21:07
Сообщение #14


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(_Pasha @ Apr 4 2009, 18:54) *
Этот момент надо обустроить так: при нажатии на кнопку должно выводиться какое-либо сообщение, типа "НА! нажатая я!" а потом, после злополучных 6 секунд тихо переходить в меню и ждать отпускания (залипшей) кнопки. А если юзер отпустил кнопку раньше - сообщение убрали. Имхо, конечно.

у него вместо сообщения должна выводится уставка, хотя... хотя.. вы правы, ведь эту уставку можно сделать мигающей например..
to rezident
вы предложили как раз самое правильное решение, если кнопка не одна конечно...


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 09:52
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Ребят, а подскажите, как лучше сделать обработку действия кнопки? Я взял за основу алгоритм от MrYuran , http://electronix.ru/forum/index.php?showt...st&p=571913 . У меня пока что три кнопки (учусь на них), без матрицы.
Я хочу, чтобы у меня была процедура опроса кнопок (вызывается, скажем, каждые 10мс). Она отвечает за выставление флагов "Нажато", "Долго нажато" и выдаёт биты того, что нажато.
Но меня смущает, что это чудо занимает уже под 100 байт кода, и 5 регистров. Всего для 3х кнопок.

Направьте на мысль, как бы обойти такую ситуацию в интерфейсе пользователя: скажем, юзер нажал кнопку, уставка увеличилась. А он кнопку отпускает и держит пальцем (естессно, что мы обработали нажатие один раз). Пока что я вручную скидываю бит нажатой кнопки после того, как обработал её нажатие. А при определении "Долго нажата" снова ставлю бит нажатой кнопки и флаг LOCKED.

И ещё вопрос - как лучше оформлять данные, возвращаемые процедурой сканирования клавиатуры? Как умные делают?
В идеале я хочу получать и обрабатывать состояния: Нажата, Долго нажата, Отпущена. Автоповтор пока не нужен.

У меня пока что флаги PRESSED и LOCKED стоят битами (на все кнопки), и ещё есть биты, которые показывают нажатие каждой кнопки.
Может, завести для каждой клавиши свой набор флагов? blink.gif
З.Ы. Пишу на АСМе, на Си мне вообще ни черта не понятно

Сообщение отредактировал C.S. - May 7 2009, 09:53
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 7 2009, 10:36
Сообщение #16


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(C.S. @ May 7 2009, 13:52) *
У меня пока что флаги PRESSED и LOCKED стоят битами (на все кнопки), и ещё есть биты, которые показывают нажатие каждой кнопки.
Может, завести для каждой клавиши свой набор флагов? blink.gif

У меня был один набор флагов на всю клавиатуру (4 кнопки).
Комбинации одновременных нажатий максимум из 2-х кнопок (больше нажать затруднительно smile.gif ).
Все кнопки заведены на один порт, соответственно скан-код - общий на все кнопки. Фактически это состояние порта с наложенной маской в 4 бита.
Любое изменение кода (нажатие/отжатие кнопок) воспринимается как дребезг и сбрасывает флаги.

Если кнопки полностью автономные и нужно их обсчитывать по отдельности, тогда нужно для каждой свой набор флагов.

Цитата(C.S. @ May 7 2009, 13:52) *
З.Ы. Пишу на АСМе, на Си мне вообще ни черта не понятно

Вот это зря... Что непонятно...
А насчёт 100 байт - что такое 100 байт в масштабах галактики!
Иногда лишний флажок компилятора помогает утоптать код на несколько кил


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 11:45
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Значит, я мыслю верно, но туплю насчёт моментов нажатия и отпускания.
1. Определили нажатие кнопки.
2. Считаем счётчик. По достижении защиты от дребезга выставим информацию "Кнопка ХХ нажата"
3. Считаем дальше. Досчитали до какого-то значения, выставляем информацию "Кнопка ХХ нажата долго"
4. Определили отпускание. Ставим информацию "Кнопка ХХ отпущена".

Основная программа, как мне видится, должна работать так:
Найден флаг "Кнопка ХХ нажата" -> скинули флаг (чтобы не пройти это услвие второй раз), обработали реакцию на нажатие
Аналогично с "Кнопка ХХ нажата долго" и с "Кнопка ХХ отпущена".

То-есть, по моей логике получается три варианта флагов. Меня смущает само мышление - так вообще люди делают? Я могу завести тогда (пока мало кнопок) - три регистра, по числу кнопок, и в каждом битами ставить свои флаги?

З.Ы. Хм, а что такое 100 байт в масштабах меги 8? wink.gif
Пока писал на АСМе, и никак не могу представить СИ в МК - он как-то тут неявно... в асме всё чётко - LDI Rx, 123. А в СИ это как-то непривычно.

В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил.
При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 7 2009, 12:19
Сообщение #18


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(C.S. @ May 7 2009, 15:45) *
В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил.
При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается.

Вот в том куске, который я выкладывал, есть ещё флажок "Key_Tick", который выставляется для вызова обработчика кнопки.
Идея была такая. Например, при коротких нажатиях на кнопки "Вверх/Вниз" нужно было изменять параметр на 1. После залипания (через 1с) должна начинаться быстрая "прокрутка" (10 тиков в секунду).
Соответственно, сделал так:
После антидребезговой паузы ставлю первий "тик".
После залочки тики следуют с уменьшенными интервалами.
По каждому тику вызывается обработчик, в конце которого Key_Tick сбрасывается.
Ну и вообще комбинацией этих флагов можно описать практически любую ситуацию.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 12:55
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Посмотрите пожалуйста алгоритм, если не сложно, на предмет камней. Нарисовал на примере одной кнопки.
Прикрепленный файл  KeyScan.pdf ( 93.93 килобайт ) Кол-во скачиваний: 344
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 7 2009, 17:49
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



в аттаче - файл keyboard.c все Ваши проблемы там решены.
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 17:56
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Спасибо! Сейчас посмотрю, поразбираюсь.
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 10 2009, 00:46
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 10 2009, 06:10
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(C.S. @ May 10 2009, 04:46) *
2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?

да, так и задумано...
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 10 2009, 23:24
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(C.S. @ May 10 2009, 04:46) *
2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?

Надеюсь, Вы заметили что эта строка относится к автоповтору, а не к фиксации удержанного нажатия клавиши?
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 11 2009, 14:45
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Да, конечно. Интересно это всё на асм переводить %)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 11 2009, 17:49
Сообщение #26


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(C.S. @ May 11 2009, 18:45) *
Да, конечно. Интересно это всё на асм переводить %)

ОХ! вот, оказываеттся, чем Вы занимаетесь! Сказали бы - я тихо бы молчал... У Вас, я понимаю, времени еще много впереди?
А попробовать свою задачу на С изобразить времени нет?
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 12 2009, 07:59
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



*стало стыдно* Я делаю для себя. Знаю, что на профессиональный уровень не выйду. Наверное, интересно повозиться.
Хочу в итоге получить управляемый диммер. Пока вожусь на Меге8 (то, что было) - думаю, туда СИ и реалтайм под диммер не влезут просто.
Зато, в принципе, переводя, можно поучиться и оптимизировать и понимать, что происходит в проце.
Хотя, конечно, я могу быть старомодным... ибо лет 5 назад возился с MCS51, потом забросил.

В любом случае спасибо. Постараюсь не поднимать флуд на тему СИ vs ASM
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 12 2009, 09:24
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата
Я делаю для себя

Если Вы заметили, этот проект, что отдан на растерзание - тоже сделан для себя, для радиолюбительских целей.
С желанием повозиться поспорить не могу, но вот этим проектом я вожусь уже довольно долго - около двух лет - и желание дорабатывать и менять его не зависит от языка. Просто "возня" переходит на другой уровень - на функциональность, на ясность кода, на то, что доставляет больше удовольствия - в конце концов на пользование готовыми изделиями.

Я возился со всем (почти со всем) кроме mcs51. И работающее изделие на новом для меня AVR появилось за несколько часов после того, как я принес домой первый купленный мною в магазине ATMega162 и спаял stk200. С ассемблером разбираться не стал - а просто засунул в него один из старых проектов для Intel386.

Сообщение отредактировал Genadi Zawidowski - May 12 2009, 09:26
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 12 2009, 09:36
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Вас понял. В следующих девайсах попробую на СИ. Хотя асм кое-где интереснее... все же.
Ну это, как и на компе. Если надо пару кнопочек - то берём, скажем, VB. Если точность и быстроту - например VC++. Что-то среднее - дельфи.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 12 2009, 09:58
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Genadi Zawidowski @ May 12 2009, 13:24) *
... а просто засунул в него один из старых проектов для Intel386.

Если не секрет, как Вам это удалось?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 12 2009, 12:39
Сообщение #31


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(C.S. @ May 12 2009, 11:59) *
думаю, туда СИ и реалтайм под диммер не влезут просто.

Да ладно вам, какой в диммере релтайм?
Один раз настроить таймер и пусть сам лупит до посинения

А насчёт си... вот я толькочто по наводке товарищей наискосок прочитал про форт (forth) и прям-таки загорелся попробовать.
Жалко только, что чисто для себя, ибо использование такой экзотики для работы не прокатит однозначно.
Ибо коллеги мыслят категориями фреймворков и разных обшарпанных технологий

Прикрепленный файл  _________________________________1.pdf ( 90.44 килобайт ) Кол-во скачиваний: 251

Вот, например, описывается своеобразный макро или даже метаассемблер


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 12 2009, 15:06
Сообщение #32


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(VladimirYU @ May 12 2009, 13:58) *
Если не секрет, как Вам это удалось?

Результат, собственно, и выложен был в этой теме. Обычное дело для C-шных проектов. Сейчас в нем осталось только ATMega и AT91SAM7S, i386 остался "за кадром".
В том не использовалось ничего из специфической периферии - только ввод с выводом через паралельные порты - потому легко м перенеслось. Да, и библиотека целочисленной арифметики с произвольной длинной операндов была заменена на typedef unsigned long long phase_t;

Сообщение отредактировал Genadi Zawidowski - May 12 2009, 15:07
Go to the top of the page
 
+Quote Post
rezident
сообщение May 12 2009, 16:41
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Сообщение модератора. Уважаемые, пользователи! Придерживайтесь, пожалуйста, темы, обозначенной в корневом сообщении топика, и не начинайте очередной "холиварной" темы C vs ASM или C vs Foth.
Go to the top of the page
 
+Quote Post
C.S.
сообщение Jun 7 2009, 18:36
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



Цитата(Genadi Zawidowski @ May 7 2009, 21:49) *
в аттаче - файл keyboard.c все Ваши проблемы там решены.

Ну шо. Докладываю - добрался до своей насчастной меги, закодил. Запахало. Дальше буду ловить логические глюки:
1. Если удерживать одну кнопку, нажать вторую, то автоповтор работает для первой.
2. Хотелось бы, чтобы нажатие было сразу при нажатии кнопки..., а не при отпускании. Так конечно визуальнее удобнее. Пока тестирую на светодиодах.
Спасибо за помощь. Буду дорабатывать.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Jun 7 2009, 19:06
Сообщение #35


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Пока вожусь на Меге8 (то, что было) - думаю, туда СИ и реалтайм под диммер не влезут просто.
мда... у меня в М8 влез 4х-канальный диммер на 3х фазах (программный, не на аппаратных ШИМах) + 12-разр.дин.индикация + Modbus 56K + 1-Wire DS18b20 (правда с его дурацким протоколом пришлось повозиться чтобы обмен не мешал всему остальному) + измерения нескольких каналов АЦП. на AVR-GCC. 8 Кбайт - это КУЧА памяти.
Цитата
Ну шо. Докладываю - добрался до своей насчастной меги, закодил. Запахало. Дальше буду ловить логические глюки:
1. Если удерживать одну кнопку, нажать вторую, то автоповтор работает для первой.
2. Хотелось бы, чтобы нажатие было сразу при нажатии кнопки..., а не при отпускании. Так конечно визуальнее удобнее. Пока тестирую на светодиодах.

уже было : http://electronix.ru/forum/index.php?showt...mp;#entry571961
и автроповтор, и задержка, и подавление дребезга, и обрабтка любых комбинаций кнопок реализуются двумя переменными - битовой маской нажатых клавиш и счетчиком нажатия. и никаких доп.флагов. подумайте над алгоритмом, там все просто.

Сообщение отредактировал ukpyr - Jun 7 2009, 19:12
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01689 секунд с 7
ELECTRONIX ©2004-2016