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

SED1335,PIC18F4550 и LCD320x240

я же написал, что читаю и по английски...мне от перевода легче не стало...=)

кто-нить может популярно объяснить как работают эти биты?

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


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

я же написал, что читаю и по английски...мне от перевода легче не стало...=)

кто-нить может популярно объяснить как работают эти биты?

Не надо нервничать - это я к тому, что никто давиться в очереди не будет, чтобы разъяснить Вам все детали этого ЖКИ, это один из немногих топиков на русском, где хоть что-то говорят про этот контроллер. Если Вам не нравятся мои слова, то читайте и эксперементируйте. Я тоже в свое время здесь задавал вопрос когда взял в руки этот индикатор, какой ответ я получил можете найти. Но все же.

Из собственного опыта: DM1= DM2=OV= 0. Текстовый режим - верхний слой текстовый, второй слой графический, третьего слоя не будет.

DM1=DM2=OV=1: Графический режим - может быть до трех графических слоев, по Вашему желанию, но текста не будет.

Если делать по другому, то начинаются фокусы.

Все что я говорил это о полном экране, а не о блочном.

И почувствуйте разницу между Screen blocks и layer, это к - Note 1: Screen blocks 2 and 4 can only display graphics.

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


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

А какой ток потребляет сей прибор в рабочем режиме?

По datasheet 100 mA без подсветки, сам не мерил.

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


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

Подскажите, пожалуйста, где в Москве лучше всего купить lcd, плис, mcu, ацп и fifo для этого осцика? Я сам из Беларуси, но сейчас мой друг в Москве, хочу его попросить купить детальки, но хочется, что бы это был один магазин и другу не пришлось ездить с одного конца города в другой. Ну и конечно где подешевле. За проделанную работу :a14: .

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


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

Подскажите, пожалуйста, где в Москве лучше всего купить lcd, плис, mcu, ацп и fifo для этого осцика? Я сам из Беларуси, но сейчас мой друг в Москве, хочу его попросить купить детальки, но хочется, что бы это был один магазин и другу не пришлось ездить с одного конца города в другой. Ну и конечно где подешевле. За проделанную работу :a14: .

 

Магазинов в Москве, где можно купить детальки, не так много. Вот, например, Чип и Дип (_ww.chip-dip.ru). Через интернет можно оформить заказ. :)

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


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

/////////////////////////////////////////////////////////////////////////
////                           SED1335_MOD.c                         ////
////        Модифицированный модуль управления ЖКИ 320х240 пикселей  ////
////  Example drivers for the SED1335 LCD controller                 ////
/////////////////////////////////////////////////////////////////////////
#ifndef SED1335_VERSION
#define SED1335_VERSION  0x0000

#ifndef GLCD_WIDTH
#define GLCD_WIDTH         320
#endif

#ifndef GLCD_HEIGHT
#define GLCD_HEIGHT        240
#endif

#ifndef  LCD_RESET
#define  LCD_RESET PIN_E3//
#endif

#ifndef  LCD_RD
#define  LCD_RD    PIN_E0//
#endif

#ifndef  LCD_WR
#define  LCD_WR    PIN_E1//
#endif

#ifndef  LCD_A0
#define  LCD_A0    PIN_E2//
#endif

#ifndef  LCD_CS
#define  LCD_CS    PIN_C3// 
#endif
//##############################################################################
VOID LCD_init_Grafik( void );
void OVERLAY( unsigned int ovlay );
void display_off( void );
void enable_display( void );
void write_data( unsigned char Data );
void send_msg( unsigned char Data, unsigned char A0, unsigned char WR, 
                                     unsigned char RD, unsigned char CS );
void text_cursor_pos( unsigned INT16 Position );
void clear_text( void );
void clear_graphic(void );
void setCursorAddress(int16 addr);
int8 lcd_readByte();
int8 getData(int16 addr);
void setData(int16 addr, int8 data);
void pixel(int16 x, int16 y, int1 color);
void pixel_(int16 x, int16 y, int1 color);
void write_char( unsigned char Zeichen );
void flash_textcursor( unsigned char flashing );
//##############################################################################
// ----- Level 1 Funktionen ----------------------------------------------
VOID  LCD_init_Grafik( void )
{ 
  SET_TRIS_E (0);
  SET_TRIS_D (0);// LCD_TRIS = 0x00;
  Output_bit(LCD_RESET,0);
  delay_ms(200);
  Output_bit(LCD_RESET,1);
// --- SEND SYSTEM SET --- //
//               A0  WR RD CS
  send_msg( 0x40, 1, 0, 1, 0 );  // C SYSTEM SET instruction
  send_msg( 0x30, 0, 0, 1, 0 );  // P1 // single panel drive
// define display resolution: physical 320pixel / 8 = 40 char-cols ???
// virtual display resolution: 40*8= 320 pixels (X)
// 0х86- двухкадровое управление, 0х06- 16ти строчное управление
  send_msg( 0x87, 0, 0, 1, 0 );  // P2 (FX) - ширина символа (7 pixels) /86 /06
  //Установите FY в "0" (вертикальный размер равняется единице) в графическом режиме.
  send_msg( 0x00, 0, 0, 1, 0 );  // P3 (FY) - высота символа (8 pixels) /0x0 for grafik
// allocate 39 bytes for one line адресный диапазон, занимаемый одной строкой дисплея
  send_msg( 0x27, 0, 0, 1, 0 );  // P4 (c/r) - address range (39) (40 chars)    //2b  //11
  send_msg( 0x39, 0, 0, 1, 0 );  // P5 (tc/r) - length of 1 line (43) (c/r+4)  //9f  //ef
//delay_us(2);//Установка высоты кадра, в линиях. 
  send_msg( 0xef, 0, 0, 1, 0 );  // P6 (l/f) - height (in lines) of a frame (239)  //28
//Определяет горизонтальный адресный диапазон виртуального экрана. 
//APL - младший значащий байт адреса. зона очистки виртуального экрана
  send_msg( 0x28, 0, 0, 1, 0 );  // P7 (apl) - horiz. addr. range - LOW (40)
  send_msg( 0x00, 0, 0, 1, 0 );  // P8 (aph) - horiz. addr. range - HIGH
//################################################################################
#####
// --- SEND SCROLL PARAMS --- //
//Установка начального адреса дисплея и участков дисплея
  send_msg( 0x44, 1, 0, 1, 0 );  // C (start SCROLL settings)
  //первый текстовый слой стартовый адрес- 0000
  send_msg( 0x00, 0, 0, 1, 0 );  // P1 (SAD 1L) - layer1 start addr. LOW
  send_msg( 0x00, 0, 0, 1, 0 );  // P2 (SAD 1H) - layer1 start addr. HIGH
  send_msg( 0xEF, 0, 0, 1, 0 );  // P3 (SL1) -Отображаемых строк в первом экранном блоке - 30 no. of pixels of screen 1 (239)    //ef
//второй графический слой , нач. адрес-  1200 (dec)  0х040В
  send_msg( 0x81, 0, 0, 1, 0 );  // P4 (SAD 2L) - layer2 start addr. LOW        //b0
  send_msg( 0x25, 0, 0, 1, 0 );  // P5 (SAD 2H) - layer2 start addr. HIGH      //04
  send_msg( 0xEF, 0, 0, 1, 0 );  // P6 (SL2) - no. of pixel rows per screen 2 239 pixels (Y)   //ef
  send_msg( 0x81, 0, 0, 1, 0 );  // P7 (SAD 3L) мл. адрес третьего экранного  блока 32 10802
  send_msg( 0x25, 0, 0, 1, 0 );  // P8 (SAD 3H) ст. адрес третьего экранного  блока 2a
  send_msg( 0x00, 0, 0, 1, 0 );  // P9 (SAD 4L) (disabled)
  send_msg( 0x00, 0, 0, 1, 0 );  // P10 (SAD 4H) (disabled)
// --- set cursor form (CSRFORM) --- //
//Установка типа курсора
  send_msg( 0x5D, 1, 0, 1, 0 );  // C (start CSRFORM settings)
  send_msg( 0x03, 0, 0, 1, 0 );  // P1 (CRX) - cursor length толщина курсора
  send_msg( 0x88, 0, 0, 1, 0 );  // P2 (CM,CRY) - cur. shape, cursor height
// --- set character gen. RAM addr (CGRAM ADR) --- //
//Установка начального адреса генератора символов RAM
// send_msg( 0x5C, 1, 0, 1, 0 );  // C (start CGRAM ADR settings)
// send_msg( 0x00, 0, 0, 1, 0 );  // P1 (SAGL) - start addr. LOW 81
// send_msg( 0x00, 0, 0, 1, 0 );  // P2 (SAGH) - start addr. HIGH25
// --- set default auto cursor direction (CSDIR) ---//
//Установка направления движения курсора
  send_msg( 0x4C, 1, 0, 1, 0 );  // C (start CSRDIR settings) - right
// --- set horiz. scrolling (HDOT SCR) --- //
//Установка позиции горизонтальной прокрутки
  send_msg( 0x5A, 1, 0, 1, 0 );  // C (start HDOT SCR settings)
  send_msg( 0x00, 0, 0, 1, 0 );  // P1 number of pixels to scroll down (1)
//--------------------------------------------------------------------------------
// Выбор метода композиции(OVLAY)
//Выбирает композицию наслоённого экрана и текстовый.графический режим экрана. 
//MX1 MX2 Функция    Метод композиции         Применение 
// 0  0   L1ИL2ИL3   ИЛИ                Подчёркивание, инструкции, смешанные текст и графика 
// 0  1  (L1ЕL2)ИL3  ИСКЛЮЧАЮЩЕЕ ИЛИ    Инвертированные символы, мерцающие области, подчёркивание 
// 1  0  (L1ЗL2)ИL3  И                  Простая анимация, трёхмерный вид 
// 1  1  L1>L2>L3    ПРИОРИТЕТНОЕ ИЛИ 
// 00,01,02,03,10,11,12,13,0c,0d,0e,0f,1c,1d,1e,1f
//0d инвертирует картинку
  send_msg( 0x5B, 1, 0, 1, 0 );  // C (start OVLAY settings)
  send_msg( 0x0d, 0, 0, 1, 0 );  // P1 screen mode (text), style, 2 layers
//--------------------------------------------------------------------------------
  display_off( );
  clear_graphic();
  clear_text();
  enable_display(); // DISP ON
}//OK
//#####################################################################
void OVERLAY( unsigned int8 ovlay )
{         send_msg( 0x5B, 1, 0, 1, 0 );  // C (start OVLAY settings)
  switch( ovlay )
  {
    case 1: send_msg( 0x01, 0, 0, 1, 0 );break; // P1 screen mode (text), style, 2 layers 
    case 2: send_msg( 0x10, 0, 0, 1, 0 );break;  // P1 screen mode (grafik), style, 2 layers
  }
}//--------------------------OK
//####################################################################
void enable_display( void )
{    //установить мерцание блоков и курсора
  send_msg( 0x59, 1, 0, 1, 0 );  // разрешение instruction
// send_msg( 0x34, 1, 0, 1, 0 );  //представления двух наложенных графиков на экране
// send_msg( 0x56, 0, 0, 1, 0 );  // parameters (no flashing)
  send_msg( 0x16, 0, 0, 1, 0 );//два блока ,нет мерцания
  //send_msg( 0x55, 0, 0, 1, 0 );//три блока ,нет мерцания
  //send_msg( 0xac, 0, 0, 1, 0 );//три блока , мерцание 16Гц
  // send_msg( 0x3c, 0, 0, 1, 0 );//2 блока , мерцание 16Гц
  // send_msg( 0x58, 0, 0, 1, 0 );//2 блока , мерцание 16Гц
}//OK
//#####################################################################
void display_off( void )
{    //установить мерцание блоков и курсора
  send_msg( 0x58, 1, 0, 1, 0 );  // разрешение instruction
// send_msg( 0x59, 1, 0, 1, 0 );  // запрет instruction
// send_msg( 0x56, 0, 0, 1, 0 );  // parameters (no flashing)
//send_msg( 0x55, 0, 0, 1, 0 );//3 блока ,нет мерцания
  send_msg( 0x16, 0, 0, 1, 0 );//два блока ,нет мерцания
  //send_msg( 0xac, 0, 0, 1, 0 );//три блока , мерцание 16Гц
  // send_msg( 0x3c, 0, 0, 1, 0 );//2 блока , мерцание 16Гц
  // send_msg( 0x58, 0, 0, 1, 0 );//2 блока , мерцание 16Гц
}//OK
//#####################################################################
void clear_text( void )
{
  unsigned long  cnt  = 0x00;
  
  send_msg( 0x42, 1, 0, 1, 0 );
  Output_bit(LCD_A0, 0);
  for( cnt = 0x00; cnt < 1200; cnt++ )    // 680
  {
    write_data( 0x00 );
  }
}//OK
//#####################################################################
void clear_graphic( )
{
  unsigned  int16 cnt  = 0x0000;
  
  send_msg( 0x42, 1, 0, 1, 0 );
  #asm
      BCF  0x0F8D,2  //замена Output_bit(LCD_A0 ,0);
  #endasm
  for( cnt = 0x0000;cnt < 9600; cnt++ )    // всё чистит
  {
    write_data( 0x00 );//негатив 
  } 
}//OK
//#####################################################################
void write_data( unsigned char Data )
{
  Output_d(Data); 
  #asm 
      BCF    0x0F8B,3//Output_bit(LCD_CS,0);// замена
      BCF    0x0F8D,1//Output_bit(LCD_WR,0); //  
      BSF    0x0F8D,1//Output_bit(LCD_WR,1);//  
      BSF    0x0F8B,3//Output_bit(LCD_CS,1);//
  #endasm
}//OK
//#####################################################################
void send_msg( unsigned char Data, unsigned char A0, unsigned char WR,
                                     unsigned char RD, unsigned char CS )                                  
{  
  Output_bit(LCD_A0,A0);
  Output_bit(LCD_WR,WR);
  Output_bit(LCD_RD,RD);
  Output_bit(LCD_CS,CS);
  write_data( Data );
}//OK
//#####################################################################
// Purpose:    Set the cursor address
// Inputs:     A 16 bit integer containing the new cursor address
void setCursorAddress(unsigned int16 addr) { //CSRW Установка адреса курсора
     send_msg( 0x46, 1, 0, 1, 0 );
#asm
    BCF    0x0F8D,2//Output_bit(LCD_A0 ,0);
#endasm
     write_data( (addr) & 0x00ff );
     write_data( (addr >> 8) & 0x00ff );  
}//OK
//#####################################################################
int8 lcd_readByte()
{char data;
           set_tris_d(0xFF);
#asm
  BCF    0x0F8B,3//Output_bit(LCD_CS,0);
  BSF    0x0F8D,2//Output_bit(LCD_A0,1); // new line дополнен
#endasm
           delay_us(1);
#asm
  BCF    0x0F8D,0// Output_bit(LCD_RD,0);
#endasm
           delay_us(2);
           data = input_d();
#asm 
BSF    0x0F8D,0//Output_bit(LCD_RD,1);  
BSF    0x0F8B,3//Output_bit(LCD_CS,1);
#endasm
   return data;
}//--------------------------OK
//####################################################################
int8 getData(unsigned int16 addr)
{
          setCursorAddress(addr);
          send_msg( 0x43, 1, 0, 1, 0 );//MREAD чтение из памяти дисплея
#asm
BCF    0x0F8D,2//Output_bit(LCD_A0 ,0); 
#endasm
   return lcd_readByte(); 
}//--------------------------OK
//####################################################################
// Purpose:    Set a byte of display data at an address
// Inputs:     1) A 16 bit address
//             2) 8 bits worth
//MWRITE 1 0 1 0 1 0 0 0 0 1 0 42 Запись в память дисплея 
void setData(unsigned int16 addr,unsigned int8 data)
{
   setCursorAddress(addr);
   send_msg( 0x42, 1, 0, 1, 0 );//
#asm
    BCF    0x0F8D,2//Output_bit(LCD_A0 ,0);
#endasm
   write_data(data);
}//--------------------------OK
//####################################################################
// Purpose: Turn a pixel on a graphic LCD on or off 
// Inputs: x - the x coordinate of the pixel 
// y - the y coordinate of the pixel 
// color - ON or OFF 
void pixel(unsigned int16 x,unsigned int16 y, int1 color)
{
  unsigned int8  data;
  unsigned int16 addr;
   // расчитать байт адреса, содержащего пиксель
  // addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8);
  // addr =1200 + (40 * y + x/8);//если первый слой текстовый
    addr = 40 * y + x/8 + 9601;//если первый слой графический
    data = getData(addr);//считать байт данных в адресе
   if(color == 1) bit_set(data, 7 - x%8);//нарисовать пиксель
   else           bit_clear(data, 7 - x%8);//стереть пиксель
       setData(addr , data); //записать новый байт данных в память дисплея
}//
//#####################################################################
void pixel_(unsigned int16 x,unsigned int16 y, int1 color)
{
  unsigned int8  data;
  unsigned int16 addr;
   // расчитать байт адреса, содержащего пиксель
      addr = 40 * y + x/8;//
      data = getData(addr);//считать байт данных в адресе
   if(color == 1) bit_set(data, 7 - x%8);//нарисовать пиксель
   else           bit_clear(data, 7 - x%8);//стереть пиксель
       setData(addr , data); //записать новый байт данных в память дисплея
}//
//#####################################################################
void flash_textcursor( unsigned char flashing )
{
  switch( flashing )
  {
    case 1:
    {
      send_msg( 0x59, 1, 0, 1, 0 );
      Output_bit(LCD_A0,0);
      write_data( 0x05 );
    }break;
    
    case 2:
    {
      send_msg( 0x59, 1, 0, 1, 0 );
      Output_bit(LCD_A0, 0);
      write_data( 0x06 );
    }break;

    case 3:
    {
      send_msg( 0x59, 1, 0, 1, 0 );
      Output_bit(LCD_A0,0);
      write_data( 0x07 );
    }break;
  }
}//OK
//#####################################################################
#endif

тут полный проект с рисунком печатной платы в СПРИНТе5.0

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


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

Долго мучался как научить ваш CCS иметь прямой доступ к регистрам, и наконец-то у меня получилось!!!!

Вот бы я этим писателям компилятора :smile3009: !!!! Все приходиться делать через задний проход... :maniac: :twak:

 

Ни причем здесь писатели компилятора... :biggrin:

-Дело было не в бобине...

------
#byte LATD  =0xF8C
#bit  LED   = LATD.3
------

LED=0;

LED=1;

 

 

"Исчо" пример:

 

 

....................    SDA=test; 
04B0:  BCF    F8C.7
04B2:  BTFSC  31.7
04B4:  BSF    F8C.7
....................    SCLK=1; 
04B6:  BSF    F8C.6
....................    SCLK=0; 
04B8:  BCF    F8C.6
....................    buf<<=1; 
04BA:  BCF    FD8.0
04BC:  RLCF   31,F

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

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


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

Ни причем здесь писатели компилятора... :biggrin:

-Дело было не в бобине...

------
#byte LATD  =0xF8C
#bit  LED   = LATD.3
------

LED=0;
LED=1;

 

Пасибо за пример - буду знать на будующее. сходу такого трюка мне найти не удалось - а с компилятором этим я ни разу в жизни не работал. И сейчас не работаю. - Просто хотелось человеку помочь :) - ну нашел же всетаки способ решить проблему :beer:

 

Но все-таки! Как ни крутите, но директивы #bit и #byte нифига не являются классическими, и посто догадаться о них - невозможно (без изучения компилятора).

Так что определение "через задний проход" - остается в силе. :) (ведь можно же было сделать по человечески....)

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


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

Отличная тема. Снимаю шляпу - немало сделано за год энтузиастами.

Как раз вовремя попалась на глаза - сейчас в руки мне попало несколько LCD модулей Olimex DMF-628 с контроллерами на SED1330. Немножко не такие (256х128) и немножко устаревшие, но практически бесплатно. По большому счёту совместимы с рассматриваемыми.Тоже хотелось бы разобраться и запустить, так что последуют вопросы. Вот первый: в ds насчёт подсветки сказано - 100V RMS, 400 Hz (максимум 150V RMS, 800 Hz). Уже собрался было запитать лампу стандартным DC-AC инвертором (как у автора) но обнаружил, что частота преобразования - 30 KHz, назначение: CCFL - лампы. Видимо, в моём случае (EL - лампа) это нечто другое. Просветите вкратце, насколько существенны различия.

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


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

Большое спасибо, понял, сделал, увидел....

Есть вопросы конкретно по схеме. :help:

 

Всё нарисовал на вашей же схеме. Если не затруднит прошу ответить.

У меня не такой большой опыт в электронике, так что задаю кучу глупых вопросов :05: ОБЪЯСНИТЕ ДИТЮ НЕРАЗУМНОМУ

Действительно, на этот вопрос так ответа и не последовало. Выложите, пожалуйста, реальную схемку. А то не понятно, например, откуда у PIC18F4550 на порте D взялось 8 разрядов.

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


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

А то не понятно, например, откуда у PIC18F4550 на порте D взялось 8 разрядов.

Сколько Microchip сделал, столько и есть. Что Новый год наступил раньше или перетрудились?

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


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

Сколько Microchip сделал, столько и есть. Что Новый год наступил раньше или перетрудились?
Видимо, что-то вроде. :)

И всё-таки, подробности хотелось бы увидеть на окончательном варианте схемы.

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


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

День добрый и с новым годом всех.

 

Спасибо создателю этого проекта за такие старания и классный код.

Если я правильно вижу то выложенные files не имеют реальной схемы. На картинках есть схема в которой кое-чего не хватает.

Просьба для аndreichk: если вы не будете вылаживать схемы то сообщите это в форуме что-бы не было ненужных запросов.

Без реальной схемы трудно расчитать стоимость всего и вообще построить.

 

Fire Starter

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


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

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