Резистивный сенсорный экран.
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Резистивный сенсорный экран.
У мя такой дисплей на отладочной плате для LPC1768 живет )
Re: Резистивный сенсорный экран.
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: Резистивный сенсорный экран.
С инициализацией понятно, но вот железо...
.ща плату черчу под диплей, буферы и эту микруху(она ещё плоская, квадратная; благо паяльная станция есть; еще заморочка со способом изготовления платы, только начал с помощью фоторезиста делать - короче гемору много).
.ща плату черчу под диплей, буферы и эту микруху(она ещё плоская, квадратная; благо паяльная станция есть; еще заморочка со способом изготовления платы, только начал с помощью фоторезиста делать - короче гемору много).Re: Резистивный сенсорный экран.
А теперь "софтовый" тачскрин на 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;
}
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;
}