Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
17.11.2011, 20:57
|
|
Частый гость
Регистрация: 18.06.2005
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Помогите с Touch Screen на ADS7843
Написал програмку для PIC18F452 считавает и выводит координаты нажатия Touch Screen на ADS7843 ,экранчик 320х240 точек.Но проблема если нажимать с разным усилием то выводятся разные показания.
Помогите разобраться как исключить силу нажатия?
|
|
|
Сказали "Спасибо" Sergey8870
|
|
|
17.11.2011, 21:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
А чем нажимаете, стилусом или пальцем?
При нажатии тонким стилусом показания не должны зависеть от усилия. При нажатии пальцем от усилия меняется площадь замыкания верхнего и нижнего контактных слоев и сам шейп контактной зоны, отсюда и изменения.
__________________
С уважением,
Vic / ut1wpr
|
|
|
Эти 2 пользователя(ей) сказали Спасибо ut1wpr за это сообщение:
|
|
|
17.11.2011, 21:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Вроде всё обсосано со всех сторон, но предложу свой вариант.
1. Усреднение входящих данных
2. Фильтрация одиночных выбросов (опционально, в зависимости от помех)
Сообщение от Sergey8870
|
Но проблема если нажимать с разным усилием то выводятся разные показания.
|
3. Гистерезис на нажатие/отпускание. (сила нажатия сильнее, чем отпускания)
4. Удержание курсора в одной позиции после нажатия, пока вычисляемая координата находится в пределах окна (dx, dy).
Параметры, само собой, подбираются эмпирически.
Это не вся обработка, но в итоге получилась "конфетка", на 7" 800x600 играл в сапёра не напрягаясь. Если нужен полный функционал - спрашивайте.
Последний раз редактировалось AJScorp; 17.11.2011 в 21:56.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
17.11.2011, 22:20
|
|
Частый гость
Регистрация: 18.06.2005
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Действительно вы правы при нажатии стилусом показания не меняются я нажимал пальцем. Всем большое спасибо!
|
|
|
Сказали "Спасибо" Sergey8870
|
|
|
28.08.2012, 18:03
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Помогите с драйвером для ads7843.
Первый вопрос, которыйинтреесует, как под stm32f107 настроить SPI для правильной работы контроллера тачскрина. Я постоянно получаю разные числа при нажатии на приблизительно одну и ту же область.
|
|
|
Сказали "Спасибо" Batisto4ka
|
|
|
28.08.2012, 18:05
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Batisto4ka, гуглите! Стыдно должно быть.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
28.08.2012, 19:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
А вот калибровку как делаете?
Так чтоб не привязывать конкретную панельку к конкретному дисплею.
|
|
|
|
29.08.2012, 10:29
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Сообщение от Easyrider83
|
Batisto4ka, гуглите! Стыдно должно быть.
|
Да хоть гуглите, хоть не гуглите, есть пример stm32plus, там на с++ настройки CPOL=0; CPHA=0; PSC=256. У меня при этих настройках в ответ всегда 0. Есть другой пример под stm32f103 на польском сайте, там CPOL=1; CPHA=0; PSC=256. У меня тоже не работает. А вот когда ставлю CPOL=0, CPHA=1, psc=2 или 4 -выдвет какие-то даные, но постоянно разные.Я так понимаю, при нажатии на одну и ту же точку должны быть постоянно одни и те же значения приблизительно, даже без калибровки. и должна быть какая-то связь: справа- на лево или на оборот Координата Х то возрастает, то спадает, то же с координатой У при переходе сверху вниз или наоборот.Спадать или возрастать должны даже неоткалиброванные значения, я правильно понимаю?
|
|
|
Сказали "Спасибо" Batisto4ka
|
|
|
29.08.2012, 10:45
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Ну а великий-могучий даташит ads7843.pdf? Глядя на диаграмму на стр.8, определяем, что SPI работает в режиме "SPI 0", тоесть, Idle state CKL=0, защелкивание в драйвере происходит при положительном фронте CKL, первый передаваемый бит должен выставляться контроллером на выход сразу же, до начала тактирования. Из драйвера ответ должен защелкиваться в контроллере тоже при положительном фронте CKL.
Далее, активно читаем datasheet ads7843.pdf и делаем все так, как требует даташит.
|
|
|
Сказали "Спасибо" Алекс Василич
|
|
|
29.08.2012, 11:15
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Настройка SPI
Код:
|
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_NSS= SPI_NSS_Hard;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_SSOutputCmd(SPI1, ENABLE);
SPI_Cmd(SPI1,ENABLE); |
Обработчик прерывания от PENIRQ
Код:
|
void EXTI15_10_IRQHandler (void)
{
static uint16_t tsX, tsY;
if (EXTI-›PR & (1‹‹10)) // Прерывание от EXTI5?
{ EXTI-›PR |= (1‹‹10); // Сбросить флаг EXTI5.
DelayMs(2);
if ((GPIOA-›IDR & GPIO_Pin_10)==0)
TOUCHFLAG=1;
else
TOUCHFLAG=0;
}
} |
Согласно документу Touch screen controller tips, координаты Х и У необходиом считівать до тех пор, пока предідущее прочитанное значение не станет равнім текущему.
Мои функции чтения координат
Код:
|
/*================================================= =============================================*/
uint16_t TPReadY(void) //Odczyt wartości Y z ADS7843
{
uint16_t x=0;
uint16_t predx=0;
WriteSPI(0x93);
x=WriteSPI(0x00);
x‹‹=8;
x+=WriteSPI(0x00);
x = x››3;
do
{
predx=x;
WriteSPI(0x93);
x=WriteSPI(0x00);
x‹‹=8;
x+=WriteSPI(0x00);
x = x››3;
}
while (x!=predx);
return (x);
}
/*================================================= =============================================*/
uint16_t TPReadX(void) //Odczyt wartości X z ADS7843
{
uint16_t y=0;
uint16_t predy=0;
WriteSPI(0xD3);
y=WriteSPI(0x00);
y‹‹=8;
y+=WriteSPI(0x00);
y = y››3;
do
{
predy=y;
WriteSPI(0xD3);
y=WriteSPI(0x00);
y‹‹=8;
y+=WriteSPI(0x00);
y = y››3;
}while (y!=predy);
return (y);
} |
Функция записи/чтения SPI
Код:
|
uint16_t WriteSPI(uint8_t val)
{
while(SPI1-›SR & SPI_SR_TXE==0x00);
SPI1-›DR = val;
while(SPI1-›SR & SPI_SR_RXNE==0x00);
return SPI1-›DR;
} |
main:
Код:
|
while(1)
{
if (TOUCHFLAG)
{
TOUCHFLAG=0;
T_CSCLR;
SpiDelay(10);
tsX=TPReadX();;
tsY=TPReadY();
T_CSSET;
}
}
} |
|
|
|
Сказали "Спасибо" Batisto4ka
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:07.
|
|