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

Не хочет работать WO12864C2-TFH#

Доброго всем дня. Пытаюсь запустить данный индикатор. Пока безрезультатно.

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

Схема подключения - предложенная когда-то Winstar одному из пользователей, код для контроллера ST7565P - оттуда же.

Интерфейс - параллельный, 6800.

Если бы индикатор был один - можно предположить, что убит контроллер, но у меня их несколько...

Ну ткните, пожалуйста, носом, где я накосячил!!!

 

 

 

#include "LPC17xx.H"            // LPC1768 definitions



// Индикатор WO12864C2-TFH
// параллельный интерфейс 6800    (P/S=1, C86=1)
// Шина индикатора
//#define PIN_D0        0x00040000    // Шина данных индикатора P1.18-P1.25
//#define PIN_D7        0x02000000  //
#define line_datalcd 18 //шина данных начинается с 18-й линии

//Выводы управления WO12864C2-TFH()
#define PIN_RST        0x00000001    // 0.0    Сброс
#define PIN_CS1        0x00000002    // 0.1    Выбор кристалла
#define PIN_A0        0x20000000    // 1.29
#define PIN_WR        0x10000000    // 1.28
#define PIN_RD        0x08000000    // 1.27
#define RESET(X)    ((X)? (GPIO0 -> FIOSET = PIN_RST):(GPIO0 -> FIOCLR=PIN_RST));
#define CS1(X)        ((X)? (GPIO0 -> FIOSET = PIN_CS1):(GPIO0 -> FIOCLR=PIN_CS1));
#define A0(X)        ((X)? (GPIO1 -> FIOSET = PIN_A0):(GPIO1 -> FIOCLR=PIN_A0));
#define WR(X)        ((X)? (GPIO1 -> FIOSET = PIN_WR):(GPIO1 -> FIOCLR=PIN_WR));
#define RD(X)        ((X)? (GPIO1 -> FIOSET = PIN_RD):(GPIO1 -> FIOCLR=PIN_RD));


#define LCD_COLUM_SET_H    0x10
#define LCD_COLUM_SET_L    0x00


int main (void) 
//#############################################################################
//#############################################################################
//#############################################################################
{

    SystemInit();
    TargetInit();


    Display_Init();        //ST7565P init
    LCD_Clear();          // Заливка черным экрана
    
    while(1)
    {
     //......
    }


}





//################################################################################
#####
//    Инициализация индикатора
//################################################################################
#####
void Display_Init(void)
{
    // параллельный интерфейс 6800
    // P/S=1, C86=1

    CS1(0)            // Разрешаем работу с ST7565
    BusOUT();        // Шина на вывод
    SetBus(0x00);    // Выставили нули на шине

    RESET(0)
    delay_ms(50);
    RESET(1)
    delay_ms(50);

    RD(1) WR(0)

  // Power Controller Set (Booster circuit | Voltage regulator circuit | Voltage follower circuit)
  Write_Command(0x2F);    // 00101111 - Все включено(1)

  // Booster Ratio Select Mode Set
  // + Register Set - устанавливаем 4x
  Write_Command(0xF8);    // 11111000
  Write_Command(0x00);// младшие два нуля - 2x,3x,4x

  // LCD Bias Set 
  Write_Command(0xA2);//10100010   - 1,9 bias
      
  //The Electronic Volume Mode Set
  Write_Command(0x81);    //10000001
  
  // Electronic Volume Register Set
  Write_Command(0x24);    //00100100 - Уровень36 из 64 возможных
  Write_Command(0x40);    // 01000000(0x40) Начинаем с нулевой линии
  Write_Command(0xAF);    // Включаем панель        

}// End
//################################################################################
#####


//################################################################################
#####
// Вывод команды на индикатор
//################################################################################
#####
void Write_Command(unsigned char code)
{   
unsigned char SCH=8,tic=0;

    BusOUT();            // Шина на вывод 
    RD(1) WR(0) 
    A0(0)                 // Идет команда
        
    SetBus(code);        // Выставили данные на шине
    RD(1)                // Строб E
    delay_us(20);
    RD(0)
    
}//End
//################################################################################
#####


//################################################################################
#####
//Вывод данных на индикатор
//################################################################################
#####
void Write_Data(unsigned char code)
{         
unsigned char SCH=8,tic=0;
    
    BusOUT();            // Шина на вывод 
    RD(1) WR(0) 
    A0(1)                 // Идут данные
        
    SetBus(code);        // Выставили данные на шине
    RD(1)                // Строб E
    delay_us(20);
    RD(0)
    
}//End
//################################################################################
#####



//################################################################################
#####
// Очистка страниц LCD
//################################################################################
#####
void LCD_Clear(void)                                                                   
{
unsigned char i,j;
    BusOUT();// Шина на вывод    
    for(i=0; i<9; i++)       //clear page 0~8
     {
      Write_Command(0xB0+i);  //set page
      Write_Command(LCD_COLUM_SET_L); //set column
      Write_Command(LCD_COLUM_SET_H); //set column
      for(j=0; j<130; j++)     //clear all columns upto 130
      {     
       Write_Data(0xFF); // Заливаем экран  
      }
    }
                     
}
//################################################################################
#####



//################################################################################
#####
void BusOUT(void)// Шина данных индикатора на вывод
//################################################################################
#####
{
  GPIO1 -> FIODIR |= (0xFF << line_datalcd); 
}//End
//################################################################################
#####



//################################################################################
#####
void SetBus(unsigned char _data) //Установка сигналов данных на шине данных индикатора
//################################################################################
#####
{
unsigned long dta,dta1;

// Шина данных начинается с 18-й линии (line_datalcd=18)
// Порт шины данных - GPIO1
BusOUT();// Шина на вывод
dta = _data;
dta1 = _data ^ 255;
dta = dta << line_datalcd;
dta1 = dta1 << line_datalcd;
if(_data & 0x40) dta |= 0x01000000;
else dta1 |= 0x01000000;
GPIO1 -> FIOSET = dta;  
GPIO1 -> FIOCLR = dta1;

}//End
//################################################################################
#####

______________.pdf

WO12864C2.pdf

post-29535-1438851712_thumb.jpg

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


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

Закончился отпуск. Засел за проект с новыми силами...

И все почти сразу заработало.

Оказалось банально просто.

На шлейфе была маркировка краской первого и последнего(34) вывода.

И она оказалась перевернутой.

 

Тема закрыта.

 

p.s.

Пришла мелкая партия индикаторов. Маркировки на шлейфе у них уже нет.

 

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


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

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