Zprovoznění dotykové vrstvy - CAN BUS driver

Zdravim,

mám tento kit a rád bych u něj zprovoznil dotykový displej. Bohužel k tomu nemůžu najít pořádnou dokumentaci, aby se mi to podařilo zprovoznit. Jediný sem k tomu našel je schéma kitu. Ale z toho nejsem asi schopnej na to příjit jak to zprovoznit. Na jedné stránce jsem našel, že to má dotykovou vrstvu TSC2046, ale stejně mi to nepomůže, když nevím kde jsou ty dané piny na dané desce vyvedeny. Jak můžu docílit jeho zprovoznění? Děkuji

Další otázka, abych nezakládal další téma. Na tom kitu, je možnost využití CAN komunikace. Nutné připojit převodník na diferenciální logiku. Je to možné sehnat někde v ČR už sestavené, jako zde na ebayi? Nemám potřebné vybavení, abych si to sám postavil. A je možné sehnat levně další zařízení, které třeba jen vysílá po CAN sběrnici údaje, další kit se mi kupovat nechce. Třeba nějaký teploměr otáčkoměr nebo něco jednoduchého, aby se cena pohybovala do 500 Kč, jestli to je tedy reálný.

Děkuji za jakoukoliv odpověď :slight_smile:

:arrow_right: administrator: přejmenováno z "Zprovoznění dotykové vrstvy"

Tak už sem nejspíš zjistil, že to bude komunikovat přes SPI, takže to budou piny na TFT 2468. Zkusím to zprovoznit, poté dám vědět.

Bude to komunikovat. Mám stejnej kit doma. Ohledně CANu se koukni tady - microchip.com/wwwproducts/De … e=en010404

CAN BUS driver treba PCA82C250

Radius: Děkuji

Co se týče té dotykové vrstvy, tak už se mi ji podařilo zprovoznit, sice s pomocí ukázkových kódů, ale funguje to. Zde je kód:

[code]void initTouch(void){

GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;

//SPI1 Periph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
//SPI2 Periph clock enable
// RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE ) ;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure PB.12 as Output push-pull, used as Flash Chip select */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI1 CS1
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //SPI1 CS4
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //SPI1 NSS
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOC, GPIO_Pin_4); //SPI CS1
GPIO_SetBits(GPIOB, GPIO_Pin_12); //SPI CS4
GPIO_SetBits(GPIOA, GPIO_Pin_4); //SPI NSS

// SPI3 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_NSS_Hard
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1,&SPI_InitStructure);

// SPI1 enable
SPI_Cmd(SPI1,ENABLE);
}

unsigned char SPI_WriteByte(unsigned char data)
{
unsigned char Data = 0;

//Wait until the transmit buffer is empty
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
// Send the byte
SPI_I2S_SendData(SPI1,data);

//Wait until a data is received
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);
// Get the received data
Data = SPI_I2S_ReceiveData(SPI1);

// Return the shifted data
return Data;
}

void SpiDelay(unsigned int DelayCnt)
{
unsigned int i;
for(i=0;i<DelayCnt;i++);
}

u16 getTouchX(void)
{
u16 x=0;
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
SpiDelay(10);
SPI_WriteByte(0x90);
SpiDelay(10);
x=SPI_WriteByte(0x00);
x<<=8;
x+=SPI_WriteByte(0x00);
SpiDelay(10);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
x = x>>3;
return (x);
}

u16 getTouchY(void)
{
u16 y=0;
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
SpiDelay(10);
SPI_WriteByte(0xD0);
SpiDelay(10);
y=SPI_WriteByte(0x00);
y<<=8;
y+=SPI_WriteByte(0x00);
SpiDelay(10);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
y = y>>3;
return (y);
}[/code]

Měl by otázku k části získání hodnoty dané souřadnice. Kde zjistim, že je nutné nejprve poslat 0xD0 pro y nebo 0x90 pro x? Díval sem se do datasheetu Touch Controlleru, ale nic takovýho sem tam nenašel. Přiznávám, že se v datasheetech pořádně neorientuji, ale rád bych se tomu více přiučil.

Děkuji

Tak to si to čtení odfláknul. Nevím sice jestli máš stejnej katalogovej list (existuje víc výrobců tohoto obvodu) ale když si najdeš tu část co popisuje komunikační protokol tohoto obvodu tak zjistíš že na úvod komunikace MCU musí poslat byte který obsahuje bity S, A2,A1,A0,MODE,SER/DFR,DP1,PD0. Podle toho co v nich je, obvod vrátí tu nebo tu hodnotu. Co vrátí je popsáno o několik stránek výše v tabulce. Je to velmi jednoduché.

Děkuji, teď už to vidim. Jak říkám v datasheetech se pořádně ještě neorientuji, je to hlavně mojí slabší angličtinou. Ještě jednou děkuji.