Юзаем дисплеи от сотовых и других потаскунчиков.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Спасибо. А я и не заметил в коментах параметр поворота. А какой программой лучше конвертировать картинки?
Владимир
Контактная информация:
Реклама
Родился
Сообщения: 16
Зарегистрирован: Пт дек 24, 2010 09:31:06

Сообщение uzamar »

vlad145 писал(а):Спасибо. А я и не заметил в коментах параметр поворота. А какой программой лучше конвертировать картинки?
Любой какую найдете, хоть ImgConvert. А лучше прикрутить SD-карту и выводить BMP.
Реклама
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

uzamar писал(а):
vlad145 писал(а):Спасибо. А я и не заметил в коментах параметр поворота. А какой программой лучше конвертировать картинки?
Любой какую найдете, хоть ImgConvert. А лучше прикрутить SD-карту и выводить BMP.
Я где то давно натыкался на функцию вывода BMP только под BASIC, а под CVAVR мне не попадалась.
Владимир
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

Картинки много места во флеш памяти занимают. Есть один конвертер который сжимает картинки. ScreenBin9 фамилия у него.
Гуглится. Надо под него процедуру вывода сжатой картинки написать. Рисованные картинки хорошо сжимает. Растровые слабовато. Ну и конечно их лучше в SD картах хранить, а карты подключаются через SPI . И дисплей через SPI . Правда в MEGAx всего один SPI интерфейс аппаратный. Вот потому я и XMEGA юзаю. Перспективней.
Общаюсь на ТЫ. Без расшаркиваний.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

А если во внешней памяти хранить, типа AT45DB161, для картинок памяти хватит.
Владимир
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

vlad145 писал(а):А если во внешней памяти хранить, типа AT45DB161, для картинок памяти хватит.
Да легко. Про SPI я уже писал, останется только какую-то файловую систему написать. Что б знать откуда какую картинку выковыривать.
Общаюсь на ТЫ. Без расшаркиваний.
Реклама
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

А как можно использовать шрифты разных размеров, или есть функция увеличения? Для дисплея nokia 1100 видел такую функцию, а для данного можно её адаптировать?
Владимир
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

vlad145 писал(а):А как можно использовать шрифты разных размеров, или есть функция увеличения? Для дисплея nokia 1100 видел такую функцию, а для данного можно её адаптировать?
Не знаю про какую функцию идет речь, но думаю что врятли. Нужно создавать другую таблицу ASCII с другим размером шрифта. Процедуру же вывода можно оставить прежней, изменив значения
#define CHAR_W 8
#define CHAR_H 14
на соответствующие данным таблицы.
Прикрепляю програмки создания фонтов. Сам их не юзал. Попробуй.
Вложения
s65fc8x14.zip
(253.91 КБ) 284 скачивания
s65fc8x12.zip
(253.91 КБ) 257 скачиваний
Последний раз редактировалось Alex62 Вт авг 23, 2011 15:16:41, всего редактировалось 1 раз.
Общаюсь на ТЫ. Без расшаркиваний.
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Alex62 писал(а):
vlad145 писал(а):А как можно использовать шрифты разных размеров, или есть функция увеличения? Для дисплея nokia 1100 видел такую функцию, а для данного можно её адаптировать?
Не знаю про какую функцию идет речь, но думаю что врятли. Нужно создавать другую таблицу ASCII с другим размером шрифта. Процедуру же вывода можно оставить прежней, изменив значения
#define CHAR_W 8
#define CHAR_H 14
на соответствующие данным таблицы.
Но если я правильно понял изменив данные параметры мы все равно будем иметь один шрифт, только другого размера. А два получается не как?
Ас нокиевским дисплеем я ошибся, не 1100 а 3310. Там есть функция LcdStr в которой есть параметр LcdFontSize, изменяя который получаем шрифт двойного размера.
Владимир
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

Ну почему же. Микроконтроллер очень гибкий инструмент. Можно (как в том примере вывода картинки с ротацией) добавить в процедуру вывода символа еще один параметр, и в зависимости от его значения выводить шрифт того или иного размера. Причем их может быть не 2, а много размеров.

PS. Не надо так обширно цитировать. Ветка разрастется, и будет сложно найти полезное зерно.
Общаюсь на ТЫ. Без расшаркиваний.
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Для меня это видимо ещё сложно изменить параметр в функции, тем более надо знать какой.
Владимир
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

Проанализируй процедуру lcd_picture() и по аналогии:
вводим переменную char font, и создаем условие.

void put_char(char x, char y, char c, unsigned int color, char rot, char font)
.......
if (font==1)
{
вывод шрифта одного размера
}
else
{
вывод шрифта другого размера
};
Это для двух размеров. Для большего количества используй переключатель switch/

switch(font)
{
default:
case 0:
первый размер;
case 1:
второй размер;
case 2:
третий размер;
}

Ну и для всех размеров надо массив символов писать нужного размера.
Последний раз редактировалось Alex62 Вт авг 23, 2011 16:02:57, всего редактировалось 1 раз.
Общаюсь на ТЫ. Без расшаркиваний.
Родился
Сообщения: 16
Зарегистрирован: Пт дек 24, 2010 09:31:06

Сообщение uzamar »

Alex62 писал(а):Картинки много места во флеш памяти занимают. Есть один конвертер который сжимает картинки. ScreenBin9 фамилия у него.
Гуглится. Надо под него процедуру вывода сжатой картинки написать. Рисованные картинки хорошо сжимает. Растровые слабовато. Ну и конечно их лучше в SD картах хранить, а карты подключаются через SPI . И дисплей через SPI . Правда в MEGAx всего один SPI интерфейс аппаратный. Вот потому я и XMEGA юзаю. Перспективней.
А я STm32 юзаю, еще более перспективней. С месяц назад подключил к нему дисплей от какого-то MP4 240x320 (HX8347) по 16 битной шине + карточку SD + вывод BMP. В планах сделать бортовик на свое авто.
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

uzamar писал(а):А я STm32 юзаю, еще более перспективней.
Наверное. Только я еще из Атмеловских восьмиразрядников не вырос. Опыта поднакоплю, и тогда.
А пока китайца 320х240 подключаю к XMEGA A3. Благо их дешевеньких валом на разборках.
Общаюсь на ТЫ. Без расшаркиваний.
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Alex62 писал(а):Проанализируй процедуру lcd_picture() и по аналогии:
вводим переменную char font, и создаем условие.

void put_char(char x, char y, char c, unsigned int color, char rot, char font)
.......
.......

Ну и для всех размеров надо массив символов писать нужного размера.
Спасибо, буду шерстить.
Владимир
Контактная информация:
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Alex62 писал(а):
uzamar писал(а):А я STm32 юзаю, еще более перспективней.
Наверное. Только я еще из Атмеловских восьмиразрядников не вырос. Опыта поднакоплю, и тогда.
А пока китайца 320х240 подключаю к XMEGA A3. Благо их дешевеньких валом на разборках.
У меня есть в наличии STM32 на базе ARM32F100, только с какой стороны подходить пока не знаю.
Владимир
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Пт дек 24, 2010 09:31:06

Сообщение uzamar »

Alex62 писал(а):А пока китайца 320х240 подключаю к XMEGA A3.
Какой контроллер дисплея? У меня, если надо, есть для HX8347 могу скинуть.
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Чт ноя 19, 2009 13:37:21
Откуда: Минск

Сообщение Alex62 »

Скорее всего SSD1298 . В принцыпе даташит есть, инициализацию тоже накопал, думаю проблем быть не должно. Одна проблема - время. Нехватат.
Общаюсь на ТЫ. Без расшаркиваний.
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Alex62 писал(а):
void put_char(char x, char y, char c, unsigned int color, char rot, char font)
.......
if (font==1)
..........
Пытаюсь поправить данный код для использования двух шрифтов.
Пишу в CVAVR вот так:

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

// поместить символ в графическую память дисплея
void put_char(char x, char y, char c, unsigned int color, char rot, char Font)
{
  char h,ch,p,mask;

  CS= 0;
  
  switch(rot)
  {
    default:
    case 0:
      lcd_reg(0x05);lcd_dat(0x0038);
      lcd_reg(0x17);lcd_dat8(x+CHAR_W-1, x);
      lcd_reg(0x16);lcd_dat8(y+CHAR_H-1, y);
      lcd_reg(0x21);lcd_dat8(x,y);
      lcd_reg(0x22);
      lcd_write8(0x76);  
      break;
    case 1:
      lcd_reg(0x05);lcd_dat(0x0030);
      lcd_reg(0x16);lcd_dat8(x+CHAR_W-1, x);
      lcd_reg(0x17);lcd_dat8(y+CHAR_H-1, y);
      lcd_reg(0x21);lcd_dat8(y, x);
      lcd_reg(0x22);
      lcd_write8(0x76);  
      break;
  }


  if (Font==1) 
  {
         for (h=0; h<CHAR_H; h++) // every column of the character
     {        
       if (rot==1)
          ch=ascii_tab[ c-32 ][h];    
          else
          ch=ascii_tab[ c-32 ][CHAR_H-h-1];
    
        mask=0x80;
        for (p=0; p<CHAR_W; p++)  // write the pixels
        {
          if (ch&mask)
          {
            lcd_write(color);                
          }
          else
          {
            lcd_write(bgcolor);
          }
          mask=mask/2;
        }  // for p 
        if (c>127) {
        c=c-57;          //убираем отсутствующую часть таблицы ASCII
        };
     }
    
  }
  else  
  {    
         for (h=0; h<CHAR_H; h++) // every column of the character
     {        
       if (rot==1)
          ch=ascii_tab2[ c-32 ][h];    
          else
          ch=ascii_tab2[ c-32 ][CHAR_H-h-1];
    
        mask=0x80;
        for (p=0; p<CHAR_W; p++)  // write the pixels
        {
          if (ch&mask)
          {
            lcd_write(color);                
          }
          else
          {
            lcd_write(bgcolor);
          }
          mask=mask/2;
        }  // for p
     }
    
    };

  CS= 1;  // deselect display    

}

// записать строку, начиная с координат x, y, цветом color и ориентацией orient
// если orient=0, то горизонтально, если =1, то вертикально
void put_string(unsigned char x, unsigned char y, char *str, unsigned int color, unsigned char orient)
{
  j=0;
  while (j<strlen(str))
  {
    put_char(x+j*CHAR_W,y,str[j],orient, color);   //  0 deg. rotated
    j++;
  }
}
При компиляции выпадает ошибка:

too few arguments in function call

В какую сторону рыть ума не приложу. Выручайте!
Владимир
Контактная информация:
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт мар 06, 2009 22:54:37
Откуда: Курган

Сообщение vlad145 »

Уважаемый Alex62. Ещё одна засада по Вашему проекту. Я не могу вывести закрашенную область, просто ничего не выводится. А если выводить квадрат с закрашиванием, то квадрат рисуется, а закрашивание процентов на 10. :dont_know:
Владимир
Контактная информация:
Ответить

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