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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Без даташита тяжко. =)
Но есть некоторые сходства с кой-каким иным дисплеем. И если судить по строкам

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

WriteToLCD(CMD,0x3a); //interfase pixel format
WriteToLCD(DAT,0x03); //
дисплей запускают в 12-битном режиме. Вы учитываете это?
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

SubDia писал(а): дисплей запускают в 12-битном режиме. Вы учитываете это?
Нет, не учитываю. А в каком режиме его надо запускать?
И для чего используются разные режимы?
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Я имею в виду количество цветов, которое способен отобразить дисплей. Ведь от этого зависит и то, каким количеством бит будет определяться засветка одного пикселя. Например, для 256-цветного режима достаточно выводить 1 байт: RRRGGGBB, а для 4096-цветного это уже будет 12 бит: RRRRGGGGBBBB. Об этом режиме я и говорю.
Вообще, разместите кусочек кода вывода на дисплей (именно как Вы выводите эти цветные полосы).
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение 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;
}
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

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

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

   WriteToLCD( CMD, 0x2C ); - команда записи в память дисплея
   WriteToLCD( DAT, (Color >> 8) & 0xFF ); - выгрузка старшего байта
   WriteToLCD( DAT, Color & 0xFF );            - выгрузка младшего байта
То есть у Вас данные выгружаются в формате RRRRRGGGGGGBBBBB. А при инициализации, судя по всему, объявлен 12-битный формат.
Лучше вообще для начала попробовать 8-битный режим.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

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

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

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

Изображение
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение 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 цветов выше крыши). Тоже черным заливало, и все тут.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

Все в точности так и делаю :)
Черные полосочки может это особенность экрана? (маленькое разрешение)
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

Вот как закрашивать пиксели я понял.
А как вывести на экран строку?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Bonio писал(а):Черные полосочки может это особенность экрана? (маленькое разрешение)
Да нет, должен заливать каждый пиксель. А у Вас получается так: один пиксель заливает нужным цветом, а следующий - черным (0x00). Смотрите программу, где-то должен быть прокол.
Bonio писал(а):А как вывести на экран строку?
Придется самостоятельно массивчик писать, который потом нужно будет выгружать на дисплей подобно этим полосам.
Я делаю так: в фотошопе пишу нужный текст, вырезаю, потом сохраненное изображение конвертирую в массив с помощью Nokia Image Creator (вот здесь возьмите). А после - в нужном месте выгружаю этот массив в память дисплея.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

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

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

И ещё спросить хотел, как можно добиться моментальной смены картинки, только увеличением частоты процессора?
Нельзя одной командой залить например заданный квадрат? надо заливать отдельно каждый пиксел?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Bonio писал(а):как можно добиться моментальной смены картинки, только увеличением частоты процессора?
Увеличением частоты тактового сигнала используемого интерфейса - там SPI, если я не ошибаюсь?
Однако при этом нужно учитывать скорость, которую способен поддерживать контроллер дисплея.
Bonio писал(а):Нельзя одной командой залить например заданный квадрат? надо заливать отдельно каждый пиксел?
Можно ограничить заданный квадрат специальными командами (установка координат x и y), а затем залить каждый пиксель в заданной области. Но заливка будет попиксельной - это да.
Bonio писал(а):спасибо за помощь.
Совершенно не за что. Обращайтесь. =)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

Что такое может быть? Хочу залить картинку во весь экран, объявляю массив размером 8080 (101x80), прошиваю, и вобще ничего не работает, даже экран не инициализируется.
Притом, если объявить массив размером например 1010 (картинка 101x10) все прекрасно работает, картинка выводится.
Опытным путем выяснил, что МК перестает работать при объявлении очень длинного массива.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Ну так...МК какой? Тинька?
А массив оный получается объемом 8080 байт. У контроллера попросту не хватает памяти для него (это то, о чем я говорил в самом начале нашей беседы).
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

atmega8 и atmega32, и там и там такая фигня. оперативки у них 1 и 2 кб соответственно, вроде в любом случае должно хватать?

P.S. Чето туплю, оперативки не хватает. теперь все понятно.
А как же тогда вывести картинку во весь экран? На куски разбивать?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

А куда шьете массив? Загоняйте во флэш, что ли. Мега32 должна нормально работать.
Я вообще стараюсь подобные данные во внешней памяти хранить.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

Массив прямо в программе объявляю. это ведь и есть флеш?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Ну вообще зависит от настроек программы, которую Вы используете для прошивки. В общих случаях так и есть. А иногда нужно ставить галочку "сохранить константы во flash", и т.д. Тут уж я не знаю.
Но если бы у Вас массив записывался во флэш, то с Мегой 32 проблем точно не было бы - у нее 32кБ флэш, этого с головой хватает.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

Интересно. Прошиваю через avrdude, командой avrdude -p atmega32 -P lpt1 -c stk200 -U flash:w:main.hex

Как я понял, в процессе работы микроконтроллера, объявленные значения подгружаються в оперативку.
Такой большой массив в оперативку попросту не помещается, следовательно программа не работает.
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

Да нет, у Вас скорее массив в оперативке объявлён.
Кроме того, Си не позволяет использовать всю оперативу до конца - http://www.nongnu.org/avr-libc/user-manual/malloc.html
Giggity giggity goo!
Ответить

Вернуться в «Периферия»