Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/136: Рейтинг темы: голосов - 136, средняя оценка - 4.80
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
1

STM32F4Discovery + Touchscreen XPT2046

12.07.2013, 22:46. Просмотров 24745. Ответов 19
Метки нет (Все метки)

Привет всем.
Есть у меня вот такой ардуиновский прибамбас - http://www.ebay.com/itm/3-2-tft-lcd-shi ... 3f1732d12e Тачконтроллер там XPT2046 (хоть китайцы в архивах дают pdf-ник на ADS7843. Хоть вроде по командам и по логике работы они туда-сюда-обратно совместимые).
Но вместо ардуины у меня STM32F4Dyscovery.
Дисплей я подключил, там всё нормально. А вот с тачем у мене проблемы :( .
Вроде живой, читается, возвращает не нули (как у многих по жалобам на форумах), но читает хрен знает что ...
Никак не могу поймать никаких закономерностей в его показаниях. Не говоря уж о привязке его показаний к координатам дисплея.

Та же точно байда наблюдается с ADS7843, который я сам припаял к голому тачу на другом дисплее, на ILI9420, из которого только X+, X-, Y+, Y- торчат.

Перерыл тонну исходников, примеров, усреднений кучу делал, из ардуины выдирал - а, всё до лампочки. Мусор он и в Африке мусор.

Прилагаю пока только исходники к тачу, если надо, выложу всё. Оно под кокос.
Посмотрите, кто может. У меня уже башка не варит за 3 дня колупаний в нём ...

Спасибо.

PS.
Да, где-то читал, что аппаратный SPI STM32 слишком быстрый для этого контроллера и лучше делать ногодрыг. Пока не пытался.

[3.29 Кб]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2013, 22:46
Ответы с готовыми решениями:

STM32F103 + XPT2046
Буду признателен если поделитесь рабочей библиотекой для touch на контроллере XPT2046 Отладочная...

touchscreen не вызывает WM_NOTIFICATION_RELEASED в emWin
При нажатии на кнопку на экране, библиотека вызывает только событие WM_NOTIFICATION_CLICKED. Все...

STM32F4Discovery
Доброго времени суток... Возникло желание запустить внешний ЦАП (CS43L22) на указанной плате......

STM32F4DISCOVERY
Здравствуйте ! Подскажите пожалуйста для чего нужны модули на странице ...

ЦАП на STM32F4DISCOVERY
Накидайте пожалуйста примеров по работе с цап без DMA, очень интересует генерация треугольного или...

19
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
12.07.2013, 23:59 2
Цитата Сообщение от hd44780
PS.
Да, где-то читал, что аппаратный SPI STM32 слишком быстрый для этого контроллера и лучше делать ногодрыг. Пока не пытался.
Ох уж эти сказочники...
Здесь рабочий драйвер https://github.com/OmdriyFursov/AFGUI/b ... /ads7843.c
Причем здесь же уже светился . http://we.iosyitistromyss.ru/STM32/gui- ... istem.html
Правда пришлось вытереть на SPL , да заработал только с адресами 0x90 и 0xD0 .
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
13.07.2013, 13:41 3
Да, спасибо. Забыл я как-то о нём..

Короче, помог только 16-битный режим SPI. На 8-битном режиме мусор, хоть я и читал 2 байта по очереди. Как оно на AVR-ах работает не пойму, там же только 8-битный есть :(. Ну да хрен с ним.

Сейчас чётко видны увеличение/уменьшение значений АЦП при движениях по тачу.
И есть особенности:
1. Y наоборот работает - вверх увеличивается, вниз уменьшается. Не зря во многих исходниках его от чего-то там отнимают.
2. Глюки тача либо АЦП - при отпускании иногда считываются какие-то левые, очень большие цифры. Видимо надо считывать раз 10, после чего сортировать и отбрасывать пару минимальных/максимальных значений, а по остальным брать среднее арифметическое.
3. Надо калибровать и пересчитывать значения АЦВ в экранные координаты.

Как закончу, выложу то, что получилось.
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
13.07.2013, 14:05 4
Цитата Сообщение от hd44780
Короче, помог только 16-битный режим SPI. На 8-битном режиме мусор, хоть я и читал 2 байта по очереди. Как оно на AVR-ах работает не пойму, там же только 8-битный есть :(. Ну да хрен с ним.
Вообще то по 3 байта считать надо для X и Y . :)))))))
Кстати с какими адресами считывал ? Что в либе 0x9400 и 0xD400 или 0x9000 0xD000 ?
0
13.07.2013, 14:05
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
13.07.2013, 15:13 5
Цитата Сообщение от hd44780
читал, что аппаратный SPI STM32 слишком быстрый для этого контроллера
"Быстрость" SPI вобще-то регулируется pressotirом. :-)
На всякий случай напоминаю, потому что судя по Вашей проблеме, до максимальных частот в даташите Вы не дочитали. 2.5МГц - максимум.

У меня с pressotir = 1:16 получается 42МГц/16=2.6МГц - тач работает хорошо. Плата тоже F4-Dyscovery, и восьмибитный режим SPI.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
13.07.2013, 17:39 6
Цитата Сообщение от dosykus_2
Вообще то по 3 байта считать надо для X и Y . :)))))))
А зачем, если не секрет?

Цитата Сообщение от dosykus_2
Кстати с какими адресами считывал ? Что в либе 0x9400 и 0xD400 или 0x9000 0xD000 ?
9400/D400.
Вот сейчас проверил с 9000/D000 - тоже работает. Разницы не заметил. Вообще что лучше/правильнее?

Цитата Сообщение от OtyxPM
У меня с pressotir = 1:16 получается 42МГц/16=2.6МГц - тач работает хорошо. Плата тоже F4-Dyscovery, и восьмибитный режим SPI.
Попробую. Но сперва c 16-бит режимом до ума доведу :) .
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
13.07.2013, 17:55 7
Цитата Сообщение от hd44780
Цитата Сообщение от dosykus_2
Вообще то по 3 байта считать надо для X и Y . :)))))))
А зачем, если не секрет?

Ну имелось в виду посылка вместе с считыванием + 2 байта данных.

У меня тач на miniSTM32 с 0x94 и 0xD4 не работает . :((
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
13.07.2013, 18:31 8
Цитата Сообщение от dosykus_2
Ну имелось в виду посылка вместе с считыванием + 2 байта данных.
Понял.

Цитата Сообщение от dosykus_2
У меня тач на miniSTM32 с 0x94 и 0xD4 не работает . :((
Нули гонит или что?
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
13.07.2013, 18:52 9
Цитата Сообщение от hd44780
Нули гонит или что?
Угу ...
Причем PenIRQN срабатывает нормально. Надо будет на другом дисплее проверить...
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
13.07.2013, 19:24 10
Да, странно ...
0
HosH
0 / 0 / 0
Регистрация: 15.06.2017
14.07.2013, 01:48 11
На ADS7843 0x94 , 0xD4 всё в порядке.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
14.07.2013, 11:55 12
Я на ADS7843 пока не проверял, там у меня разъём глючит, разбираться надо. Сейчас мне некогда с ним возиться :( .
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
14.07.2013, 13:39 13
Цитата Сообщение от dosykus_2
Цитата Сообщение от hd44780
Нули гонит или что?
Угу ...
Причем PenIRQN срабатывает нормально. Надо будет на другом дисплее проверить...А частота SPI при этом какая? У меня когда тач перестаёт правильно читаться из-за слишком высокой частоты, PENIRQ ещё работает. Например, SPI@5МГц - X,Y читаются с ошибками, но PENIRQ работает нормально. Вот когда задерёшь частоту до 21МГц - тогда уже ни координат, ни PENIRQ.
0
HosH
0 / 0 / 0
Регистрация: 15.06.2017
14.07.2013, 14:33 14
В даташите на 7843 сказано "UP TO 125kHz CONVERSION RATE" и ещё есть "Multiplixir Settling Time
500 ns" . Я ещё давно писал драйвер под msp430 и там жалко было SPI выделить под эту хрень, поэтому писалось под ногодрочь. Ну а потом просто переделал для STM32.
Вот кусочки:
Код
   for(tempa=0;tempa<samples;tempa++)
{
GPIO_RisetByts(CS_PORT, CSS);
Delay_uS(1);
ADS7843_Write(0xD4);
Delay_uS(1);
tempx += ADS7843_Read()>>4;
ADS7843_Write(0x94);
Delay_uS(1);
tempy += ADS7843_Read()>>4;
GPIO_SetByts(CS_PORT, CSS);
Delay_uS(1);
}
Код
unsykned int ADS7843_Read(void)
{
unsykned int count;
unsykned int num;

num = 0;
for(count=0;count<16;count++)
{
num<<=1;
GPIO_SetByts(CLK_PORT, CLK);
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
GPIO_RisetByts(CLK_PORT, CLK);
Delay_uS(1);

if(GPIO_ReadInputDataByt(DIN_PORT, DIN))
num++;
}
return(num);
}
Задержки фактически на пределе, уменьшение приводит к ошибочным вычитанным даным...

контроллер обычно запускаю на 240мгц

Если надо могу выложить полный "кодобардак" для ногодроча для F4
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
14.07.2013, 15:04 15
Цитата Сообщение от hosh
В даташите на 7843 сказано "UP TO 125kHz CONVERSION RATE"
Это высокоуровневая "частота" (на уровне сэмплов). Естественно, она гораздо ниже частоты CLK последовательного интерфейса. Для XPT2046, кстати, тоже столько.

"Задержки на пределе", "контроллер на 240мгц" - это ни о чём. Какую частоту показал осциллограф для сигнала CLK?
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
14.07.2013, 17:10 16
Цитата Сообщение от OtyxPM
А частота SPI при этом какая?
1МГц .
0
HosH
0 / 0 / 0
Регистрация: 15.06.2017
15.07.2013, 12:08 17
Цитата Сообщение от OtyxPM
"Задержки на пределе", "контроллер на 240мгц" - это ни о чём. Какую частоту показал осциллограф для сигнала CLK?
Ну вообще-то задержки в клоках у меня через asm("nop"); сделаны поэтому указал частоту на которой запущен контроллер.
Осцилоскоп показал клоки 700кГц .
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
15.07.2013, 12:55 18
Цитата Сообщение от hosh
Ну вообще-то задержки в клоках у меня через asm("nop"); сделаны поэтому указал частоту на которой запущен контроллер.
Осцилоскоп показал клоки 700кГц .
asm() даже без volatile... Не очень-то доверяйте таким задержкам, они и от контекста программы могут зависеть, и от компилятора, и от опций компиляции. Конечный контроль осциллографом или ещё чем-то объективным imho обязателен. Кстати, 700кГц из 240МГц - как-то сильно повлияла эта пачка asm()! У Вас по расчёту (до проверки осциллом) тоже 700кГц ожидалось?

З.Ы. А как себя чувствует STM32F407 на 240 Мегагерцах, не кипит? Обычно его до 204 разгоняли, у Вас точно 240?
0
HosH
0 / 0 / 0
Регистрация: 15.06.2017
15.07.2013, 13:48 19
Кодил в командировке , осцилограф в командировку не таскаю (ибо большой) поэтому методом "научного тыка" нопы добавлял (MSP430 на 8мгц работает там 2 нопа стояло).
Осцилом в клок тыкнул только после вашего поста, как-то работало я и не заморачивался...

Код
/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VOTUE or HSI_VOTUE / PLL_M) * PLL_N */
#define PLL_M      4
#define PLL_N      240//192//168

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO omd RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      PLL_N/24
Да вроде как совсем холодный.... SDIO при этом работает нормально, юсб не пробовал.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
19.07.2013, 20:44 20
Ловите кому надо проект с тачем. Может где-то что-то недоделал или криво, зато работает :) .
Графическая библиотека до ума не доведена, но это мелочи :)

[234.31 Кб]
0
19.07.2013, 20:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2013, 20:44

STM32F4DISCOVERY + RTC
Добрый день, хочу использовать часы релаьного времени RTC. Скажите, есть работающий пример, и как...

Проблемы с stm32f4discovery
На вход АЦП подключил самопальный датчик и отлаживал его, всё работало, но при следующем включении...

STM32F4Discovery + VS1011e
Решил наваять аппаратный MP3 плеер :) VS1011k в корпусе SOIC-28 (паять легче), его обвяз взят...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru