Перейти к содержанию
    

Вывод на экран bitmap AVR u8glib

Добрый день!

Помогите разобраться с выводом графической информации на дисплей 128x64. Использую библиотеку u8glib и Atmel Studio 7.

Вывод текста, графики работает. А вывод картинки bmp нет.

trouble_lcs.png

 

Вот кусок кода:

 

void draw(void) {

u8g_DrawXBM(&u8g,0,0,128,64,pic_bmp);
}

//Блок вывода графической информации
  for(;;)
  {

	  u8g_FirstPage(&u8g);
	  do
	  {
			draw();
	  } while ( u8g_NextPage(&u8g) );
	  u8g_Delay(100);

 }

 

Файл pic_bmp.h вот такой:

 


//static const unsigned char __attribute__ ((progmem)) pic_bmp[]={
//const unsigned char __attribute__ ((progmem)) pic_bmp[]={
//const uint8_t*const pic_bmp[] PROGMEM ={
	const uint8_t pic_bmp[] ={
128,64,
0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0,
0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0x7c, 0x7e, 0x3e, 0x3e, 0x3e, 0x3f, 0x1f, 0x1f,
0x1f, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f,
0x1f, 0x1f, 0x3e, 0x3e, 0x3e, 0x7e, 0x7c, 0x7c, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0,
0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0x7f, 0x3f, 0x1f, 0x0f,
0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x07, 0x0f,
0x1f, 0x3f, 0x7f, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x08, 0xf8,
0x88, 0x88, 0x88, 0xd8, 0x70, 0x00, 0x08, 0xf8, 0x08, 0x00, 0x00, 0xe0, 0x30, 0x18, 0x08, 0x08,
0x08, 0x10, 0x38, 0x00, 0x00, 0x08, 0xf8, 0x88, 0x88, 0x88, 0xd8, 0x70, 0x00, 0x08, 0xf8, 0x88,
0x88, 0x88, 0x88, 0x70, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0xf8, 0x08, 0x00, 0x00, 0x08, 0x88, 0x88, 0xc8, 0x08, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0f, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x08, 0x0f,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x03, 0x06, 0x0c, 0x08, 0x08,
0x08, 0x04, 0x02, 0x00, 0x00, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x08,
0x01, 0x03, 0x06, 0x08, 0x08, 0x00, 0x03, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x06,
0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xfe, 0xfc, 0xf8, 0xf0,
0xe0, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xf0,
0xf8, 0xfc, 0xfe, 0x7f, 0x7f, 0x3f, 0x1f, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03,
0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3e, 0x3e, 0x7e, 0x7c, 0x7c, 0xfc, 0xf8, 0xf8, 0xf8,
0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8,
0xf8, 0xf8, 0xfc, 0x7c, 0x7c, 0x7e, 0x3e, 0x3e, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,

0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff,


};

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


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

Помогите разобраться с выводом графической информации на дисплей 128x64. Использую библиотеку u8glib и Atmel Studio 7.

Вывод текста, графики работает. А вывод картинки bmp нет.

возможно вы не тот формат bmp скармливаете либе..

для начала, очистите массив до 0x00, а в первом байте для экранной области впишите 0x01

потом 0x80

потом 0x00, 0x01

после этого можно будет понять куда и как выводятся пиксели этой либой..

у формата bmp сначала идет заголовок и изображение хранится перевернутым - надеюсь либа это учитывает при работе с вашим массивом..

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


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

Спасибо за подсказку, я попробую.

Формат bmp вроде как конвертировался конвертером в код....

Меня еще смущают строки, я их закомментил, объявление массива с PROGMEM и без. И в первом посте я указал, что юзаю Atmel Studio 7.

С PROGMEM выводятся только несколько точек в одно полоску, в верхней части экрана. А без PROGMEM, картинка, которую я прикрепил.

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


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

Спасибо за подсказку, я попробую.

Формат bmp вроде как конвертировался конвертером в код....

Меня еще смущают строки, я их закомментил, объявление массива с PROGMEM и без. И в первом посте я указал, что юзаю Atmel Studio 7.

С PROGMEM выводятся только несколько точек в одно полоску, в верхней части экрана. А без PROGMEM, картинка, которую я прикрепил.

не знаю, что там за либа в студии, я в свое время писал всю поддержку самостоятельно..

вот ближайший тред с подобной тематикой

http://forum.arduino.cc/index.php?topic=151669.0

там все заработало..

 

нужен bmp в формате b/w

там сказано, что массив в памяти это так

static unsigned char u8g_logo_bits[] = {

если во флеш (ROM), то

static unsigned char u8g_logo_bits[] U8G_PROGMEM = {

 

и все же я бы посоветовал начать с одной точки и пустого экрана, чтобы понять работоспособность кода..

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


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

Немного разобрался. Во-первых, действительно формат BMP не правильный. Взял массив из примера, по Вашей ссылке, все заработало:

Goog_screen.png

 

Что касается загрузки массива во Flash, то компилятор не воспринимает запись static без служебного слова const

только так: "static const unsigned char pic_bmp[] PROGMEM ={ "

или так: "static const unsigned char __attribute__ ((progmem)) pic_bmp[]={ "

В обоих случая результата нет:

trouble_lcs_progmem.png

 

 

В любом случае, спасибо за разъяснения. Вывод в память работает, пока этого достаточно. Спасибо!

 

 

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


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

Что касается загрузки массива во Flash, то компилятор не воспринимает запись static без служебного слова const

В любом случае, спасибо за разъяснения. Вывод в память работает, пока этого достаточно. Спасибо!

угу, заработало - уже праздник..

что за ошибку пишет компилятор? по ней можно попробовать понять чего не так или чего не хвататет..

а вместо PROGMEM не пробовали U8G_PROGMEM?

еще, как версия, либа не умеет работать с флешом - надо читать описание или смотреть п/п в библиотеке..

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


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

угу, заработало - уже праздник..

что за ошибку пишет компилятор? по ней можно попробовать понять чего не так или чего не хвататет..

а вместо PROGMEM не пробовали U8G_PROGMEM?

еще, как версия, либа не умеет работать с флешом - надо читать описание или смотреть п/п в библиотеке..

 

Попробовал U9G_PROGMEM, чуда не произошло.

 

Компилятор просит либо:

static const unsigned char pic_bmp[] U8G_PROGMEM ={

либо:

static const unsigned char __attribute__ ((progmem)) pic_bmp[]={

 

--------------

Чудо всё-таки произошло:

static const unsigned char __attribute__ ((u8g_progmem)) pic_bmp[]={

Goog_screen.png

 

Еще раз спасибо!

 

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


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

возможно вы не тот формат bmp скармливаете либе..

 

Подскажите кодировщик какой-нибудь из bmp в код, то, что нашел - никак не хочет корректно выводить на экран. (картинка из примера, выводится нормально, а ни одна из моих не выводится)

 

 

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


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

Разобрался.

image.png

 

Картинку сохранил в формате xbm и все заработало.

 

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


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

У AVR указатели в progmem и обычные не совместимы. Так что одна и таже процедура не может работать с обоими типами указателей. Смотрите интерфейсы в u8glib

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...