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

SED1335,PIC18F4550 и LCD320x240

Привет народ.Вот решил я слепить себе нечто из указанных в теме компонентов.Нарисовал и изготовил макетку, красиво всё распаял и написал из надёрганных в сети кусков маленькую програмку для управления ЖКИ. Вначале, после нудного изучения даташитов никак не мог инициализировать ЖКИ, но потом разобрался что к чему и наконец он начал подавать признаки жизни и засветился.

Компилятор, который я пользую - CCS, имеет в своём составе файл SED1335.C , но как я не пытался приспособить его, так и не смог.Порывшись в сети,я нашёл другой файл с таким же названием, но вроде бы не для ПИКов, а для чего-то другого.Однако , слегка подшаманив его, я смог встроить его в прогу и он заставил таки выдавать на экран символы в текстовом режиме(даже с возможностью размещения в заданое место) и переключаться в графический режим.

И на этом всё и закончилось.

Все попытки нарисовать линию или круг или просто точку,несмотря на множество примеров, я так и не смог. Позаимствовав из старого файла процедуру

 

void glcd_pixel(int16 x, int16 y, int1 color)

{

int8 data;

int16 addr;

// Calculate the byte address containing the pixel

addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8);

// Read the byte of data at the address

data = getData(addr);

// Turn the pixel on or off

if(color == ON)

bit_set(data, 7 - x%8);

else

bit_clear(data, 7 - x%8);

// Write the new data byte to display memory

setData(addr, data);

}

 

я попробовал нарисовать на экране пиксель, но он вроде как нарисовался но разместился не в тех координатах, которые я указывал.Как я понимаю, за размещение отвечает строка

//GLCD_GRAPHICS_ADDR- нач. адрес- 1200, GLCD_WIDTH- кол во символов в строке- 320

addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8);

Может кто из вас раскомментирует эту странную формулу и подправит её, если она неправильная.

Изменено пользователем andreichk

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


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

Ура !!! Заработало !!! Подправил биты инициализации.Умею нарисовать кружёчки и линии. И даже примитивный осциллограф получился.Берёт сигнал с АЦП1, а АЦП0 как развёртка, получается хреновенько, но как сказал известный демократ- ПРОЦЕСС ПОШЁЛ. Теперь надо научиться выводить параметры и картинки.Может кто подскажет , куды кинуться?

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


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

Теперь надо научиться выводить параметры и картинки.Может кто подскажет , куды кинуться?

 

посмотри микрочиповскую реализацию

www.microchip.com/graphics

и немного по-русски

http://microchip.com.ru/1010/Support/GUI.html

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


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

посмотри микрочиповскую реализацию

www.microchip.com/graphics

и немного по-русски

http://microchip.com.ru/1010/Support/GUI.html

Спасибо, будем поглядеть :beer:

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


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

Сегодня закончил оформление внешнего вида. Нарисовал сетку размером 320х240, но она вся не влезла, очевидно из-за каких-то ограничений.Пришлось поделить её на две части и с помошью процедуры перевёртыша загрузить два раза.Благодаря двухслойной функции экрана сетка не затирается.Так же нарисовал несколько маленьких картинок и подгрузил их для красявости.

Ниже привожу текст процедуры и фото

 

void bild(unsigned int16 addr,unsigned char data)

{

send_msg( 0x46, 1, 0, 1, 0 );

Output_bit(LCD_A0 ,0);

write_data( (addr) & 0x00ff );

write_data( (addr)>>8 & 0x00ff );

send_msg( 0x42, 1, 0, 1, 0 );//

Output_bit(LCD_A0 ,0);

Output_d(data);

Output_bit(LCD_CS,0);//

Output_bit(LCD_WR,0); //

Output_bit(LCD_WR,1);//

Output_bit(LCD_CS,1);//

}

 

void DrawImage(unsigned int16 y1,unsigned int16 y2 )// нормальный вид

{

unsigned int16 addr, x,y,i;i=0;

for (y = y1; y < y2; y++)

{

for (x = 0; x < 264;x=x+8)

{

addr = 40 * y + x/8 - 1 ;//10802;//расчитать байт адреса, содержащего пиксель

bild( addr,Grid_8x4[i++]);// работает

}

}

}//--------------------------OK

//#####################################################################

void DrawImage11(unsigned int16 y1,unsigned int16 y2 )// перевёртыш

 

{

unsigned int16 addr, x,y,i;i=3959;

for (y = y1; y < y2; y++)//

{

for (x = 264; x > 0;x=x-8)

{

addr = 40 * y + x/8 - 2 ;//10802;//расчитать байт адреса, содержащего пиксель

bild( addr,Grid_8x4[i--]);// работает

}

}

}//--------------------------OK

//#####################################################################

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


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

Хочу попробовать перенести все картинки в последовательную память с I2C-BUS протоколом, а то они много места в процессоре занимают.

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


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

Гость DL36
Сегодня закончил оформление внешнего вида. Нарисовал сетку размером 320х240, но она вся не влезла, очевидно из-за каких-то ограничений.Пришлось поделить её на две части и с помошью процедуры перевёртыша загрузить два раза.Благодаря двухслойной функции экрана сетка не затирается.Так же нарисовал несколько маленьких картинок и подгрузил их для красявости.

Ниже привожу текст процедуры и фото

//#####################################################################
void DrawImage11(unsigned int16 y1,unsigned int16 y2 )// перевёртыш

{
unsigned int16 addr, x,y,i;i=3959;
  for (y = y1; y < y2; y++)//
  {
    for (x = 264; x > 0;x=x-8)
      {
        addr = 40 * y + x/8 - 2;//10802;//расчитать байт адреса, содержащего пиксель
        bild( addr,Grid_8x4[i--]);// работает
      }
  }
}//--------------------------OK
//#####################################################################

Не вдаваясь в подробности, просто по оформлению, используй теги под символом #.

Если кто смотреть будет, так читать легче.

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


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

Слепил сегодня процедурку рисования кривых.Теперь вот голову ломаю . как это всё синхронизировать, чтобы картинка устойчивой была.Подскажите плиз

 

 

//#####################################################################

void front(unsigned int8 x,unsigned int8 y_anf,unsigned int8 y_end)

{unsigned int8 y;

for (y = y_anf ; y > y_end; y--)

{

pixel(x,y,1);

}

}//--------------------------OK

//#####################################################################

void spad(unsigned int8 x,unsigned int8 y_anf,unsigned int8 y_end)

{unsigned int8 y;

for ( y = y_anf ; y < y_end ; y++ )

{

pixel(x,y,1);

}

}//--------------------------OK

//#####################################################################

void pix(unsigned int8 y_pos)// рисуем кривую, типа синусоиды и пр.

{unsigned int8 x , y , yy ; x = 1; y = 0; yy = 0;

for(;;){

x++;

if (x==255) {x=1;setCursorAddress(0x2581);clear_graphic();}

delay_ms(Zeitablenkung_x(0)); //развёртка Sec/Div

yy=y;

y = input_b()+y_pos;

// y = Amplitude_y(1) + y_pos-150;

if (yy>y) front(x,yy,y); // Рисуем фронт

if (yy<y) spad(x,yy,y); // Рисуем спад

pixel(x,y,1);// Рисуем вершину

}

}//--------------------------OK

//#####################################################################

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


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

Вот готовый видеоконтроллер для управления ЖКИ на базе SED1335:

http://www.telesys.ru/electronics/projects.php?do=p148

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


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

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

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

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


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

А почему у вас экран малинового цвета, это пленка наклеена или подсветку поменяли?

Для рисования рекомендую посмотреть библиотечку uc/GUI, драйвер для этого контроллера там уже есть, возможностей у нее много, а самое главное - хоть как-то систематизируется подход. В будущем сможете безболезненно поменять один дисплей на другой с расширением количества цветов например.

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


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

да цвет любой можно сотворить- плёночку цветную под экран сунул и всё.А вообще он ЧБ.

Насчёт uc/GUI не нашёл ничего.У меня поисковик только на какие-то китайские сайты выводит, ничего не понятно.Может ссылочку кините.Спасибо заранее

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


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

китайские сайты нормально читаются через http://babelfish.altavista.com/ язык - chinese-simp. там и ссылки есть. можно также с электроникса скачать, но надо быть "своим".

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


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

Выяснил причину по которой HEX-файл неполностью зашивался в процессор. Оказывается программа прошивки IC-Prog1.6А програмирует только до адреса 0х1000.Дальше сплошные FFFF.

Выкинул её нафик.Теперь програмирую другой прогой - P18 Parallelportbrenner V1.8 , взятой с сайта http://www.sprut.de.

По ходу научился выводить тексты в графическом режиме и переменные величины.

 

//########## выводим на экран числа в графическом режиме ##################

void displayVoltage(int wert) {

char voltage[9];

sprintf(voltage, "%f",(float)(1.715*(5.00 - wert * .01960784))); // преобразуем в текст

voltage[4] = '\0'; //ограничиваем тремя знаками

rect(5, 230, 29, 237, 1,0); //стираем старое значение

text57(5, 230, voltage, 1, 1); //выводим новое значение

}//--------------------------OK

//####################################################

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...