Отговори на тема  [ 15 мнения ] 
Проблем с визуализация на графика на графичен дисплей 128х64 
Автор Съобщение
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Проблем с визуализация на графика на графичен дисплей 128х64
Здравейте,
Взех наскоро един дисплей 128х64 с контролер ST7565p

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

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

Изображение

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

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

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


Нед Окт 30, 2011 8:59 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Ное 22, 2004 11:24 pm
Мнения: 1923
Местоположение: Габрово
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Мисля си, че проблема ти е в SPI... :wink:


Нед Окт 30, 2011 10:54 am
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
delete


Последна промяна klez на Нед Окт 30, 2011 11:11 am, променена общо 1 път



Нед Окт 30, 2011 11:03 am
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение 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;
}


Нед Окт 30, 2011 11:08 am
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Проблема се оказа, че наистина е от недостатъчно RAM памет.
По начина по който съм декларирал масива със символите, при зареждане на програмата той се зарежда в RAM-та и в един момент тя се препълва.
За да се избегне, трябва да укажа да е записан в Флаш-а и да се чете от флаша със PROGMEM, pgmspace.h библиотеката, и някоя от функциите за четене от флаша.

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


Нед Окт 30, 2011 6:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Ное 22, 2004 11:24 pm
Мнения: 1923
Местоположение: Габрово
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Ъ?

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


Нед Окт 30, 2011 8:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

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


Нед Окт 30, 2011 9:25 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Точно така го направих и аз, като изключим амперсанда преди името на масива.

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


Нед Окт 30, 2011 9:30 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.
А PROGMEM указва, че е в флаша и после с pgm_read_byte, pgm_read_word, pgm_read_dword и т.н. извикваш от флаша, само че съм пропуснал момента, че трябва да има амперсанд пред името на масива ;)


Нед Окт 30, 2011 9:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Ное 22, 2004 11:24 pm
Мнения: 1923
Местоположение: Габрово
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
klez написа:
Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.


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

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


Нед Окт 30, 2011 11:00 pm
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
И аз мислех като теб :) явно има защо... Но уви. и константите ги третира като променливи, просто които не могат да бъдат променяни.
Писането на константи във флаша е по скоро близко на писането на константи във EEPROM-а


Нед Окт 30, 2011 11:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Tisho написа:
klez написа:
Тишо, не.
const указва, че е константа а не променлива и не можеш да я променяш.


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

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


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


Пон Окт 31, 2011 8:05 am
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Харвард е да :).. там са си разделени в отделни адресни пространства


Пон Окт 31, 2011 9:53 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Ное 22, 2004 11:24 pm
Мнения: 1923
Местоположение: Габрово
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
klez написа:
И аз мислех като теб :) явно има защо... Но уви. и константите ги третира като променливи, просто които не могат да бъдат променяни.
Писането на константи във флаша е по скоро близко на писането на константи във EEPROM-а


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


Вто Ное 01, 2011 10:55 am
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Проблем с визуализация на графика на графичен дисплей 12
Да между другото си адски прав, и аз четох, че дори за Атмел някои от компилаторите като го декларираш като CONST автоматично го мятат в флаша.
Както и да е, доволен съм, изключително лесно стана цялата работа, по описания пишеше че било сложно :)
Разбира се, без помощта на Мичев, дълго щях да се въртя и мъча докато разбера къде е проблема, но важното е, че стана ;)


Вто Ное 01, 2011 1:35 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 15 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


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

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни