Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с визуализация на графика на графичен дисплей 128х64
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9480
Страница 1 от 1

Автор:  klez [ Нед Окт 30, 2011 8:59 am ]
Заглавие:  Проблем с визуализация на графика на графичен дисплей 128х64

Здравейте,
Взех наскоро един дисплей 128х64 с контролер ST7565p

Почнах да му правя шрифтове използвайки Paint + LCD assistant за конвертиране в HEX.

Всичко е окей, само че като почна да изобразявам по-големи графични изображения и се получава този ефект:

Изображение

Контролера е Atmega8, дисплеят се връзва по SPI.
Почти на 100% съм сигурен, че е от недостатъчно RAM на контролера но реших все пак да питам.
с първите 2 символа нямам проблем.

Символите са 32 х 48 пиксела т.е. общо по 192 8-битови регистъра на символ.

П.С. Размазването с всяко стартиране се различава, т.е. не е повтарящо се

Автор:  Tisho [ Нед Окт 30, 2011 10:54 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Мисля си, че проблема ти е в SPI... :wink:

Автор:  klez [ Нед Окт 30, 2011 11:03 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

delete

Автор:  klez [ Нед Окт 30, 2011 11:08 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Хм... вчера му дигнах малко честотата, ще пробвам да я намаля.
и с по-ниска пак проблеми, какво по точно в SPI-то може да е. Всичко друго работи нормално. Сложих време 4 секунди между отделните символи с 1 и 2 никакъв проблем на 3тия деклариран в масива гърми. "1" и "2" мога да си ги изпиша колкото пъти искам без никакъв проблем. но напиша ли 3ката и край. Пробвах вместо 3ката да сложа някаква графика в отделен масив... ако е по големичка пак гърми по същият начин

Декларирането на графиката е следното (като продължава надолу за Digit2 и Digit3)
(6 реда (8бита 'високи'), по 32 колони на ред)

Код:
static const unsigned char bigFont[3][6][32] = {


0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xE0, 0xE0, 0xF0, 0xF8, 0xF8, //Ред1
0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x3E, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, //Ред2
0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, //Ред3
0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, //Ред4
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, //Ред5
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, //Ред6
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, //Край на Цифра 1


Визуализирането му е по следният начин:

Код:
void j5lcd_putcBig(int ch, int width, int height) {
   int localX = currentX;
   int localY = currentY;
   int i,j; //Initialize variable for loop
   for (i=0;i<height;i++) {  //Цикъл за обхождане по редове
      j5lcd_gotoColumn(localX); //Връщане в началото на реда (localX указва на коя точно колона сме започнали изписването)
      j5lcd_gotoPage(localY+i); //Отиване на следващ ред
      for (j=0;j<width;j++) { //Цикъл за обжождане по колони
         j5lcd_Data(bigFont[ch][i][j]); //Изпращане на Информация към дисплея от 3мерен масив bigFont[][][]
      }
   }
   currentY=localY;
}

Автор:  klez [ Нед Окт 30, 2011 6:33 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Проблема се оказа, че наистина е от недостатъчно RAM памет.
По начина по който съм декларирал масива със символите, при зареждане на програмата той се зарежда в RAM-та и в един момент тя се препълва.
За да се избегне, трябва да укажа да е записан в Флаш-а и да се чете от флаша със PROGMEM, pgmspace.h библиотеката, и някоя от функциите за четене от флаша.

Уви нещо не ми се получи :)
Чете от флаша обаче явно указателя не посочва точния адрес, щото чете някви други байтове, а не точно тези които ми трябват на мен. Някой ползвал ли е PROGMEM, да държи дълги масиви във Флаш-а, че имам 2-3 въпроса

Автор:  Tisho [ Нед Окт 30, 2011 8:45 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Ъ?

Нали това const точно в флаш-а го праща тоя масив при компилиране...

Автор:  michev [ Нед Окт 30, 2011 9:25 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Ами.. като сметнеш колко байта заема масива, то се оказва че не ти достига РАМ :)
Относно другото ти питане -
Код:
unsigned char bigFont[3][6][32] PROGMEM = {
....
...
j5lcd_Data( pgm_read_byte(&(bigFont[ch][i][j])) ); //Изпращане на Информация към дисплея от 3мерен масив bigFont[][][]

Автор:  klez [ Нед Окт 30, 2011 9:30 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Точно така го направих и аз, като изключим амперсанда преди името на масива.

Слава тебе!
сложих амперсанда и тръгна :)

Автор:  klez [ Нед Окт 30, 2011 9:57 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.
А PROGMEM указва, че е в флаша и после с pgm_read_byte, pgm_read_word, pgm_read_dword и т.н. извикваш от флаша, само че съм пропуснал момента, че трябва да има амперсанд пред името на масива ;)

Автор:  Tisho [ Нед Окт 30, 2011 11:00 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

klez написа:
Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.


Е да де, а като е константа чии го дърви в рам-а? 8O

Това ще да е някаква атмелска особенност... :roll:

Автор:  klez [ Нед Окт 30, 2011 11:32 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

И аз мислех като теб :) явно има защо... Но уви. и константите ги третира като променливи, просто които не могат да бъдат променяни.
Писането на константи във флаша е по скоро близко на писането на константи във EEPROM-а

Автор:  bateAz [ Пон Окт 31, 2011 8:05 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Tisho написа:
klez написа:
Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.


Е да де, а като е константа чии го дърви в рам-а? 8O

Това ще да е някаква атмелска особенност... :roll:


Харвардска архитектура ?

Автор:  klez [ Пон Окт 31, 2011 9:53 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Харвард е да :).. там са си разделени в отделни адресни пространства

Автор:  Tisho [ Вто Ное 01, 2011 10:55 am ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

klez написа:
И аз мислех като теб :) явно има защо... Но уви. и константите ги третира като променливи, просто които не могат да бъдат променяни.
Писането на константи във флаша е по скоро близко на писането на константи във EEPROM-а


В момента правя едно чудо на техниката с RX62N и по този начин съм наврял цяла веб страница в флаш-а(const unsigned char ...) около 200кб е. 8)
Явно при различните архитектури(компилатори) const се възприема различно, не съм правил нещо с атмел - от това което четох из разните даташиит-ове и презентации ми се струват доста недодялани.

Автор:  klez [ Вто Ное 01, 2011 1:35 pm ]
Заглавие:  Re: Проблем с визуализация на графика на графичен дисплей 12

Да между другото си адски прав, и аз четох, че дори за Атмел някои от компилаторите като го декларираш като CONST автоматично го мятат в флаша.
Както и да е, доволен съм, изключително лесно стана цялата работа, по описания пишеше че било сложно :)
Разбира се, без помощта на Мичев, дълго щях да се въртя и мъча докато разбера къде е проблема, но важното е, че стана ;)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/