Saturday, December 6, 2014

Truly Semiconductors MCG2305-A1-E Graphic LCD

192x64  Wide형 Graphic LCD입니다 (Graphic LCD에서 Wide형이라는 말을 붙이는지 모르지만 편의상). 
특별한 내용은 없습니다, 기존  KS0108B를 사용하는 Code에서 Chip Select 기능만  조금 수정하면 사용가능합니다.

Truly Semiconductors MCG2305-A1-E


Feature:

  1. Power : DC +5V  (3.8V까지 동작)
  2. LCD Type : STN (사진은 실물보다 진하게 나오더군요, 참고하세요)
  3. Resolution : 192 x 64
  4. SAMSUNG KS0108B 64CH Segment Driver x 3
  5. 8-Bit Parallel, 68-family MPU Interface.
  6. Backlight : LED Backlight (Yellow Green)
  7. 부실한 Datasheet(NOT RECOMMENDED).
  8. 판매자정보
Outline

Interface


제조사  Datasheet(NOT RECOMMENDED)는 내용이 부실,  동일 사양 다른 제조사 Datasheet(Recommended)를 참고 하였습니다.

  1. Pin No. 13(VDD) 3.8V ~ 5V 까지 동작됩니다.                                                                      
  2. Pin No. 12(V0), 17(VOUT) 3(VEE) Datasheet에는 Contrast  정보가 없습니다 Schematic 참고하세요 .
  3. Pin No. 15(CSA), 16(CSB)  Datasheet에는 Chip Select 정보가 없습니다 Chip Select 를 참고하세요.
  4. Pin 19,20(LED Backlight)은 1/4W 10R 저항  2개 병렬(5R) 연결하시면 됩니다  Schematic 참고하세요.
  5. MCU fOSC 4MHz ~ 25MHz 까지 코드 수정없이 동작됩니다.                                                       
MCG2305-A1-E Pin Assigment

Chip Select


화면은  3개의 Chip이 각  영역을 담당합니다, Datasheet에서는 표시 영역에 따라 Left, Middle,  Right로 표현하고 있으며 CHIP_0는Left , CHIP_1는 Middle, 마지막 CHIP_2가 Right 입니다 

어떤 칩에 신호를 줘야 할지는 (현재 x축 좌표 / 64) 값으로 알수 있으며 아래 그림은 해당 영역별로  CSB, CSA 설정값을 보여주고 있습니다.


Segment Driver Allocation
// 현재 x 좌표가 담당할 Chip No. 번호 가져오기

#define _chip_get_no(x) ((x/LCD_CHIP_WIDTH)) // get current Chip No. 

// Chip No.에 따른 CSB, CSA 설정
/* Specify a controller between  0 and LCD_X_PIXEL-1  */
static void _chip_select(uint8_t device)
{
 /*
   LCD_CHIP0    0 ~   63
   LCD_CHIP1   64 ~  127
   LCD_CHIP2  128 ~  191

    CSB CSA Function
      0   0 Enable access to the Left Side      (64 column) of the LCD module   // LCD_CHIP_1
      0   1 Enable access to the Middle Section (64 column) of the LCD module   // LCD_CHIP_2
      1   0 Enable access to the Right Side     (64 column) of the LCD module   // LCD_CHIP_3
      1   1 Disable all the access to LCD module                                // UNSELECT
 */
  switch(device)
  {
    case(LCD_CHIP_0):
     LCD_CTRL_PORT   &=  ~(_BV(LCD_CSB_PIN) |_BV(LCD_CSA_PIN));
     break;
    case(LCD_CHIP_1):
      {
        LCD_CTRL_PORT &=  ~(_BV(LCD_CSB_PIN));
        LCD_CTRL_PORT |=    _BV(LCD_CSA_PIN);
       break;
      }
    case(LCD_CHIP_2):
      {
        LCD_CTRL_PORT  |=   _BV(LCD_CSB_PIN);
        LCD_CTRL_PORT  &= ~(_BV(LCD_CSA_PIN));
        break;
      }
   default:
     break;
  }
#ifdef _FAST_MCU_
  _delay_us(LCD_tASU);
#endif
}

Schematic

Atmega328p 20MHz


Download

Source code Schematic(Eagle cad, pdf, jpg) Datasheet

Useful Links

Universal Graphics Library for 8 Bit Embedded Systems KS0108 Graphics LCD library(Arduino) If you have any questions, please feel free to ask. Enjoy!

Friday, December 5, 2014

Microtips Technology MTG-S12232 Graphic LCD

2x16 Character 처럼 생겼지만 122x32 해상도의 작은 Graphic LCD입니다. 다른것들과 달리 LCD의 Pin 7(CL)은 외부 Display Synchronous Signal 입력핀입니다.  2KHz Square wave 만 입력하면 되므로, MCU의 Timer 이용하는 Software적인 방법,  555 Timer를 이용하는 Hardware적인 방법중 편리한 방법을 사용하면됩니다.
Microtips Technology MTG-S12232

Feature:

  1. LCD Type : STN (사진은 실물보다 진하게 나오더군요, 참고하세요)
  2. Resolution : 122 x 32.
  3. EPSON SED1520/21 Controller/Driver.
  4. 8-Bit Parallel, 68-family MPU Interface.
  5. LED Backlight (Yellow Green)
  6. 2KHz 외부 External Clock이 필요합니다.
  7. 엽기적인 Datasheet  , 한페이지 건너 잘못된 곳 발견(8,11,12,16,20 Page)
  8. 판매자정보
Outline

Interface
  1. Pin No. 2(VDD) 3.3V ~ 5V 까지 동작됩니다(3.3V는 화면에 미세한 떨림 발생)
  2. Pin No. 3(VEE) Datasheet상에는 N,C로 표기 되어있으나 3.3V 구동시에만 N.C이며 5V 구동시 반고정 저항을 통해 Contrast 조정이 필요합니다, 아래 Schematic 참고하세요
  3. Pin No. 7(CL)은 아래 2KHz 외부 External Clock 참고 하세요.
  4. Pin No. 18(RES) VCC에 바로 연결 하시면 Port 1개를 줄일 수 있습니다.
  5. Pin 19,20(LED Backlight)은 12R 저항  2개가 병렬(6R)로 부착 되어있습니다, 5V 사용시 바로 연결하시면 됩니다(120mA)
MTG-S12232 Pin Assigment

2KHz External Clock을 만드는 2가지 방법

정확한 2KHz 만들려고 노력 할 필요는 없습니다, 2KHz를 기준으로 Frame Rate(65Hz ~ 75Hz)에 따라 조금 변화를 주어도 괜잖습니다.
Relationship between external clocks (fCL) and frames(SED1520 Datasheet)

Timer1 CTC Mode를 이용한 Software 적인 방법

CTC Mode OC1A output을 이용하면 따로 인터럽트 루틴을 작성하지 않아도 PB1(OC1A) 에서 2KHz Square Wave가 나오므로 간편합니다.
Atmega328p Datasheet

// CODE
#define LCD_CL_PORT         PORTB   // External Clock Output (typ. 2KHz)
#define LCD_CL_DDR          DDRB
#define LCD_CL_PIN          PB1     // OC1A, Output Compare Match output

#define LCD_fCL             2000    // External Clock (typ. 2KHz)
#define LCD_fN                 1    // The N variable represents the prescaler factor (1, 8, 64, 256, or 1024).
#define LCD_fOCnA          (F_CPU/( 2 * LCD_fN * (1 + LCD_fCL )))  

static void init_timer1(void)
{
  TCCR1A  = _BV(COM1A0);             // Toggle OC1A/OC1B on Compare Match(toggle the OC1A output line)
  TCCR1B  = _BV(WGM12)|_BV(CS10);    // CTC Mode, clkI/O/1 (No prescaling)
  TIMSK1  = _BV(OCIE1A);             // Enable Timer/Counter1 interrupts.
  OCR1A   =  LCD_fOCnA;              // External Clock (typ. 2KHz)
}
OC1A Pin Out

555 Timer를 이용한 Hardware 적인 방법

MCU의 Port가 부족하거나, Timer 이용이 어렵다면 555 Timer를 이용하세요,  계산방법은 인터넷에서 쉽게 찾으실수 있습니다.
555 Timer Calculator - House of Jeff
2.058KHz (54.7% Duty) Sqare wave

Schematic

Atmega328p 20MHz

Download



If you have any questions, please feel free to ask.
Enjoy!

Errata 

2014.12.25
Revision of the schematic, Fix Wrong Pin# (A0, CS1,CS2,E,RW, RST).
회로도상에 잘못표기된 Pin #(A0, CS1,CS2,E,RW, RST ) 수정후 반영.