Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
29.08.2012, 16:39
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Сообщение от dosikus
|
Batisto4ka, уважаемая , а где у вас инит CS .
Зато ошибочно дважды инитите MISO сначала AF потом INPUT .
И дергаете ли вы CS вообще ?
Жертва SPL детектед...
|
такс..насчет мисо то у меня тут уже куча дефайно передефайнов, там все правильно у меня..а цс ищу..
|
|
|
|
29.08.2012, 16:41
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Сообщение от Batisto4ka
|
такс..насчет мисо то у меня тут уже куча дефайно передефайнов, там все правильно у меня..
|
Ага, подчистила ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 29.08.2012 в 16:47.
|
|
|
|
29.08.2012, 16:48
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
не не подчистила, а вот цс действительно не было...пробую
|
|
|
|
29.08.2012, 17:00
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Один мой приятель зарегистрировался на форуме 3D графики под женским именем - и ему прощали любые глупости и помогали всем форумом без единого мата и посыла в мануалы Весь форум с горящими глазами часами отслеживал действия "девушки" без единого возмущения даже по самым дурацким глупостям. Так то. Кое-кто, конечно, посылал варить борщ, но не надолго
|
|
|
|
29.08.2012, 17:03
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
та же картина, на CPOL=0, CPHA=0 не работает, только CPOL=0, CPHA=1 появляются какие-то значения.вот мои мучения
|
|
|
|
29.08.2012, 17:06
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Сообщение от Batisto4ka
|
а вот цс действительно не было...пробую
|
По закону Архимеда, если CS остается в высоком уровне, то DOUT будет в Z-состоянии. Значит, нули приниматься не могут . Только единицы. Ну а если в драйвер передавалось что-то правильное, тогда состояние выхода Busy должно было изменяться.
Последний раз редактировалось Алекс Василич; 29.08.2012 в 17:09.
|
|
|
|
29.08.2012, 17:13
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
там порты по умолчанию на вход настроены. если цс не был инициализирован, то он был всегда в 0, то есть активный уровень. и penirq срабатывал, если б cs небыл активным - микросхема б не отвечала вообще.
|
|
|
|
29.08.2012, 17:15
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
а выход besy на этой плате вообще недоступен!!гляньте на схему
|
|
|
|
29.08.2012, 17:27
|
|
Прописка
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Да, но а поскольку принимаешь по SPI всегда сплошные нули, то, глядя на график в даташите, определяем, что команда передается неправильно. Подтвержнением правильной команды является перевод DOUT в единицу, дновременно с BUSY. Так то.
Пробуй конфигурацию CPHA=0, CPOL=0, либо CPHA=1, CPOL=1, по диаграмме они подходят.
BUSY недоступен? Так вывести его отдельным проводком и сделать доступным. Либо следовать предписаниям даташита по времени обработки.
Последний раз редактировалось Алекс Василич; 29.08.2012 в 17:30.
|
|
|
|
29.08.2012, 17:45
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Помогите с Touch Screen на ADS7843
Код:
|
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
/* DISABLE SPI1 */
SPI_Cmd(SPI1, DISABLE);
/* SPI1 Config -------------------------------------------------------------*/
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_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
/* Enable SPI1 */
SPI_Cmd(SPI1, ENABLE);
/************************************************** *****************************
* Function Name : DelayUS
* Description : СУК±1us
* Input : - cnt: СУК±Цµ
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
static void DelayUS(vu32 cnt)
{
uint16_t i;
for(i = 0;i‹cnt;i++)
{
uint8_t us = 12; /* ЙиЦГЦµОЄ12Ј¬ґуФјСУ1ОўГл */
while (us--) /* СУ1ОўГл */
{
;
}
}
}
/************************************************** *****************************
* Function Name : WR_CMD
* Description : Пт ADS7843РґКэѕЭ
* Input : - cmd: ґ«КдµДКэѕЭ
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
static void WR_CMD (uint8_t cmd)
{
/* Wait for SPI1 Tx buffer empty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI1 data */
SPI_I2S_SendData(SPI1,cmd);
/* Wait for SPI1 data reception */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI1 received data */
SPI_I2S_ReceiveData(SPI1);
}
/************************************************** *****************************
* Function Name : RD_AD
* Description : ¶БИЎADCЦµ
* Input : None
* Output : None
* Return : ADS7843·µ»Ш¶юЧЦЅЪКэѕЭ
* Attention : None
************************************************** *****************************/
static int RD_AD(void)
{
unsigned short buf,temp;
/* Wait for SPI1 Tx buffer empty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI1 data */
SPI_I2S_SendData(SPI1,0x0000);
/* Wait for SPI1 data reception */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI1 received data */
temp=SPI_I2S_ReceiveData(SPI1);
buf=temp‹‹8;
DelayUS(10);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI1 data */
SPI_I2S_SendData(SPI1,0x0000);
/* Wait for SPI1 data reception */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI1 received data */
temp=SPI_I2S_ReceiveData(SPI1);
buf |= temp;
buf››=3;
buf&=0xfff;
return buf;
}
/************************************************** *****************************
* Function Name : Read_X
* Description : ¶БИЎADS7843НЁµАX+µДADCЦµ
* Input : None
* Output : None
* Return : ADS7843·µ»ШНЁµАX+µДADCЦµ
* Attention : None
************************************************** *****************************/
int Read_X(void)
{
int i;
T_CSCLR;
DelayUS(10);
WR_CMD(0x90);
DelayUS(10);
i=RD_AD();
T_CSSET;
return i;
}
/************************************************** *****************************
* Function Name : Read_Y
* Description : ¶БИЎADS7843НЁµАY+µДADCЦµ
* Input : None
* Output : None
* Return : ADS7843·µ»ШНЁµАY+µДADCЦµ
* Attention : None
************************************************** *****************************/
int Read_Y(void)
{
int i;
T_CSCLR;
DelayUS(10);
WR_CMD(0xd0);
DelayUS(10);
i=RD_AD();
T_CSSET;
return i;
}
/************************************************** *****************************
* Function Name : TP_GetAdXY
* Description : ¶БИЎADS7843 НЁµАX+ НЁµАY+µДADCЦµ
* Input : None
* Output : None
* Return : ADS7843·µ»Ш НЁµАX+ НЁµАY+µДADCЦµ
* Attention : None
************************************************** *****************************/
void TP_GetAdXY(int *x,int *y)
{
int adx,ady;
adx=Read_X();
DelayUS(10);
ady=Read_Y();
*x=adx;
*y=ady;
}
/************************************************** *****************************/
/*================================================= ================================================== ===========*/
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;
}
}
/*================================================= ================================================== ===========*/
//Кусок после инициализации всего
while(1)
{
if (TOUCHFLAG)
{
TOUCHFLAG=0;
TP_GetAdXY(&tsX, &tsY);
}
} |
Как можно "неправильно записать команду?", спи на 0,0 не работает, шлет оодни 0
Последний раз редактировалось Batisto4ka; 29.08.2012 в 17:54.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:36.
|
|