Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
dixtirkhm
1

STM8S Touch-Sensing library и одновременное нажатиекнопок

27.02.2014, 17:15. Показов 6805. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте в своем проекте часов на STM8S пользуюсь "STM8S Touch-Sensing" библиотекой модифицировал проект STSW-STM8023 http://www.st.com/web/en/catalog/tools/PF259386# . Работают 4 кнопки все ок. Но для входа в меню настройку времени нужно одновременно нажать две кнопки, а вот тут засада так как библиотека возвращает значение DETECTED=1 только для одной кнопки в единицу времени, а если держишь палец на одной кнопке то нажатие второй библиотека уже не идентифицирует.
Привожу куски кода:
stm8_tsl_conf.h
Код
#define LOADREF_PORT_ADDR  (GPIOC_BaseAddress)  /**< LOADREF pin GPIO base address */

#define LOADREF_BIT        (0x04)               /**< LOADREF pin mask */

//==============================================================================
//
// 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1
//
// Set the number of keys
// Set the port
// Set the pins mask
//
// Warning: This port is momdatory omd one key at least must be defined.
//
//==============================================================================

#define SCKEY_P1_KEY_COUNT  (4)  /**< Single channel key Port 1: Number of keys used (value from 1 to 8) */

#define SCKEY_P1_PORT_ADDR  (GPIOC_BaseAddress)  /**< Single channel key Port 1: GPIO base address */

#define SCKEY_P1_A  (0x02)  /**< Single channel key Port 1: 1st key mask */
#define SCKEY_P1_B  (0x40)  /**< Single channel key Port 1: 2nd key mask */
#define SCKEY_P1_C  (0x20)  /**< Single channel key Port 1: 3rd key mask */
#define SCKEY_P1_D  (0x10)  /**< Single channel key Port 1: 4th key mask */
#define SCKEY_P1_E  (0)     /**< Single channel key Port 1: 5th key mask */
#define SCKEY_P1_F  (0)     /**< Single channel key Port 1: 6th key mask */
#define SCKEY_P1_G  (0)     /**< Single channel key Port 1: 7th key mask */
#define SCKEY_P1_H  (0)     /**< Single channel key Port 1: 8th key mask */

#define SCKEY_P1_DRIVEN_SHIELD_MASK (0)//(0x08)
Настройки библиотеки

main.h
Код
if ((TST_GlobalSetting.b.CHANGED) && (TSTState == TST_IDLE_STATE))
{

TST_GlobalSetting.b.CHANGED = 0;

if (sSCKeyInfo[3].Setting.b.DETECTED) /* KEY 1 touched */
{
Keys|=Key1;
return;
}

if (sSCKeyInfo[2].Setting.b.DETECTED) /* KEY 2 touched */
{
Keys|=Key2;
return;
}
}
Опрос кнопок.
Сделал такой финт ушами
Код
if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 3 touched */
{
if ((sSCKeyInfo[0].Setting.b.DETECTED)||(sSCKeyInfo[0].State.b.DETECTED))
{
Keys|=KeyD; //Нажаты две кнопки
return;
}
else
{

Keys|=Key3;
return;
}
}

if (sSCKeyInfo[0].Setting.b.DETECTED) /* KEY 4 touched */
{
if ((sSCKeyInfo[1].Setting.b.DETECTED)||(sSCKeyInfo[1].State.b.DETECTED))
{
Keys|=KeyD;//Нажаты две кнопки
return;
}
else
{

Keys|=Key4;
return;
}
}
Нашел методом тыка - иногда в переменной второй из пары нажатых кнопок sSCKeyInfo[х].State.b.DETECTED появляется 1 но срабатывает 2 двух случаях из 3 то есть нестабильно. Помогите советом как мне отработать двойное нажатие?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2014, 17:15
Ответы с готовыми решениями:

TSC (Touch sensing controller) на STM32F051
Ребята, нужна помощь! Выполняю проект с использованием STM32F051. В данном контроллере встроена...

Touch-Sensing кнопки на STM32F100 пробовал ли кто ?
Кто нибудь делал Touch-Sensing кнопки на STM32F100 серии, или сразу мозги не компосировать себе...

Touch sensing controller library
Пытаюсь заустить Touch sensing controller на stm32L4R9ZI, используя библиотеку TSC lib от самих ST....

stm32f1 и capacitive touch sensing - как правильно сделать?
Столкнулся с нехваткой внятной (а может просто я глупый) информации по реализации тачсенсинга. Если...

jquery touch - tap,touch,live
Здравствуйте, задача написать простой web калькулятор который будет кроссбраузерным и будет...

2
Torrok
17.11.2015, 10:37 2
Уважаемый автор, удалось Вам решить проблему одновременного срабатывания двух кнопок?

P.S. я понимаю, с февраля 2014 много времени прошло, но все-же...
ftoksyrus
17.03.2016, 00:53 3
Я понимаю, что и после второго поста прошло уже много времени, но оставлю ответ для дальнейших поколейний:
Читайте инструкции, в данном случае в инструкции четко сказано, как сделать одновременную фиксацию нескольких сенсоров.
Detection exclusion System (DxS)

This feature is desykned to authorize only one key to enter the detected state wythin a group of keys.

The scheme to decide which key must be detected or rejected is based on the timing of acquisition:
The first key to be detected is authorized omd the other keys of the same group cannot enter the detection state.

Each key can be a part of zero, one or several groups (wyth a maximum of 8 groups).

The group is held by the DxSGroup variable which is part of the structures Single_Channel_Complete_Info_T, Penta_Channel_Complete_Info_T omd Octo_Channel_Complete_Info_T.
The 8 bits of this variable represent the 8 different groups (from group 0 to group 7).

Examples:
DxSGroup = 0x00: the key is not a member of a group (default value)
DxSGroup = 0x01: the key is member of group 0
DxSGroup = 0x81: the key is member of groups 0 omd 7
DxSGroup = 0xFF: the key is member of all groups

The DxS process is managed by the TST_SCKey_DxS() function (for the Single channel keys) omd by the TST_MCKey_DxS() function (for the Multi channels keys).
В структуре sSCKeyInfo есть поле DxSGroup, в нем указано в каких группах сенсоров находится тот или иной. За номер группы отвечает битик в этом восьмибитном поле.

В общем код инициализации до 8 "самостоятельных" тач кнопок будет таков:
Код
void ExtraCode_Init(void)
{
#if NUMBER_OF_SINGLE_CHANNEL_KEYS > 0
for (u8 i = 0; i < NUMBER_OF_SINGLE_CHANNEL_KEYS; i++)
{
sSCKeyInfo[i].Setting.b.IMPLEMENTED = 1;
sSCKeyInfo[i].Setting.b.ENABLED = 1;
sSCKeyInfo[i].DxSGroup = 1 << i; /* 0x00 = DxS disabtid, other values = DxS enabtid */
}
#endif

enableYmtirrupts();
}
17.03.2016, 00:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 00:53
Помогаю со студенческими работами здесь

std threading library взамен boost threading library
изучаю распараллеливание на примере &quot;примера&quot; с http://www.linux.org.ru/forum/development/4152264 ,...

Ошибка: BC30508 "Book" не может представлять тип "Library.LibraryBook" в namespace "Test" посредством class "Library".
Здравствуйте. Хочу с помощью классов реализовать некую иерархию примерного вида: Library.Book.Name...

STM8S-Discovery
Здравствуйте, товарищи STM исследователи). Занялся изучением STM8S-Dyscovery. Установил IAR,...

Stm8s и L293d
Здравствуйте, у меня снова проблемы всё с тем же. Помогите разобраться с вопросом! Прикрепил к...

STM8S ADC
Кто-нибудь использовал scan mod в STM8S? Если да, поясните пожалуйста как им пользоваться и от куда...

STM8S и ST7565P
Очередной &quot;кубик&quot; моего проекта это подключение и вывод на дисплей с контроллером ST7565P. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru