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

 
 
 
Reply to this topicStart new topic
> Вывод на экран bitmap AVR u8glib
RN3QLQ
сообщение Dec 8 2016, 14:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



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


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

CODE

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 вот такой:

CODE


//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,


};
Go to the top of the page
 
+Quote Post
Jury093
сообщение Dec 8 2016, 20:11
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(RN3QLQ @ Dec 8 2016, 17:09) *
Помогите разобраться с выводом графической информации на дисплей 128x64. Использую библиотеку u8glib и Atmel Studio 7.
Вывод текста, графики работает. А вывод картинки bmp нет.

возможно вы не тот формат bmp скармливаете либе..
для начала, очистите массив до 0x00, а в первом байте для экранной области впишите 0x01
потом 0x80
потом 0x00, 0x01
после этого можно будет понять куда и как выводятся пиксели этой либой..
у формата bmp сначала идет заголовок и изображение хранится перевернутым - надеюсь либа это учитывает при работе с вашим массивом..
Go to the top of the page
 
+Quote Post
RN3QLQ
сообщение Dec 8 2016, 20:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



Спасибо за подсказку, я попробую.
Формат bmp вроде как конвертировался конвертером в код....
Меня еще смущают строки, я их закомментил, объявление массива с PROGMEM и без. И в первом посте я указал, что юзаю Atmel Studio 7.
С PROGMEM выводятся только несколько точек в одно полоску, в верхней части экрана. А без PROGMEM, картинка, которую я прикрепил.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Dec 8 2016, 21:11
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(RN3QLQ @ Dec 8 2016, 23:25) *
Спасибо за подсказку, я попробую.
Формат 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 = {

и все же я бы посоветовал начать с одной точки и пустого экрана, чтобы понять работоспособность кода..
Go to the top of the page
 
+Quote Post
RN3QLQ
сообщение Dec 9 2016, 06:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



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


Что касается загрузки массива во Flash, то компилятор не воспринимает запись static без служебного слова const
только так: "static const unsigned char pic_bmp[] PROGMEM ={ "
или так: "static const unsigned char __attribute__ ((progmem)) pic_bmp[]={ "
В обоих случая результата нет:



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

Go to the top of the page
 
+Quote Post
Jury093
сообщение Dec 9 2016, 08:32
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(RN3QLQ @ Dec 9 2016, 09:45) *
Что касается загрузки массива во Flash, то компилятор не воспринимает запись static без служебного слова const
В любом случае, спасибо за разъяснения. Вывод в память работает, пока этого достаточно. Спасибо!

угу, заработало - уже праздник..
что за ошибку пишет компилятор? по ней можно попробовать понять чего не так или чего не хвататет..
а вместо PROGMEM не пробовали U8G_PROGMEM?
еще, как версия, либа не умеет работать с флешом - надо читать описание или смотреть п/п в библиотеке..
Go to the top of the page
 
+Quote Post
RN3QLQ
сообщение Dec 9 2016, 12:14
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



Цитата(Jury093 @ Dec 9 2016, 11:32) *
угу, заработало - уже праздник..
что за ошибку пишет компилятор? по ней можно попробовать понять чего не так или чего не хвататет..
а вместо 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[]={


Еще раз спасибо!
Go to the top of the page
 
+Quote Post
RN3QLQ
сообщение Dec 9 2016, 14:54
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



Цитата(Jury093 @ Dec 8 2016, 23:11) *
возможно вы не тот формат bmp скармливаете либе..


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

Go to the top of the page
 
+Quote Post
RN3QLQ
сообщение Dec 9 2016, 20:18
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-11-05
Из: Санкт-Петербург
Пользователь №: 10 908



Разобрался.


Картинку сохранил в формате xbm и все заработало.
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 12 2016, 10:02
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



У AVR указатели в progmem и обычные не совместимы. Так что одна и таже процедура не может работать с обоими типами указателей. Смотрите интерфейсы в u8glib
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 11:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01457 секунд с 7
ELECTRONIX ©2004-2016