Hallo
habe ein Ledsee 320x240 display mit integrierten Touch Controller.
ich habe diesen code erstellt
Mega 2561 16Mhz
typedef struct
{
uint16_t x;
uint16_t y;
} tvalues;
void spi_init(void)
{
ss_high();
TOUCH_cs_high();
SPCR=(1<<SPE)|(1<<MSTR);
SPSR=(1<<SPI2X);
}
void get_touch(tvalues *touchvalues)
{
//read Y
TOUCH_cs_low();
spi_putc(0x9c);
touchvalues->y = spi_putc(0x00);
TOUCH_cs_high();
//read x
TOUCH_cs_low();
spi_putc(0xdc);
touchvalues->x = spi_putc(0x00);
TOUCH_cs_high();
}
ich bekomme als wert x von 40 bis 60
bei y bekomme ich im ruhe modus 127. in richtung pixel x 0 ist der y
wert 40 in richtung pixel x 320 ist es 50 dort sollte auch 40 sein.
hat jemand vileicht ein Beispiel???
Vielen Dank
Gast
#1962712
hast du denn den ADS vorher initialisiert?
Hallo wie initialisiert da steht nichts im datenblatt??? Gruß andy
Gast
#1962836
naja,initialisieren ist zuviel gesagt, aber du musst vor jeder Wandlung erst ein Control-Byte senden. Aber ok, machst du ja. Sorry, hatte nicht richtig hingeschaut. Kann noch sein, dass der Touch verschiedene Innenwiderstände in x-bzw.y-Richtung hat, dann bekommst du auch unterschiedliche Werte.
Hallo
geht jetzt
void get_touch(tvalues *touchvalues);
void spi_init_Touch(void)
{
ss_high();
TOUCH_cs_high();//CS auf high
SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
SPSR=(1<<SPI2X);
}
void get_touch(tvalues *touchvalues)
{
spi_init_Touch();
//read Y
TOUCH_cs_low();
spi_putc(0x98);
touchvalues->y = spi_putc(0x00);
TOUCH_cs_high();
//read x
TOUCH_cs_low();
spi_putc(0xd8);
touchvalues->x = spi_putc(0x00);
TOUCH_cs_high();
}
muß jetzt nur noch eine Calibrierung schreiben damit ich pixelgenau
arbeiten kann.
Ich versuche dann auch mal die 12 bit auflösung.
aber so funktioniert es ziemlich gut.
Will das Display mit den fingern bedienen.
Gruß
Andy
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.