Страница 11 из 44

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 21:43:17
SubDia
Без даташита тяжко. =)
Но есть некоторые сходства с кой-каким иным дисплеем. И если судить по строкам

Код: Выделить всё

WriteToLCD(CMD,0x3a); //interfase pixel format
WriteToLCD(DAT,0x03); //
дисплей запускают в 12-битном режиме. Вы учитываете это?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 22:14:23
Bonio
SubDia писал(а): дисплей запускают в 12-битном режиме. Вы учитываете это?
Нет, не учитываю. А в каком режиме его надо запускать?
И для чего используются разные режимы?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 22:23:15
SubDia
Я имею в виду количество цветов, которое способен отобразить дисплей. Ведь от этого зависит и то, каким количеством бит будет определяться засветка одного пикселя. Например, для 256-цветного режима достаточно выводить 1 байт: RRRGGGBB, а для 4096-цветного это уже будет 12 бит: RRRRGGGGBBBB. Об этом режиме я и говорю.
Вообще, разместите кусочек кода вывода на дисплей (именно как Вы выводите эти цветные полосы).

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 22:40:07
Bonio
Вот так вывожу:

Код: Выделить всё

	//Красный
	for(int i = 0; i < 26; i++)
	for(int j = 0; j < 101; j++)
	DrawPixel( j, i, 0xF800 );
	
	//Зелёный
	for(int i = 26; i < 52; i++)
	for(int j = 0; j < 101; j++)
	DrawPixel( j, i, 0x07E0 );
	
	//Синий
	for(int i = 52; i < 80; i++)
	for(int j = 0; j < 101; j++)
	DrawPixel( j, i, 0x001F );

Функция DrawPixel:

Код: Выделить всё

void DrawPixel(uint8_t XPos, uint8_t YPos, uint16_t Color)
{

   CLR_CS;

   WriteToLCD( CMD, 0x2A );
   WriteToLCD( DAT, XPos );
   WriteToLCD( DAT, 100 );

   WriteToLCD( CMD, 0x2B );
   WriteToLCD( DAT, YPos+1 );
   WriteToLCD( DAT, 80 );

   WriteToLCD( CMD, 0x2C );
   WriteToLCD( DAT, (Color >> 8) & 0xFF );
   WriteToLCD( DAT, Color & 0xFF );
   
  SET_CS;
}

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 22:53:08
SubDia
Это Вы чей-то исходник использовали, или сами писали?
Я вижу здесь вообще 16-битные определения цветов. Вот, например,

Код: Выделить всё

   WriteToLCD( CMD, 0x2C ); - команда записи в память дисплея
   WriteToLCD( DAT, (Color >> 8) & 0xFF ); - выгрузка старшего байта
   WriteToLCD( DAT, Color & 0xFF );            - выгрузка младшего байта
То есть у Вас данные выгружаются в формате RRRRRGGGGGGBBBBB. А при инициализации, судя по всему, объявлен 12-битный формат.
Лучше вообще для начала попробовать 8-битный режим.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 23:09:56
Bonio
Это исходник с первых страниц темы.
Если инициализировать в 8-битонм режиме (0x02), красный становиться ещё более бледнее, а если в 16-битном (0x05), вобще черный экран.

А вот ещё, что я не понял, это как в разных режимах получаються значения цветов?
Вот красный например в 16 битном режиме как записать? а в 8 битном?

PS. а все, понял.
Итак, с восьмибитным режимом разобрался, вот правильные цвета))

Изображение

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Вс окт 02, 2011 23:44:56
SubDia
Да нет, неправильные цвета. Черные полосочки видите? Это потому что у Вас по два байта выгружается, а нужно - по одному. :)
Замените uint16_t Color на uint8_t Color (пошто тратить память на 16-битную переменную, когда она не нужна?), и определяйте цвет 8-битной переменной:

Код: Выделить всё

DrawPixel( j, i, 0xE0 );
DrawPixel(j,i,0x1C);
DrawPixel( j, i,0x03);
А в функции void DrawPixel пишите

Код: Выделить всё

   WriteToLCD( CMD, 0x2C );
   WriteToLCD( DAT, Color );
Bonio писал(а):Вот красный например в 16 битном режиме как записать?
Вот с этим режимом у самого не получилось ни хрена. Биться и разбираться не стал, бросил (мне 256 цветов выше крыши). Тоже черным заливало, и все тут.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 08:38:41
Bonio
Все в точности так и делаю :)
Черные полосочки может это особенность экрана? (маленькое разрешение)

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 13:28:09
Bonio
Вот как закрашивать пиксели я понял.
А как вывести на экран строку?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 13:41:10
SubDia
Bonio писал(а):Черные полосочки может это особенность экрана? (маленькое разрешение)
Да нет, должен заливать каждый пиксель. А у Вас получается так: один пиксель заливает нужным цветом, а следующий - черным (0x00). Смотрите программу, где-то должен быть прокол.
Bonio писал(а):А как вывести на экран строку?
Придется самостоятельно массивчик писать, который потом нужно будет выгружать на дисплей подобно этим полосам.
Я делаю так: в фотошопе пишу нужный текст, вырезаю, потом сохраненное изображение конвертирую в массив с помощью Nokia Image Creator (вот здесь возьмите). А после - в нужном месте выгружаю этот массив в память дисплея.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 15:39:07
Bonio
SubDia, спасибо за помощь.
Черные полоски это часть пиксела, такой вот экран. В живую они не заметны.
Щас не поленился, сфотографировал экран в максимальном приближении фотоаппарата и вручную посчитал красные пикселы, ровно 101 штука, как и положено.
Кроме того, полоски можно заметить и вот на этой фотографии у plutonium. Такчто все нормально :)

Для конвертации картинок в массив мне больше понравилась программа image2lcd.

И ещё спросить хотел, как можно добиться моментальной смены картинки, только увеличением частоты процессора?
Нельзя одной командой залить например заданный квадрат? надо заливать отдельно каждый пиксел?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 16:38:15
SubDia
Bonio писал(а):как можно добиться моментальной смены картинки, только увеличением частоты процессора?
Увеличением частоты тактового сигнала используемого интерфейса - там SPI, если я не ошибаюсь?
Однако при этом нужно учитывать скорость, которую способен поддерживать контроллер дисплея.
Bonio писал(а):Нельзя одной командой залить например заданный квадрат? надо заливать отдельно каждый пиксел?
Можно ограничить заданный квадрат специальными командами (установка координат x и y), а затем залить каждый пиксель в заданной области. Но заливка будет попиксельной - это да.
Bonio писал(а):спасибо за помощь.
Совершенно не за что. Обращайтесь. =)

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 17:21:39
Bonio
Что такое может быть? Хочу залить картинку во весь экран, объявляю массив размером 8080 (101x80), прошиваю, и вобще ничего не работает, даже экран не инициализируется.
Притом, если объявить массив размером например 1010 (картинка 101x10) все прекрасно работает, картинка выводится.
Опытным путем выяснил, что МК перестает работать при объявлении очень длинного массива.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 17:34:19
SubDia
Ну так...МК какой? Тинька?
А массив оный получается объемом 8080 байт. У контроллера попросту не хватает памяти для него (это то, о чем я говорил в самом начале нашей беседы).

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 17:58:13
Bonio
atmega8 и atmega32, и там и там такая фигня. оперативки у них 1 и 2 кб соответственно, вроде в любом случае должно хватать?

P.S. Чето туплю, оперативки не хватает. теперь все понятно.
А как же тогда вывести картинку во весь экран? На куски разбивать?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 19:42:42
SubDia
А куда шьете массив? Загоняйте во флэш, что ли. Мега32 должна нормально работать.
Я вообще стараюсь подобные данные во внешней памяти хранить.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 19:50:14
Bonio
Массив прямо в программе объявляю. это ведь и есть флеш?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 21:46:35
SubDia
Ну вообще зависит от настроек программы, которую Вы используете для прошивки. В общих случаях так и есть. А иногда нужно ставить галочку "сохранить константы во flash", и т.д. Тут уж я не знаю.
Но если бы у Вас массив записывался во флэш, то с Мегой 32 проблем точно не было бы - у нее 32кБ флэш, этого с головой хватает.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 21:54:59
Bonio
Интересно. Прошиваю через avrdude, командой avrdude -p atmega32 -P lpt1 -c stk200 -U flash:w:main.hex

Как я понял, в процессе работы микроконтроллера, объявленные значения подгружаються в оперативку.
Такой большой массив в оперативку попросту не помещается, следовательно программа не работает.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Добавлено: Пн окт 03, 2011 22:49:35
Foks
Да нет, у Вас скорее массив в оперативке объявлён.
Кроме того, Си не позволяет использовать всю оперативу до конца - http://www.nongnu.org/avr-libc/user-manual/malloc.html