Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не хочет работать WO12864C2-TFH#
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Andrei_S
Доброго всем дня. Пытаюсь запустить данный индикатор. Пока безрезультатно.
При подаче питания кратковременно выводится мусор в виде горизонтальных и вертикальных палок и дальше пусто...
Схема подключения - предложенная когда-то 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
//################################################################################
#####
Andrei_S
Закончился отпуск. Засел за проект с новыми силами...
И все почти сразу заработало.
Оказалось банально просто.
На шлейфе была маркировка краской первого и последнего(34) вывода.
И она оказалась перевернутой.

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

p.s.
Пришла мелкая партия индикаторов. Маркировки на шлейфе у них уже нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.