Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-MNUC950
SK-MNUC950 + SK-MI0430FT-Plug
Hermes
Добавлено 17.05.2010 09:59 Редактировалось 17.05.2010 10:00 Сообщение: 91
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
В общем попробовал tslib собралась, установилась
пробую ts_print и ts_print_raw выдают осмысленные координаты, а вот ts_calibrate запускается но выполнять калибровку не хочет :-( соответственно ts_test тоже не хочет работать :-(
установил tslib-1.0. Собирал на самом ките. Собирается достаточно быстро
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 17.05.2010 10:30 Сообщение: 92
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
В общем попробовал tslib собралась, установилась
пробую ts_print и ts_print_raw выдают осмысленные координаты, а вот ts_calibrate запускается но выполнять калибровку не хочет :-( соответственно ts_test тоже не хочет работать :-(
установил tslib-1.0. Собирал на самом ките. Собирается достаточно быстро

надо искать чего не хватает в п/п опроса TS по таймеру
там, помимо координат, можно вернуть тип события типа "нажатие" и его модификаторов, а также некая команда по синхронизации..
я, для информации, копался в соседних драйверах раздела touchscreen

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 17.05.2010 14:10 Редактировалось 17.05.2010 14:39 Сообщение: 93
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
почитал форумы и родилась идея!
увидил на одном из форумов такие строчки:
Код
xres = 480, yres = 272
Took 127 samples...
Top left : X = 57 Y = 52
Took 127 samples...
Top right : X = 435 Y = 52
Took 127 samples...
Bot right : X = 435 Y = 227
Took 127 samples...
Bot left : X = 53 Y = 225
Took 127 samples...
Center : X = 245 Y = 140
-6.576660 0.999942 0.011427
-0.947144 -0.002615 0.988418
Calibration constants: -431008 65532 748 -62072 -171 64776 65536

это он 127 выборок должен сделать по каждой точке, видимо просто по таймеру не успевает набрать столько семплов вот и не двигается указатель и не получается откалибровать экран...
сегодня приду домой и попробую уменьшить время срабатывания таймера или подольше подержать стило в одной точке, может откалибруется и всё заработает :-)))
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 17.05.2010 21:34 Редактировалось 17.05.2010 21:35 Сообщение: 94
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
Ура! побеждёт tslib!!! сумел откалибровать с помощью ts_calibrate и запустить тест ts_test
Ошибка была в драйвере. Вот новый рабочий, заточенный под мою распайку:
Код
#include <linux/input.h>
#include <linux/module.h>
//#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/init.h>
//#include <linux/interrupt.h>
#include <asm/io.h>
#include <asm/delay.h>
#include <linux/timer.h>
#include <linux/jiffies.h>
#include <asm/arch/nuc900_gpio.h>

//#ifdef __KERNEL__
//#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
//#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
//#define BITS_PER_BYTE 8
//#endif

#define READ_X ((5 << 4) | 1<<3 | 0)
#define READ_Y ((1 << 4) | 1<<3 | 0)
#define READ_Z ((3 << 4) | 1<<3 | 0)

#define MODNAME "ads7843"

#define HP680_TS_ABS_X_MIN 10
#define HP680_TS_ABS_X_MAX 245
#define HP680_TS_ABS_Y_MIN 15
#define HP680_TS_ABS_Y_MAX 240
#define PRESSURE_MIN 0
#define PRESSURE_MAX 50

[b]#define REFR_TIME (HZ / 25)[/b]
struct timer_list timer;

static struct input_dev *hp680_ts_dev;

unsigned short ADS7843_read(unsigned char mode);

unsigned short ADS7843_read(unsigned char mode)
{
char i;
unsigned short data=0;
// nuc900_gpio_set_input(GPIO_GROUP_E, 13); //DOUT
// nuc900_gpio_set_output(GPIO_GROUP_H, 0); //CLK
// nuc900_gpio_set_output(GPIO_GROUP_G, 0); //DIN
// nuc900_gpio_set_output(GPIO_GROUP_D, 8); //CS
nuc900_gpio_set(GPIO_GROUP_H, 0, 0); // clk->0
nuc900_gpio_set(GPIO_GROUP_G, 0, 0); // data->0
nuc900_gpio_set(GPIO_GROUP_D, 8, 0); // cs->0
mode|=0x80;//set start bit

for(i=0;i<8;i++)
{
if((mode&0x80)!=0)
nuc900_gpio_set(GPIO_GROUP_G, 0, 1);
// gpio_set_value(TS_DIN,1);
else
nuc900_gpio_set(GPIO_GROUP_G, 0, 0);
// gpio_set_value(TS_DIN,0);

nuc900_gpio_set(GPIO_GROUP_H, 0, 1);
nuc900_gpio_set(GPIO_GROUP_H, 0, 0);
// gpio_set_value(TS_CLK,1);
// gpio_set_value(TS_CLK,0);
mode=mode<<1;
}
udelay(10);
nuc900_gpio_set(GPIO_GROUP_H, 0, 1);
nuc900_gpio_set(GPIO_GROUP_H, 0, 0);
// gpio_set_value(TS_CLK,1);
// gpio_set_value(TS_CLK,0);
for(i=0;i<7;i++)
{
data|=nuc900_gpio_get(GPIO_GROUP_E, 13); //gpio_get_value(TS_DOUT);
nuc900_gpio_set(GPIO_GROUP_H, 0, 1);
nuc900_gpio_set(GPIO_GROUP_H, 0, 0);
// gpio_set_value(TS_CLK,1);
// gpio_set_value(TS_CLK,0);
data=data<<1;
}
data|=nuc900_gpio_get(GPIO_GROUP_E, 13); //gpio_get_value(TS_DOUT);

nuc900_gpio_set(GPIO_GROUP_D, 8, 1); // ds->1
// gpio_set_value(TS_CS,1);
return data;
}

static void my_timer(unsigned long param)
{
int absx = 0, absy = 0;
int x1,x2,y1,y2;
x1=ADS7843_read(READ_X);
y1=ADS7843_read(READ_Y);
x2=ADS7843_read(READ_X);
y2=ADS7843_read(READ_Y);
[b] if((abs(x1-x2)<2 && abs(y1-y2)<2) && (y2<240) && (y2>15) && (x2>8) && (x2<245))
{
absx=x2;
absy=y2;
input_report_abs(hp680_ts_dev, ABS_X, absx);
input_report_abs(hp680_ts_dev, ABS_Y, absy);
input_report_abs(hp680_ts_dev, ABS_PRESSURE, 50);
input_report_key(hp680_ts_dev, BTN_TOUCH,0);
//Hermes
input_sync(hp680_ts_dev);
printk("BTN_TOUCH = %d ABS_X = %d ABS_Y = %d\n", BTN_TOUCH, absx, absy);
}
else{
input_report_key(hp680_ts_dev, BTN_TOUCH,1);
input_report_abs(hp680_ts_dev, ABS_PRESSURE, 0);
input_sync(hp680_ts_dev);
}[/b]
mod_timer(&timer, jiffies + REFR_TIME);
}

static int __init hp680_ts_init(void)
{
int err;
int ret;
printk("Init ts ads7843 device\n");
ret = nuc900_gpio_configure(GPIO_GROUP_E, 13);
printk("-0\n");
ret = nuc900_gpio_configure(GPIO_GROUP_H, 0);
printk("-1\n");
ret = nuc900_gpio_configure(GPIO_GROUP_G, 0);
printk("-2\n");
ret = nuc900_gpio_configure(GPIO_GROUP_D, 8);
printk("-3\n");
nuc900_gpio_set_input(GPIO_GROUP_E, 13); //DOUT
nuc900_gpio_set_output(GPIO_GROUP_H, 0); //CLK
nuc900_gpio_set_output(GPIO_GROUP_G, 0); //DIN
nuc900_gpio_set_output(GPIO_GROUP_D, 8); //CS
printk("ads7843 pins registration ok\n");

init_timer(&timer);
timer.function= my_timer;
timer.expires = jiffies + REFR_TIME;
add_timer(&timer);

hp680_ts_dev = input_allocate_device();
if (!hp680_ts_dev)
return -ENOMEM;
printk("ads7843 allocate device ok\n");

hp680_ts_dev->name = "MIO430FT touchscreen";
hp680_ts_dev->phys = "input/event1";

hp680_ts_dev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY);
hp680_ts_dev->keybit[LONG(BTN_TOUCH)] = (BTN_TOUCH);
hp680_ts_dev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y);

input_set_abs_params(hp680_ts_dev, ABS_X,HP680_TS_ABS_X_MIN, HP680_TS_ABS_X_MAX, 0, 0);
input_set_abs_params(hp680_ts_dev, ABS_Y,HP680_TS_ABS_Y_MIN, HP680_TS_ABS_Y_MAX, 0, 0);
input_set_abs_params(hp680_ts_dev, ABS_PRESSURE, PRESSURE_MIN, PRESSURE_MAX, 0, 0);

err = input_register_device(hp680_ts_dev);
if (err)
goto fail2;

printk("ads7843 X1=%u\n",ADS7843_read(READ_X));
printk("ads7843 Y1=%u\n",ADS7843_read(READ_Y));
printk("ads7843 X2=%u\n",ADS7843_read(READ_X));
printk("ads7843 Y2=%u\n",ADS7843_read(READ_Y));

printk("ads7843 init device ok\n");
return 0;

fail2:
input_free_device(hp680_ts_dev);
printk("ads7843 init device failed\n");
return err;
}

static void hp680_ts_exit(void)
{
input_unregister_device(hp680_ts_dev);
}

module_init(hp680_ts_init);
module_exit(hp680_ts_exit);

MODULE_AUTHOR("Andriy Skulysh, [mail=askulysh@image.kiev.ua]askulysh@image.kiev.ua[/mail]");
MODULE_DESCRIPTION("HP Jornada 680 touchscreen driver");
MODULE_LICENSE("GPL");


Жирным выделил обновлённый участок
не работало у нас из-за того что мы отправляли в устройство координаты и сигнал отпуска кнопки... переправил

в ts_test нарисовать/написать пером на экране ничего не получеться, слишком редкий опрос таймера, но для тыкания по кнопочкам вполне достаточно.

Осталось только перепаяться и сделать на прерываниях (прерывание завести на H1) и будет ваще красота

к иксам пока прикрутить не удалось, буду пробовать :-)
с Qt пока тоже не заладилось при запуске выплёвывает в консоль:
Код
No raw modules loaded.
QWSTslibMouseHandlerPrivate: ts_config() failed with error: 'No such file or directory'


ЗЫ: счастья полные штаны

UPDATE: жирным не выделяет если текст в блоке code
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 18.05.2010 12:24 Сообщение: 95
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
Возник вопрос. Можно ли программно отключать дисплей ? ну что бы он не 24 часа в сутки работал, а например через 10 минут бездействия засыпал...
Посмотрел даташит на дисплей. За это должен отвечать DISP. В схеме он запитан на 3.3 вольта.
подскажите как можно переделать что бы можно управлять питанием экрана ?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 18.05.2010 12:38 Сообщение: 96
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Цитата

Ошибка была в драйвере. Вот новый рабочий, заточенный под мою распайку:


Давно поглядываю на тему и все стесняюсь спросить - а чем вам нормальный драйвер для ads7843 не угодил который есть в ядре ?
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 18.05.2010 14:11 Редактировалось 18.05.2010 14:11 Сообщение: 97
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
на сколько я помню там не для 7843, а для чего-то похожего и у нас по другому пины настроены, т.к. на разъеме куда приходит шлейф от экрана эти пины не присоединены к контроллеру, поэтому пробрасывали проводками на другой разъем и переписывали драйвер который дал Павел. Драйвер как я понимаю был от at9200

но вопроса по управлению питания на MI0430FT это не снимает :-(
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 18.05.2010 14:19 Редактировалось 18.05.2010 15:22 Сообщение: 98
Pavel Ivanchenko
Admin
4.39

Пункты: 91491
Регистрация: 24.03.2009
Пол: Мужчина
Наверное и сами догадываетесь, для управления панелью (DISP_ON) потребуется еще одну линию ввесли, это то что касается электрики, а что делать для ттого чтобы ОС умела им управлять ...

В ядре есть драйвер для 7846/43 который пользуется SPI, на момент написания текущего драйвера, мне в голову особо не пришло использовать GPIO SPI драйвер и подключить его уже к драйверу 7846, думаю, так все будет намного "правильнее" функционировать.
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 18.05.2010 14:44 Редактировалось 18.05.2010 14:44 Сообщение: 99
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
т.е. если я правильно понял, нужно разорвать эту линию (туда похоже тупо подаётся 3.3В что есть логическая единица) и подпаятся своим проводком который если в 1, то дисплей работает, если 0 то выключается ?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 18.05.2010 14:46 Сообщение: 100
sasamy
4.70

Пункты: 77333
Регистрация: 14.08.2009
Цитата
на сколько я помню там не для 7843, а для чего-то похожего и у нас по другому пины настроены, т.к. на разъеме куда приходит шлейф от экрана эти пины не присоединены к контроллеру


Там нормальный драйвер, в ядре есть поддержка spi master через общий механизм gpio - это означает что если для платформе имеется gpio драйвер то spi можно организовать вообще не имея его в железе через эмуляцию причем на любых пинах gpio.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-MNUC950