|
TSC (Touch sensing controller) на STM32F051 |
|
|
|
Sep 19 2013, 14:45
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Выполняю проект по разработке устройства. Нужно реализовать управление сенсорными кнопками. Всего кнопок 14. Контроллер использую только STM32F051. Вот схема данного устройства: http://www.picshare.ru/view/2993892/Кнопки расположены вот так: http://www.picshare.ru/view/2993980/Скачал библиотеку "STM32F0xx_STMTouch_Lib_V1.0.1" на сайте ST, но как с ней работать ума не приложу. Непонятен сам алгоритм работы, что зачем вызывать. Информации по данному контроллеру очень мало. Прошу помощи по работе с TSC под STM32F051. Кто работал с данной периферией? Есть ли рабочие примеры или документация (желательно на русском, а то с английским не очень дружу)
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Oct 11 2013, 11:00
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Непонятно как это работает: TSC->CR = (2 << TSC_CR_CTPH) | (6 << TSC_CR_CTPL) | (9 << TSC_CR_SSD) | (0 << TSC_CR_SSE) | (1 << TSC_CR_SSPSC) | (0 << TSC_CR_PGPSC) | (6 << TSC_CR_MCV) | (0 << TSC_CR_IODEF) | (0 << TSC_CR_SYNCPOL) | (0 << TSC_CR_AM) | (0 << TSC_CR_START) | (1 << TSC_CR_TSCE);
Можете объяснить как эта запись записывает значения в регистр CR? Или это такая очистка регистра?
Сообщение отредактировал silovi4 - Oct 11 2013, 11:52
|
|
|
|
|
Oct 30 2013, 09:45
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
И тишина...
|
|
|
|
|
Oct 30 2013, 15:05
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Цитата(adnega @ Oct 30 2013, 13:13)  Посмотрите поля регистра TSC->CR. Устанавливаются соответствующие значения в соответствующие поля. Что конкретно не понятно? С этим уже разобрался. Инициализация у меня проходит, т.е. я инициализировал порты и TSC. Теперь не понятно как определять касание. Я так понимаю это определяется уже в прерывании, но в Вашем коде мне не понятны некоторые переменные, откуда они берутся. Можете в двух словах объяснить как определять касание?
|
|
|
|
|
Oct 30 2013, 16:39
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(silovi4 @ Oct 30 2013, 19:05)  С этим уже разобрался. Инициализация у меня проходит, т.е. я инициализировал порты и TSC. Теперь не понятно как определять касание. Я так понимаю это определяется уже в прерывании, но в Вашем коде мне не понятны некоторые переменные, откуда они берутся. Можете в двух словах объяснить как определять касание? Исключительный матан. В двух словах: это авторский алгоритм с автокалибровкой, раскрывать желания не имею. Вам сойдет простое сравнение с порогом. Данные от TSC можно забирать так: Код tsc_val = TSC->IOGXCR[0];
|
|
|
|
|
Nov 1 2013, 12:33
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Цитата(adnega @ Oct 30 2013, 19:39)  Исключительный матан. В двух словах: это авторский алгоритм с автокалибровкой, раскрывать желания не имею. Вам сойдет простое сравнение с порогом. Данные от TSC можно забирать так: Код tsc_val = TSC->IOGXCR[0]; Спасибо хоть за это! Хотел ещё спросить: в моей схеме, та что я приложил в самом начале, я правильно подключил конденсаторы? А то я меряю осциллографом ножку PA0 на неё вообще ничего не приходит, а на PA1 идут импульсы примерно такого вида:
Сообщение отредактировал silovi4 - Nov 1 2013, 12:48
|
|
|
|
|
Nov 1 2013, 15:39
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Цитата(adnega @ Nov 1 2013, 16:52)  А данные при этом меняются? Осциллограмма очень похожа на правду. Вы про счётный регистр? Если да, то он досчитывает до максимально заданного значения при этом устанавливаются два флага (флаг ошибки и флаг завершения опроса), которые вызывают прерывание. При касании пальцем ничего не меняется.
|
|
|
|
|
Nov 4 2013, 08:10
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Цитата(silovi4 @ Nov 1 2013, 18:39)  Вы про счётный регистр? Если да, то он досчитывает до максимально заданного значения при этом устанавливаются два флага (флаг ошибки и флаг завершения опроса), которые вызывают прерывание. При касании пальцем ничего не меняется.  В общем разобрался, то я не правильно сконфигурировал порты. Данные получаются вполне адекватные. Когда не касаюсь сенсора счётный регистр показывает где-то 0x14С0, когда дотрагиваюсь - 0x17С0. Я думаю так и должно быть. Теперь мне не понятно как определять что нажата конкретная кнопка?
|
|
|
|
|
Nov 4 2013, 08:34
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(silovi4 @ Nov 4 2013, 12:10)  В общем разобрался, то я не правильно сконфигурировал порты. Данные получаются вполне адекватные. Когда не касаюсь сенсора счётный регистр показывает где-то 0x14С0, когда дотрагиваюсь - 0x17С0. Я думаю так и должно быть. Когда я делал сенсор, то числа отличались очень сильно (в разы). Цитата Теперь мне не понятно как определять что нажата конкретная кнопка? Переключением опроса кнопок по очереди.
|
|
|
|
|
Nov 4 2013, 11:43
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Цитата(adnega @ Nov 4 2013, 11:34)  Когда я делал сенсор, то числа отличались очень сильно (в разы). Кстати у меня почему-то в group2 значения очень маленькие, от 0x04 до 0x0B  Во всех остальных (при тех же настройках) вроде нормально. Цитата(adnega @ Nov 4 2013, 11:34)  Переключением опроса кнопок по очереди. Всё понял  А какой ёмкостью кондёры у вас были?
Сообщение отредактировал silovi4 - Nov 4 2013, 11:44
|
|
|
|
|
Nov 4 2013, 18:31
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 22-04-13
Пользователь №: 76 577

|
Разобрался с group 2, оказалось просто не припаял один конец кондёра. Теперь возник другой вопрос: почему на некоторых тачах (даже если тач из одной группы) значения меняются в противоположную сторону. Допустим на таче G4_IO1, когда не касаешься его, значение 0x1400, если касаешся 0x1600. А на таче G4_IO3 наоборот (при касании 0x1400, а при отпускании 0x1600). Может сталкивались с этой проблемой?
Сообщение отредактировал silovi4 - Nov 4 2013, 18:32
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|