Страница 47 из 73
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 10:07:34
hd44780
kentik писал(а):покажите листинг плиииз.
Я думаю, что с листинга Вам толку мало будет, оно у меня под STM32F4, дисплей на сидит на FSMC. Да и ваш SSD контроллер может облегчать какие-то дествия ...
На моём ILI9320Алгоритм такой - дисплею задаю окно по размеру BMP-шки и с указанными координатами, затем устанавливаю позицию вывода на те же координаты и гоню в него все пиксели подряд.
Если без окна, то в начале каждой строки снова позиционируйтесь руками.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 10:40:57
Chettuser
VDLab писал(а):возможно имелись ввиду TFT панели с аналоговым RGB интерфейсом (правда в мобильниках такие не встречал, зато в фотоаппаратах и в дешевых фоторамках и телевизорах они чаще всего и встречаются), но и там с VGA ничего общего нет.
Спасибо! Значит будем фоторамку трепать...

Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 13:49:30
drakon
kentik, вот так можно вывести картинку:
Код: Выделить всё
//вывод картинки 105x73
//LCD_goto(x, y, x1, y1);
LCD_goto(0, 0, 105 -1, 73 -1); //выделяем окно
for(i=0; i<105*73; i++) //последовательно выводим все пиксели
lcd_dat16(image[i]); //вывод пикселя
пользуюсь программой bmp2h_conv.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 16:22:27
kentik
drakon писал(а):kentik, вот так можно вывести картинку:
такой же вывод и у меня.
в теле цикла только разбиваю цвет, на необходимый RRRRRGGGGGGBBBBB
что-то путаю я с этой разбивкой.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 16:34:11
drakon
покажите фотографию того, что выводит. программа bmp2h_conv преобразовывает из BMP в массив RGB 565. потом выводите готовый массив. там в программе есть Reverse R<->B.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 18:28:09
kentik
все. я вконец запутался.
подскажите плиииз.
картинка выводится, если массив объявлен так:
int picture[] = {
0xFFFF, 0xFFFF, ...
};
функция вывода изображения:
void drawBitmap(int x, int y, int sx, int sy, unsigned int* data)
{
int allpixels;
allpixels = sx*sy;
setXY(x, y, x+sx-1, y+sy-1);
for (tc=0; tc<allpixels; tc++){
col=data[tc++];
LCD_Write_DATA(col>>8,col&0xff);
}
}
но стоит мне объявить массив:
flash int kentik[] = {
0xFFFF, 0xFFFF, ...
};
так выводится черный экран, размером с картинку.
где я ошибся?
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 19:07:47
drakon
вы int объявляете как знаковую.
попробуйте так:
Код: Выделить всё
flash unsigned int kentik[] = {
0xFFFF, 0xFFFF, ...
};
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 19:11:32
kentik
drakon писал(а):вы int объявляете как знаковую.
тогда выводится ошибка
function argument #5 of type 'flash unsigned int [1008]' is incompatible with required parameter of type 'unsigned int *'
p.s. видимо тут играет роль какая-то особенность codevision
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 19:26:05
drakon
попробуйте процедуру вывода картинки и ее вызов закомментировать. ошибка все ровно есть? вместо flash можно написать const. если ошибка пропала попробуйте ту процедуру что я показывал. проверена на CVAVR.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 19:41:26
kentik
drakon писал(а):попробуйте процедуру вывода картинки и ее вызов закомментировать. ошибка все ровно есть? вместо flash можно написать const. если ошибка пропала попробуйте ту процедуру что я показывал. проверена на CVAVR.
закомментировал вывод картинки и ошибка пропала. ну так логично - я ж к массиву не обращаюсь теперь.
const вместо flash не помещает массив в flash/ так и висит в RAM
все получилось.
НО!!! только если вызывать массив картинки напрямую из функции попиксельного заполнения.
я так понял, что со своей проблеммой мне надо в тему к новичкам по Codevision.
хрень какая-то. не правильно тип массива что-ли указываю?
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Вс май 12, 2013 21:35:33
srg320
а если так:
void drawBitmap(int x, int y, int sx, int sy, flash unsigned int* data)
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Пн май 13, 2013 07:51:02
U235
kentik писал(а):все. я вконец запутался.
подскажите плиииз.
flash модификатор памяти, указывает что данные находятся во флеше, а не в ОЗУ. Поэтому, если размещаете картинку во флеше, то и функция должна к нему обращаться.
Код: Выделить всё
flash int picture[] = {
0xFFFF, 0xFFFF, ...
};
функция вывода изображения:
void drawBitmap(int x, int y, int sx, int sy, flash unsigned int* data)
{
int allpixels;
allpixels = sx*sy;
setXY(x, y, x+sx-1, y+sy-1);
for (tc=0; tc<allpixels; tc++)
{
col=data[tc++];
LCD_Write_DATA(col>>8,col&0xff);
}
}
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Пн май 13, 2013 14:45:03
kentik
srg320 и U235 спасибо огромное. вот так все работает.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Пт май 17, 2013 15:03:14
kentik
и снова я с вопросом по своему модулю.
переписываю библиотеку ардуины для тачпада. в модуле установлен ads7843.
пока вот так:
Спойлер
#define Tclk PORTC.6
#define Din PORTC.4
#define Tcs PORTC.5
#define Dout PORTB.0
#define Irq PORTB.1
void InitTouch()
{
DDRC=0xff;
DDRB=0x00;
Tclk=1;
Din=1;
Tcs=1;
}
void Touch_readData()
{
char count;
touchdata=0;
for( count=0; count<12; count++)
{
touchdata <<= 1;
Tclk=1;
delay_ms(1);
Tclk=0;
delay_ms(1);
if (PINC.0==1)
touchdata++;
}
}
void Touch_WriteData(unsigned int data)
{
unsigned int temp;
char count;
temp=data;
Tclk=0;
for(count=0; count<8; count++)
{
if(temp & 0x80)
Din=1;
else
Din=0;
temp = temp << 1;
Tclk=0;
delay_ms(1);
Tclk=1;
delay_ms(1);
}
}
void read()
{
unsigned long tx=0, ty=0;
char i;
Tcs=0;
Touch_WriteData(0x90);
Tclk=1;
Tclk=0;
Touch_readData();
ty+=touchdata;
Touch_WriteData(0xD0);
Tclk=1;
Tclk=0;
Touch_readData();
tx+=touchdata;
Tcs=1;
TP_X=tx;
TP_Y=ty;
}
вся программа вот такая:
while (1)
{
read();
sprintf(lcdBuffX,"%u",TP_X);
print(lcdBuffX,10,300) ;
sprintf(lcdBuffY,"%u",TP_Y);
print(lcdBuffY,50,300) ;
};
в итоге вижу две цифирьки 4095 и ноль внимание на нажатия.
что я не так делаю?
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Пт май 17, 2013 16:19:51
srg320
ну, для начала:
Спойлер
void Touch_readData()
{
char count;
touchdata=0;
for( count=0; count<12; count++)
{
touchdata <<= 1;
Tclk=1;
delay_ms(1);
Tclk=0;
delay_ms(1);
if (PINB.0==1)
touchdata++;
}
}
я применяю уже новый контроллер тачскрина TSC2046, он похож на ads7843, даташит на ads7843 не смотрел, но думаю его тоже надо вначале проинициализировать и загнать в Power-Down Mode, а уже при нажатии по Irq выводить из спящего режима, считывать значения и снова в спящий режим.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Пт май 17, 2013 18:24:04
kentik
srg320 писал(а):ну, для начала:
PINB.0==1
ух ты. ничего себе такая глупая ошибка.
мне просто стыдно за себя.
Спасибо вам огромное.
srg320 писал(а):думаю его тоже надо вначале проинициализировать и загнать в Power-Down Mode, а уже при нажатии по Irq выводить из спящего режима, считывать значения и снова в спящий режим.
зачем? он постоянно не может функционировать? мне не надо экономить батарейку или еще что там!
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Сб май 18, 2013 08:25:10
srg320
kentik писал(а):зачем? он постоянно не может функционировать? мне не надо экономить батарейку или еще что там!
Дело в том, что считывать значения нужно сразу после нажатия на тач и при условии, что нажатие присутсвовало на протяжении чтения обеих координат. В противном случае, вы будете получать постоянно какие-то значения, потому что, вход АЦП контроллера тачскрина будет висеть в воздухе с подключённой к нему одной из пластин тачскрина. И только при нажатии эти значения будут верными.
Мне, для повышения точности замеров, пришлось ставить фильтр по питанию контроллера, а также значения считываются сразу по 5 раз на каждую координату, затем считаю среднее значение. А то при перемещении объектов стилусом было сильное дрожание +-5пикселов, а сейчас дрожание заметно только по одной координате +-2пиксела.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Сб май 18, 2013 11:37:58
kentik
srg320 писал(а):Дело в том, что считывать значения нужно сразу после нажатия на тач и при условии, что нажатие присутсвовало на протяжении чтения обеих координат. В противном случае, вы будете получать постоянно какие-то значения
все верно. поставил вывод координат все время. пока не нажимаю - выводится фигня разная. нажимаю - показывает все правильно.
srg320 писал(а):Мне, для повышения точности замеров, пришлось ставить фильтр по питанию контроллера, а также значения считываются сразу по 5 раз на каждую координату, затем считаю среднее значение.
у меня 10 раз считается. надо бы поменьше поставить. но у меня нету точности никакой. мне на экране 240 точек надо лишь разместить три кнопки.
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Сб май 18, 2013 11:49:47
srg320
kentik писал(а):пока не нажимаю - выводится фигня разная. нажимаю - показывает все правильно.
поэтому то и надо переводить его в Power Down для отлавливания момента нажатия
Re: Юзаем дисплеи от сотовых и других потаскунчиков.
Добавлено: Сб май 18, 2013 14:43:26
kentik
srg320 писал(а):kentik писал(а):пока не нажимаю - выводится фигня разная. нажимаю - показывает все правильно.
поэтому то и надо переводить его в Power Down для отлавливания момента нажатия
правильно ли я понимаю алгоритм тогда?
1. отлавливаем момент нажатия - if PIN(IRQ) ==1
2. если да, то выводим из спящего режима, прописывая определенные биты в байте конфигурации
3. читаем Х
4. посылаем еще байт конфигурации, где биты режима Power-DOWN ставим в спящий режим
5. читаем У
(так попробовал - не получается)
так?
или дополняем обычный алгоритм?
1. посылаем байт где только биты просыпания
2. посылаем байт
3. читаем Х
4. посылаем байт
5. читаем У
6. посылаем байт, где только биты засыпание