Отговори на тема  [ 21 мнения ]  Отиди на страница 1, 2  Следваща
LCD 122x32 странни проблеми 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение LCD 122x32 странни проблеми
Здравейте , опитвам се да подкарам един графичен LCD 122 x 32

4GLM12232-2 Sed1520 Модел

Не можах да намеря готов драйвер който да работи и остана да се опитам да си сглобя такъв . Не знам къде бъркам ( защото сигурно бъркам някъде ) , дали при инициялизацията или при самия начин на подаване на командите към ЛСД-то , или ... знам ли . Толкова начини и варианти пробвах че ми е като бъркани яйца в главата :)

Моля ако някой иска да даде едно рамо , и да погледне кода , за ме насочи в правилната посока .

При инициялизация се получават едни старнни картинки по дисплея , а уж следвам PDF-a му инструкциите . :?

http://www.mcu-bg.com/mcu_site/exchange ... 0__165.rar

Това е при увеличен контраст :

Изображение

Изображение


Код:



/* Това е само драйвера , Главната програма е цикъл и ф-ята за инициализация + ф-я за изчетраване на един пиксел
       InitSED1520();
       glcd_pixell(10,2,1);
*/


#define DISPLAY_ON 0xAF             //   10101111
#define DISPLAY_OFF 0xAE            //   10101110
#define DISPLAY_START_LINE 0xC0     //   11000000     
#define PAGE_ADDRESS_SET 0xB8       //   10111000
#define COLUMN_ADDRESS_SET 0x00     //   00000000
#define ADC_CLOCKWISE 0xA0          //   10100000   Right
#define ADC_COUNTERCLOCKWISE 0xA1   //   10100001
#define STATIC_DRIVE_ON 0xA5        //   10100101 
#define STATIC_DRIVE_OFF 0xA4       //   10100100
#define DUTY_RATIO_16 0xA8          //   10101000
#define DUTY_RATIO_32 0xA9          //   10101001
#define READ_MODIFY_WRITE 0xE0      //   11100000
#define END_READ_MODIFY 0xEE        //   11101110
#define RESET 0xE2                  //   11100010

#define SCREEN_WIDTH   122
#define SCREEN_HEIGHT 32








// PICCore Pin definitions----------//
#define LCD_RES     PIN_A5          // 7   LCD reset pin
#define LCD_CS1     PIN_E1          // 9   Enable Left Side of LCD
#define LCD_CS2     PIN_E2          // 10  Enable Right Side of LCD
#define LCD_RW      PIN_C1          // 16  Read/Write
#define LCD_A0      PIN_C0          // 15  Control or Data
#define LCD_BL      PIN_C2          // 17  LCD B/L
#define B0          PIN_D0          // 19  Databus 0
#define B1          PIN_D1          // 20  Databus 1
#define B2          PIN_D2          // 21  Databus 2
#define B3          PIN_D3          // 22  Databus 3
#define B4          PIN_D4          // 27  Databus 4
#define B5          PIN_D5          // 28  Databus 5
#define B6          PIN_D6          // 29  Databus 6
#define B7          PIN_D7          // 30  Databus 7
#define DataPort      D             //    Databus 7
// Tell CCS Graphics.c how big the display is
#define GLCD_WIDTH   122            // Number of Horizontal pixels
#define GLCD_HEIGHT   32            // Number of Vertical Pixels

#define LEFT    1
#define RIGHT   0

// Global Variables for this application (LCD)
int   SIDE;                         // Left or Right side of LCD

// Function Prototype for CCS Graphics.c driver
void glcd_pixell(int8, int8, int1);  // Required for CCS GRAPHICS.C




//===============================================================
// command_write (Cdata)
// Write command data to the LCD
// See SED1520 datasheet for more info
//===============================================================
void LCDCWrite(int8 CData)           // Write Instruction to LCD
  {
 
      OUTPUT_LOW(LCD_CS1);
      OUTPUT_LOW(LCD_CS2);
       
      OUTPUT_LOW(LCD_RW); 
      OUTPUT_LOW(LCD_A0);     
      delay_us(2);
     
 
  if (SIDE==LEFT)
    {
   
     
     OUTPUT_HIGH(LCD_CS1);
   
     OUTPUT_D(CData);
     delay_us(2);
     OUTPUT_LOW(LCD_CS1);
     
               
    }
else // The RIGHT hand side
    {

   
   
     OUTPUT_HIGH(LCD_CS2);
   
     OUTPUT_D(CData);
     delay_us(1);
     OUTPUT_LOW(LCD_CS2);
       
    }
 
  delay_us(1);
 
 

//===============================================================
// Data write (DData)
// Writes display data to the LCD
//===============================================================
void LCDWrite(int8 DData)               // Write Data to LCD
  {
                // We are going to WRITE Data
  // if(SIDE==LEFT)OUTPUT_LOW(LCD_CS1);   // If Left side then use CS1
  // if(SIDE==RIGHT)OUTPUT_LOW(LCD_CS2);  // If Right side then use CS2
  // delay_cycles(2);
         // Instruction (not display data)

{
 
      OUTPUT_LOW(LCD_CS1);
      OUTPUT_LOW(LCD_CS2);
       
      OUTPUT_LOW(LCD_RW); 
      OUTPUT_HIGH(LCD_A0);     
      delay_us(1);
     
 
  if (SIDE==LEFT)
    {
   
     
     OUTPUT_HIGH(LCD_CS1);
   
     OUTPUT_D(DData);
     delay_us(1);
     OUTPUT_LOW(LCD_CS1);
     
               
    }
else // The RIGHT hand side
    {

   
   
     OUTPUT_HIGH(LCD_CS2);
   
     OUTPUT_D(DData);
     delay_us(1);
     OUTPUT_LOW(LCD_CS2);
       
    }
 
  delay_us(1);
 
 
   
}
  }


//===============================================================
// Display data read
// Reads the display data pointed to by the page, column and
// chip select. Returns the data.
//===============================================================
int8 LCDRead()                          // Read Data from LCD
  {
   int8 DData;

   if(SIDE==LEFT) OUTPUT_HIGH(LCD_CS1);
   if(SIDE==RIGHT) OUTPUT_HIGH(LCD_CS2);   
delay_cycles(2);
   OUTPUT_HIGH(LCD_A0);                 // Data
   OUTPUT_HIGH(LCD_RW);                // Read Data
   if(SIDE==LEFT)OUTPUT_LOW(LCD_CS1);
   if(SIDE==RIGHT)OUTPUT_LOW(LCD_CS2);
   delay_cycles(2);

    set_tris_D(0xff);// set_tris_b(0xff);   // Allow LCD to drive the data lines
   
   if(SIDE==LEFT) OUTPUT_HIGH(LCD_CS1);
   if(SIDE==RIGHT) OUTPUT_HIGH(LCD_CS2);

   delay_cycles(50);
   
   
   DData=INPUT_D(); // DData=INPUT_B();                   // Get the data
   
   
   if(SIDE==LEFT) OUTPUT_LOW(LCD_CS1);
   if(SIDE==RIGHT) OUTPUT_LOW(LCD_CS2);
   delay_cycles(2);

return(DData);
}

//===============================================================
// Draw a single pixel
// This is required by the Graphics.c driver file provided by
//CCS. It tells the driver how to draw a single pixel anywhere
// on the LCD display
// x=1 to 122      y=1 to 32     color=1=ON    color=0=OFF
//===============================================================
void glcd_pixell(int8 x, int8 y, int1 color)   
{
int8 ucMask;
int8 i;
int8 Data;
int8 page,Col;


   
      Col=(x - (SCREEN_WIDTH/2));
   
   
page=1;



LCDCWrite(PAGE_ADDRESS_SET+Page);

LCDCWrite(COLUMN_ADDRESS_SET+Col);


LCDCWrite(READ_MODIFY_WRITE);                       // Start R-M-Write operation
  LCDRead();                          // Dummy Read
  Data = LCDRead();                      // Read LCD dissplay data


  ucMask = 1;                           // Create a bit mask of the
  for (i=1;i<y;i++)                      // pixel to change
       ucMask<<=1;                      //

  if (color)
    {
    Data|=ucMask;              // Set or clear the pixel as
    }
  else   {Data&=~ucMask; }// requested
 
  LCDWrite(Data);
LCDCWrite(END_READ_MODIFY);


}

//===================================================================
// Initialise the SED11520 controllers
// for the display type we are using
//===================================================================
void InitSED1520()
{
int8 i;
 
     OUTPUT_LOW(LCD_RES);
         delay_us(2);
     OUTPUT_HIGH(LCD_RES);
     
       
     
for (i=0;i<2;i++)
    {
     SIDE=i;
         LCDCWrite(DISPLAY_on);
             
               /* Пробвах и само   LCDCWrite(DISPLAY_OFF);
                 и  заедно LCDCWrite(DISPLAY_on);   LCDCWrite(DISPLAY_OFF);
                */
         
        LCDCWrite(DISPLAY_START_LINE);
        LCDCWrite(STATIC_DRIVE_off);
        LCDCWrite(COLUMN_ADDRESS_SET); 
        LCDCWrite(PAGE_ADDRESS_SET); 
        LCDCWrite(DUTY_RATIO_32);   
        LCDCWrite(ADC_CLOCKWISE);
        LCDCWrite(END_READ_MODIFY);
       

}
    OUTPUT_LOW(LCD_CS1);    // De-select each side to start
   OUTPUT_LOW(LCD_CS2);    //
    delay_ms(60);
}


Прикачени файлове:
Коментар на файл: LCD pdf
4GLM_12232-SED1520 .rar [284.78 KiB]
258 пъти
Нед Сеп 05, 2010 12:23 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Тук често пускат теми за проблеми с дисплеи и в повечето случаи се оказва, че конкретния екземпляр е дефектен фабрично. Пробвай с друга бройка ако имаш възможност. Ако и с него не става ще погледна кода, че сега нямам мнго време ...

_________________
Digitally yours: Optron


Сря Сеп 08, 2010 4:22 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Там е работата , че имам 2 бройки и на двете дава едно и също :(
Почти съм убеден че аз бъркам някъде , но не мога да се усетя още :)


Сря Сеп 08, 2010 8:04 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Прегледах набързо кода ти на драйвера и видях следното - ти първо вдигаш нивото на входа Е и след това му подаваш данните. Аз като пиша към дисплей първо извеждам данните, след това вдигам Е, чакам и свалян Е. Така се подсигурявам, защото не знам дисплеите при кой фронт на Е четат данните от входа си.
Пробвай го това. В случая с твоя код просто трябва да размениш двата реда:
OUTPUT_HIGH(LCD_CS1);

OUTPUT_D(CData);
Ако не проработи, пак ще го мислим.

_________________
Digitally yours: Optron


Нед Сеп 12, 2010 12:46 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Много ти благодаря за отделеното време :)

Ще пробвам както каза .
Но днес като разглеждах пак ПДФ-а , забелязах нещо което не бях се зачел преди това :

"3V - supply voltage for logic and LCD "
и
Vdd = 2,7 (min) - 4,5 (max) V

На 3 V ли да е този дисплей ?!?!
Да не би да съм го повредил вече?
Ама пък ако не направя инициализация , не се появяват страните картинки , значи реагира на някой команди .


Пон Сеп 13, 2010 9:02 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Дяволски си прав! Изобщо не обърнах внимание на това. За твое щастие пак там пише, че абсолютно максималното захранващо напрежение е 6.7 волта и може би не си го повредил ако го захранваш с пет волта.
Обаче тук виждам и друго - захранващото напрежение за самия панел е 5.7 волта. Явно няма да се мине без негативно напрежение - ще ти трябва някакъв преобразувател или двуполярно захранване.
Другото, което е, ще трябва да преобразуваш и логическите нива от 5 на 3 волта - доколкото разбирам от чаршафа, входовете му не са 5В-толерантни. Явно цялата шашма е смятана за 3-волтов процесор. Ако имаш такъв или твоят процесор може да работи и на 3 волта, може би така ще ти е по-лесно.
Да видим така дали ще тръгне.

_________________
Digitally yours: Optron


Вто Сеп 14, 2010 10:36 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Процесора е пик 18f458 , ще потърся дали може да бачка на 3V , защото иначе , да взема да правя двуполярно или преобразувател , май няма да си струва :(
По-добре да потърся друг сходен дисплей но на 5V .
Това ми харесваше на тоя че е тъничак и по компактен , ама явно .... не съм случил .
Съжалявам че не съм видял по рано ПДФ-а , а трябваше да те тормозя да гледаш и ти .

:oops:

А иначе пробвах и по-горното ти мнение да разменя двата реда , но пак няма резултат .


Вто Сеп 14, 2010 12:39 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
amdatlon написа:

А иначе пробвах и по-горното ти мнение да разменя двата реда , но пак няма резултат .
Възможно е да е щото го "печеш" на пет волта.
Разгледах чаршафа на процесора, там пише, че работи от 4.5 до 5.5 волта. За три волта ти трябва L-варианта му.

_________________
Digitally yours: Optron


Сря Сеп 15, 2010 8:00 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Мда , май работата отива на друг дисплей :)
Случайно да знаеш някакъв подобен 122х32 , по компактен ?
В смисъл , от къде мога да си го взема .


Сря Сеп 15, 2010 11:04 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Тука не мога да ти помогна особено - не ги познавам като модели и показатели ...

_________________
Digitally yours: Optron


Чет Сеп 23, 2010 11:41 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Здраве да е :)
Благодаря за отделеното внимание :)


Пет Сеп 24, 2010 8:15 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
А защо не се пробваш да пуснеш процесор на 3 волта ? ;)

_________________
Digitally yours: Optron


Вто Окт 26, 2010 11:06 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Малко съм още на "вие" с микроконтролерите :) , имам допир само с пик-ове , за сега .
И незнам дали има пик на 3V , не съм се интересувал .
Та за сега опитите ги правя с LCD 16X2 , докато или ако намеря подходящ дисплей :)


Вто Окт 26, 2010 8:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Почти всички по-нови пикове (примерно 16F88,16F627/8A и други) могат от 2.7 до 5.5 да работи. Доколкото съм обръщал внимание почти всички 18-ки. от 24 нагоре всичко е на 3.3 периферия и 2.5 ядро.


Вто Окт 26, 2010 10:07 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 
Хмм , значи ще може с този който съм хванал 18F458 , трябва да пробавам като ми остане време :)
Благодаря !


Вто Окт 26, 2010 11:04 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 21 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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