gorlanovmax

CVAVR и дисплей NOKIA 6610

2 сообщения в этой теме

gorlanovmax    2

Доброго времени суток,

Мучаю дисплей 6610 от Нокии.

У реалии еще не пришел.

Практикуюсь пока на протеусе.

Все библиотеки и примеры, которые я нашел, созданы в WinAVR/

Адаптировал под CVAVR.

Но имею проблему с цветом.

При первой заливкой фоном все ок.

Картинка

А далее начинается полтергейст

Следующий прямоугольник начинается с пиксела предыдущего цвета,

Картинка

который закрывается по окончанию вывода прямоугольника

Картинка

А при выводе линии и текста, вообще все красиво

Картинка

Причем чередуются три цвета.

Код весь пересмотрел.

Не могу понять в чем проблема.

Во вложении архив с проектом, библиотеками и моделью в протеусе

V7.rar

Изменено пользователем gorlanovmax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gorlanovmax    2

Собственно я уверился в своих предположениях.

Проштудировал даташит на контроллер.

Переключил дисплей в режим 8-ми битного цвета.

Поменял переменные цветов с int на unsigned char

И подправил процедуры вывода пикселов следующим образом:

было

void nlcd_Pixel(unsigned char x, unsigned char y, int color_2)
{
   nlcd_GotoXY(x,y);
   nlcd_SendByte(CMD_LCD_MODE,LCD_PHILLIPS_RAMWR);                             
   CS_LCD_RESET;
  
   nlcd_SendByte(DATA_LCD_MODE, (unsigned char)((color_2>>4)&0x00FF) );
   nlcd_SendByte(DATA_LCD_MODE, (unsigned char)(((color_2&0x0F)<<4)|0x00) );
  
   CS_LCD_SET;
   nlcd_SendByte(CMD_LCD_MODE,LCD_PHILLIPS_NOP);
}

стало

void nlcd_Pixel(unsigned char x, unsigned char y, unsigned char color_2)
{
   nlcd_GotoXY(x,y);
   nlcd_SendByte(CMD_LCD_MODE,LCD_PHILLIPS_RAMWR);                             
   CS_LCD_RESET;
  
   nlcd_SendByte(DATA_LCD_MODE, color_2);

  
   CS_LCD_SET;
   nlcd_SendByte(CMD_LCD_MODE,LCD_PHILLIPS_NOP);
}

 

Все заработало корректно.

Но имеем только 256 цветов.

Не понимаю, чем CVAVR не нравится форма посылки двух байтов цвета при 12-битном режиме.

 

Т.е. некорректно отрабатывают следующие строки

   nlcd_SendByte(DATA_LCD_MODE, (unsigned char)((color_2>>4)&0x00FF) );
   nlcd_SendByte(DATA_LCD_MODE, (unsigned char)(((color_2&0x0F)<<4)|0x00) );

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас