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

 
 
> TSC (Touch sensing controller) на STM32F051
silovi4
сообщение Sep 19 2013, 14:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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. Кто работал с данной периферией? Есть ли рабочие примеры или документация (желательно на русском, а то с английским не очень дружу)
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
silovi4
сообщение Oct 10 2013, 11:39
Сообщение #16


Участник
*

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



И всё таки проблема с CooCox-ом. В Keil-е всё отлично устанавливается и сбрасывается. Так что буду копать дальше. 08.gif
Go to the top of the page
 
+Quote Post
silovi4
сообщение Oct 11 2013, 11:00
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
silovi4
сообщение Oct 30 2013, 09:45
Сообщение #18


Участник
*

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



И тишина...
Go to the top of the page
 
+Quote Post
adnega
сообщение Oct 30 2013, 10:13
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(silovi4 @ Oct 11 2013, 15:00) *
Непонятно как это работает:
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? Или это такая очистка регистра?

Посмотрите поля регистра TSC->CR. Устанавливаются соответствующие значения в соответствующие поля. Что конкретно не понятно?
Go to the top of the page
 
+Quote Post
silovi4
сообщение Oct 30 2013, 15:05
Сообщение #20


Участник
*

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



Цитата(adnega @ Oct 30 2013, 13:13) *
Посмотрите поля регистра TSC->CR. Устанавливаются соответствующие значения в соответствующие поля. Что конкретно не понятно?

С этим уже разобрался. Инициализация у меня проходит, т.е. я инициализировал порты и TSC. Теперь не понятно как определять касание. Я так понимаю это определяется уже в прерывании, но в Вашем коде мне не понятны некоторые переменные, откуда они берутся. Можете в двух словах объяснить как определять касание?
Go to the top of the page
 
+Quote Post
adnega
сообщение Oct 30 2013, 16:39
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(silovi4 @ Oct 30 2013, 19:05) *
С этим уже разобрался. Инициализация у меня проходит, т.е. я инициализировал порты и TSC. Теперь не понятно как определять касание. Я так понимаю это определяется уже в прерывании, но в Вашем коде мне не понятны некоторые переменные, откуда они берутся. Можете в двух словах объяснить как определять касание?

Исключительный матан. В двух словах: это авторский алгоритм с автокалибровкой, раскрывать желания не имею.
Вам сойдет простое сравнение с порогом. Данные от TSC можно забирать так:
Код
tsc_val = TSC->IOGXCR[0];

Go to the top of the page
 
+Quote Post
silovi4
сообщение Nov 1 2013, 12:33
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 1 2013, 13:52
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(silovi4 @ Nov 1 2013, 16:33) *
Спасибо хоть за это! Хотел ещё спросить: в моей схеме, та что я приложил в самом начале, я правильно подключил конденсаторы? А то я меряю осциллографом ножку PA0 на неё вообще ничего не приходит, а на PA1 идут импульсы примерно такого вида:

Прикрепленное изображение

А данные при этом меняются?
Осциллограмма очень похожа на правду.
Go to the top of the page
 
+Quote Post
silovi4
сообщение Nov 1 2013, 15:39
Сообщение #24


Участник
*

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



Цитата(adnega @ Nov 1 2013, 16:52) *
А данные при этом меняются?
Осциллограмма очень похожа на правду.

Вы про счётный регистр? Если да, то он досчитывает до максимально заданного значения при этом устанавливаются два флага (флаг ошибки и флаг завершения опроса), которые вызывают прерывание. При касании пальцем ничего не меняется. sad.gif
Go to the top of the page
 
+Quote Post
silovi4
сообщение Nov 4 2013, 08:10
Сообщение #25


Участник
*

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



Цитата(silovi4 @ Nov 1 2013, 18:39) *
Вы про счётный регистр? Если да, то он досчитывает до максимально заданного значения при этом устанавливаются два флага (флаг ошибки и флаг завершения опроса), которые вызывают прерывание. При касании пальцем ничего не меняется. sad.gif

В общем разобрался, то я не правильно сконфигурировал порты. Данные получаются вполне адекватные. Когда не касаюсь сенсора счётный регистр показывает где-то 0x14С0, когда дотрагиваюсь - 0x17С0. Я думаю так и должно быть. Теперь мне не понятно как определять что нажата конкретная кнопка?
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 4 2013, 08:34
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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

Когда я делал сенсор, то числа отличались очень сильно (в разы).
Цитата
Теперь мне не понятно как определять что нажата конкретная кнопка?

Переключением опроса кнопок по очереди.
Go to the top of the page
 
+Quote Post
silovi4
сообщение Nov 4 2013, 11:43
Сообщение #27


Участник
*

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



Цитата(adnega @ Nov 4 2013, 11:34) *
Когда я делал сенсор, то числа отличались очень сильно (в разы).

Кстати у меня почему-то в group2 значения очень маленькие, от 0x04 до 0x0B sad.gif Во всех остальных (при тех же настройках) вроде нормально.
Цитата(adnega @ Nov 4 2013, 11:34) *
Переключением опроса кнопок по очереди.

Всё понял rolleyes.gif

А какой ёмкостью кондёры у вас были?

Сообщение отредактировал silovi4 - Nov 4 2013, 11:44
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 4 2013, 13:37
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(silovi4 @ Nov 4 2013, 15:43) *
А какой ёмкостью кондёры у вас были?

вроде, 100нФ.
Go to the top of the page
 
+Quote Post
silovi4
сообщение Nov 4 2013, 18:31
Сообщение #29


Участник
*

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



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

Сообщение отредактировал silovi4 - Nov 4 2013, 18:32
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 4 2013, 19:48
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(silovi4 @ Nov 4 2013, 22:31) *
Теперь возник другой вопрос: почему на некоторых тачах (даже если тач из одной группы) значения меняются в противоположную сторону. Может сталкивались с этой проблемой?

Такого не должно быть. При касании значение должно уменьшаться (т.к. переносимый заряд увеличивается
и для достижения порога нужно меньше иттераций). Где-то неправильно инициализируете.
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 Текстовая версия Сейчас: 18th July 2025 - 09:28
Рейтинг@Mail.ru


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