Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

stm32 + xpt2046 (аналог ads7846)

Непрочитано 02.09.2011, 20:10  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Solomiichuk, а я ведь заставил нормально его работать! =) И таки с помощью софтварного SPI.

Вот драйвер. Пины не менял, т.е. если у Вас тач на SPI1 то менять ничего не придётся. Кстати, spin_m(), cpin_m(), pinOutPP_b() и иже с ним можете не убирать - объявления этих макросов есть в xpt2046exp.h
Как проверите - напишите.
Вложения:
Тип файла: rar xpt2046exp.rar (2.1 Кб, 361 просмотров)
Реклама:
DarkEN_ANGEL вне форума  
Непрочитано 04.09.2011, 18:37  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Попробовал. Значения получаются более вменяемые, чем при аппаратном SPI, но все-равно далеки от истины. Буду править и пробовать.
Прислать Вам мой проект?
Solomiichuk вне форума  
Непрочитано 05.09.2011, 10:45  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Сообщение от Solomiichuk Посмотреть сообщение
Попробовал. Значения получаются более вменяемые, чем при аппаратном SPI, но все-равно далеки от истины. Буду править и пробовать.
Прислать Вам мой проект?
В смысле далеки от истины?
А смысл присылать, если там мой код? ))
Хотя если как-то улучшите - присылайте.

Кстати, вот тут
Код:
.....
      x = ((a‹‹4)|(b››4)); //12bit: ((a‹‹4)|(b››4)) //10bit: ((a‹‹2)|(b››6))
.....
      y = ((a‹‹4)|(b››4)); //12bit: ((a‹‹4)|(b››4)) //10bit: ((a‹‹2)|(b››6))
правильнее было бы заменить на

Код:
.....
int16_t tmpX = a ‹‹ 8;
tmpX |= b;
tmpX ››= 3;
tmpX &= 0xfff;
x += tmpX;
.....
int16_t tmpY = a ‹‹ 8;
tmpY |= b;
tmpY ››= 3;
tmpY &= 0xfff;
y += tmpY;
Есстественнно достаточно одного tmp, и объявить его где-то вначале...

Последний раз редактировалось DarkEN_ANGEL; 07.09.2011 в 21:11.
DarkEN_ANGEL вне форума  
Непрочитано 02.10.2011, 21:43  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Вроде, я на конец-то победил этот тачскрин.
Оказалось, что ему мешала висящая на том же SPI
микросхема AT45DB321. Кроме того, аппаратный
SPI контроллера STM32 таки слишком быстрый для
работы с xpt2046.

Вот код:


Цитата:
static void TouchScreen_SPI_WR(u8 cmd)
{
u8 i, mask ;

for(mask=0x80; mask!=0; mask››=1)
{
for( i = 0; i ‹ 50; i++ ); /* 200ns */
TouchScreen_Clr_SCK; /* SCK \ */

if (cmd & mask) TouchScreen_Set_MOSI /* MOSI =1 */
else TouchScreen_Clr_MOSI; /* MOSI =0 */

for( i = 0; i ‹ 50; i++ ); /* 200ns */
TouchScreen_Set_SCK; /* SCK / */
}

for( i = 0; i ‹ 50; i++ ); /* 200ns */
TouchScreen_Clr_SCK; /* SCK \ */
}


static u16 TouchScreen_SPI_RD(void)
{
u16 buf ;

u8 i, j ;

buf=0;

for( i = 0; i ‹ 12; i++ )
{
buf = buf ‹‹ 1 ;

TouchScreen_Set_SCK; /* SCK / */
for( j = 0; j ‹ 50; j++ ); //200ns
TouchScreen_Clr_SCK; /* SCK \ */
for( j = 0; j ‹ 50; j++ ); //200ns

if ( TouchScreen_MISO_GPIO-›IDR & TouchScreen_MISO_PIN_IDR )
{
buf = buf + 1 ;
}

for( j = 0; j ‹ 50; j++ ); //200ns
}
return( buf ) ;
}



static void TouchScreen_Read_XY(int *X_Addata,int *Y_Addata)
{
u16 i, j, x_addata=0, y_addata=0;
char *c[5];
char d[5];

for(i=8;i›0;i--)
{
TouchScreen_SPI_WR( xpt2046_X ) ;
for( j = 0; j ‹ 50; j++ ); //200ns
y_addata += TouchScreen_SPI_RD() ;
for( j = 0; j ‹ 50; j++ ); //200ns

TouchScreen_SPI_WR( xpt2046_Y ) ;
for( j = 0; j ‹ 50; j++ ); //200ns
x_addata += TouchScreen_SPI_RD() ;
for( j = 0; j ‹ 50; j++ ); //200ns
}

x_addata››=4;
y_addata››=4; //AVG.





sprintf(d,"X=%x",x_addata);
*c=d;
LCD_WriteString_5x7(23, 120, *c, BLACK, RED, 0, 4 );


sprintf(d,"Y=%x",y_addata);
*c=d;
LCD_WriteString_5x7(23, 70, *c, BLACK, RED, 0, 4 );

/**X_Addata=x_addata;
*Y_Addata=y_addata; */

}


extern "C"
__irq void EXTI15_10_IRQHandler()
{
if (EXTI-›PR & TouchScreen_IRQ_PIN_PR)
{
int *X, *Y;
TouchScreen_Read_XY (X,Y);
EXTI-›PR |= TouchScreen_IRQ_PIN_PR;
}
}
Значения теперь получаются более вменяемыми. Остается написание медианного фильтра значений и процедуры калибровки.

Последний раз редактировалось Solomiichuk; 02.10.2011 в 21:50.
Solomiichuk вне форума  
Сказали "Спасибо" Solomiichuk
Batisto4ka (30.08.2012)
Непрочитано 03.10.2011, 11:39  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Сообщение от Solomiichuk Посмотреть сообщение
Вроде, я на конец-то победил этот тачскрин.
Я Вас поздравляю!
Вечером приду домой - опробую Ваш код.


Сообщение от Solomiichuk Посмотреть сообщение
Кроме того, аппаратный
SPI контроллера STM32 таки слишком быстрый для
работы с xpt2046.
Есть размышления по поводу деления частоты, приходящей на SPI1, с помощью настройки APB2 Prescaler (регистр RCC-›CFGR, PPRE2, биты 13-11).
Поставил дивайдер на 4 (72/4 = 18 мГц на входе spi1, делитель самой spi 256, соотв. 70 кГц), но результата почему-то нету...
Может быть Вы попробуете этот способ?

Последний раз редактировалось DarkEN_ANGEL; 03.10.2011 в 12:45.
DarkEN_ANGEL вне форума  
Непрочитано 09.10.2011, 17:54  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Цитата:
Может быть Вы попробуете этот способ?
В первоначальном варианте моей схемы отладочной платы на SPI1 висели тачскрин, microSD и AT45DB321. Сейчас тачскрин я выбросил на GPIO. Думаю, так оно будет более правильно: самое медленное устройство ушло в сад, дабы не мешать двум быстрым собратьям.
Но отладочных плат у меня сейчас две : одна с описанной доработкой, вторая - без нее. Поэтому на днях могу проверить ради эксперимента Ваш метод, хотя и вряд ли остановлюсь на нем как на окончательном варианте.
Solomiichuk вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6171 20.05.2025 20:16
smd аналог 580вв55а execute Информация по радиокомпонентам 11 07.08.2009 16:14
Есть ли более дешевый аналог MAX312? или аналог КР590КН5 phoenix_87 Информация по радиокомпонентам 0 11.03.2009 10:10


Часовой пояс GMT +4, время: 18:45.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.