Резистивный сенсорный экран.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Резистивный сенсорный экран.

Сообщение BCluster »

У мя такой дисплей на отладочной плате для LPC1768 живет )
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Резистивный сенсорный экран.

Сообщение Satyr »

romazan писал(а):тут на днях выманил у мужика в ремонтном отделе модуль дисплея от китайской нокии n95, в модуле есть: сам дисплей, тач и микруха для ТАЧа UH7843. Вот думаю как это дело подцепить к 128 меге

А что там ? цепляешь к SPI и все.
Вот и вся работа с *7843

#define Touchscreen_busy() gpio_get_pin_value(TOUCHSCREEN_BUSY_PIN)
#define Touchscreen_PenReq() (!gpio_get_pin_value(TOUCHSCREEN_IRQ_PIN))

int Read_Touchscreen()
{
unsigned short tdata;
long adc_value_x, adc_value_y;

if(!Touchscreen_PenReq())
{
screen_touching = false;
return false;
}

spi_selectChip(TOUCHSCREEN_SPI, TOUCHSCREEN_SPI_NPCS);

spi_write(TOUCHSCREEN_SPI, 0x90);
while(Touchscreen_busy()) ;

spi_write(TOUCHSCREEN_SPI, 0x00);
spi_read(TOUCHSCREEN_SPI, &tdata);
adc_value_x = tdata;
spi_write(TOUCHSCREEN_SPI, 0x00);
spi_read(TOUCHSCREEN_SPI, &tdata);
adc_value_x = (adc_value_x << 8 ) | tdata;

//////////////////////////////////

spi_write(TOUCHSCREEN_SPI, 0xD0);
while(Touchscreen_busy()) ;

spi_write(TOUCHSCREEN_SPI, 0x00);
spi_read(TOUCHSCREEN_SPI, &tdata);
adc_value_y = tdata;
spi_write(TOUCHSCREEN_SPI, 0x00);
spi_read(TOUCHSCREEN_SPI, &tdata);
adc_value_y = (adc_value_y << 8 ) | tdata;

spi_unselectChip(TOUCHSCREEN_SPI, TOUCHSCREEN_SPI_NPCS);

////////////////////////

screen_touching = true;
screen_x = SCREEN_MAX_X * (adc_value_x - MIN_ADC_X) / (MAX_ADC_X - MIN_ADC_X);
screen_y = SCREEN_MAX_Y * (adc_value_y - MIN_ADC_Y) / (MAX_ADC_Y - MIN_ADC_Y);

return true;
}
Аватара пользователя
romazan
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Чт май 21, 2009 13:54:07
Откуда: Москва
Контактная информация:

Re: Резистивный сенсорный экран.

Сообщение romazan »

С инициализацией понятно, но вот железо... :o :kill: .ща плату черчу под диплей, буферы и эту микруху(она ещё плоская, квадратная; благо паяльная станция есть; еще заморочка со способом изготовления платы, только начал с помощью фоторезиста делать - короче гемору много).
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Резистивный сенсорный экран.

Сообщение Satyr »

А теперь "софтовый" тачскрин на 2 ADC/GPIO и 2 GPIO

int Read_Touchscreen()
{
volatile avr32_adc_t *adc = &AVR32_ADC; // ADC IP registers address

long adc_value_x, adc_value_y;

// есть ли касание ?

gpio_enable_gpio_pin(TSCR_XP); // float на X+
gpio_enable_pin_pull_up(TSCR_XP); // pullup на X+
gpio_enable_gpio_pin(TSCR_XM); // float на X-
gpio_enable_gpio_pin(TSCR_YP); // float на Y+
gpio_clr_gpio_pin(TSCR_YM); // gnd на Y-

cpu_delay_us( 25, APPLI_CPU_SPEED );

screen_touching = !gpio_get_pin_value(TSCR_XP);

gpio_disable_pin_pull_up(TSCR_XP); // убираем pullup на X+

// читаем Y
gpio_set_gpio_pin(TSCR_XP); // vcc на X+
gpio_clr_gpio_pin(TSCR_XM); // gnd на X-
gpio_enable_gpio_pin(TSCR_YP); // float на Y+
gpio_enable_gpio_pin(TSCR_YM); // float на Y-

gpio_enable_module(&TSCR_ADC_GPIO_MAP[1], 1);
adc_enable(adc, TSCR_Y_ADC_CHANNEL);

cpu_delay_us( 250, APPLI_CPU_SPEED );

adc_start(adc);
adc_value_y = adc_get_value(adc, TSCR_Y_ADC_CHANNEL);

adc_disable(adc, TSCR_Y_ADC_CHANNEL);

// читаем X
gpio_set_gpio_pin(TSCR_YP); // vcc на Y+
gpio_clr_gpio_pin(TSCR_YM); // gnd на Y-
gpio_enable_gpio_pin(TSCR_XP); // float на X+
gpio_enable_gpio_pin(TSCR_XM); // float на X-

gpio_enable_module(&TSCR_ADC_GPIO_MAP[0], 1);
adc_enable(adc, TSCR_X_ADC_CHANNEL);

cpu_delay_us( 250, APPLI_CPU_SPEED );

adc_start(adc);
adc_value_x = adc_get_value(adc, TSCR_X_ADC_CHANNEL);

adc_disable(adc, TSCR_X_ADC_CHANNEL);

// все прочитали

screen_x = adc_value_x;
screen_y = adc_value_y;


return screen_touching;
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»