이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi, Raspberry Pi Pico, WiFi 모듈을 사용 합니다.

atmega2560-lcd-display

AVR LCD Display
  Character LCD Display Controller와 LCD Module

    LCD Display Module은 LCD Panel과 LCD Display Controller IC로 구성 된다.

    이용자가 LCD Display Module을 선택 하면 LCD Panel의 물리적인 크기와 기능이 결정된 상태 이기 때문에 여기서는 LCD에 표시되는 문자와 위치 등을 프로그램으로 제어하는 Display Controller에 대한 Interface와 Control(제어 프로그램)에 대하여 설명 한다.





  • Hitachi HD44780 Dot matrix LCD driver & controller
  • HD44780 LCD Display Controller는 대표적인 Character type dot matrix LCD controller 이다.

    Hitachi HD44780와 삼성 S6A0069 Dot matrix LCD driver & controller는 호환 된다.


    • HD44780 LCD driver의 개요
      • 5 x 8 and 5 x 10 dot matrix possible
      • Low power operation support: 2.7 to 5.5V
      • Correspond to high speed MPU bus interface: 2 MHz (when VCC = 5V)
      • 4-bit or 8-bit MPU interface enabled
      • 80 x 8-bit display RAM (80 characters max.)
      • 9,920-bit character generator ROM for a total of 240 character fonts
        • 208 character fonts (5 ´ 8 dot)
        • 32 character fonts (5 ´ 10 dot)
      • 64 x 8-bit character generator RAM
      • Wide range of instruction functions:
        • Display clear, cursor home, display on/off, cursor on/off, display character blink, cursor shift,display shift

    • HD44780 Block Diagram
      • HD44780는 Instruction Register(IR)과 Data Register(DR)을 이용하여 컴퓨터(대부분의 경우 Embedded computer)로 부터 명령(Instruction)과 Display Data를 전송 받고, LCD Controller의 동작 상태(Flag)를 전송 한다.
      • 다른 장치(Embedded computer)와 통신은 3종류의 Control 신호(Register Selection(RS), Read/Write(R/~W), Enable(E))와 Data Bus(DB0 - DB7) 신호를 이용 하여 실행 된다.

    • HD44780 LCD driver의 중요 기능
      • 외부 장치와 통신에 이용 되는 Registers
        • Instruction register(IR) : Stores instruction codes
          • display clear, cursor shift, 등의 명령과
          • Address information을 외부 장치로 부터 받는다.
            • Display data RAM (DDRAM)과
            • Character generator RAM (CGRAM)의 Address를 받는다.
        • Data register(DR): DDRAM 이나 CGRAM에 Read/Write 하는 Data을 임시로 저장 하는 Rg 이다.
      • LCD Controller의 상태를 표시 하는 Busy Flag (BF)
        • HD44780가 내부 동작 모드일 경우(Busy 상태)에는 다음 명령을 받을 수 없기 때문에 LCD Controller의 내부 동작 상태를 표시하는 Flag가 필요 하다.
        • Busy Flag는 DB7에 Output 된다.
      • Address Counter(AC)
        • LCD Controller 내부에 있는 Rg로 Instruction register로 부터 필요한 Address 정보를 받는다.
        • DDRAM 이나 CGRAM의 Address를 저장 한다.
      • Registers Selection과 Operation
        • Registers Selection 신호(RS)
          • RS가 Low(0)인 경우 LCD Controller 내의 Instruction register가 선택 된다.
          • RS가 High(1)인 경우 LCD Controller 내의 Data register가 선택 된다.
        • Read/Write Operation 신호(R/~W)
          • R/~W가 Low(0)인 경우 RS Register에 의하여 선택 된 Rg에 Write Operation이 실행 된다.
          • R/~W가 High(1)인 경우 RS Register에 의하여 선택 된 Rg로 부터 Read Operation이 실행 된다.

    • Display Data RAM (DDRAM)
      • Display Data RAM (DDRAM) Address Counter(AC)
        • Display data RAM(DDRAM)은 80 x 8 bits(80자)를 저장 할 수 있다.
        • 80 Byte의 Address(DDRAM address) 공간을 표시 하기 위하여 7Bit Address Counter가 필요 하다.
      • 1-Line Display(N=0) 모드인 경우 Display 위치와 DDRAM address
      • 1-Line에 8자를 표시하는 LCD Panel인 경우 Display 예
        • LCD Display Module이 1줄에 8자를 표시 할 수 있는 경우, 윗 그림과 같이 DDRAM에 저장 할 수 있는 80자(Byte) 중 선택된 8자만 Display 된다.
        • Shift Left Operation: 윗 그림과 같이 DDRAM에 저장된 80 Byte의 Data가 Left Shift 되고 0 번지 부터 7 번지 사이의 Data가 Display 된다.
        • Shift Right Operation: 윗 그림과 같이 DDRAM에 저장된 80 Byte의 Data가 Right Shift 되고 0 번지 부터 7 번지 사이의 Data가 Display 된다. 0 번지에 8번지의 Data가 아니라 16진수 0x4f(79번째) 번지의 Data가 Shift 되는 것에 유의 할 것.
      • 2-Line Display(N=1) 모드인 경우 Display 위치와 DDRAM address
      • 2-Line에 각 Line 마다 8자를 표시하는 LCD Panel인 경우 Display 예
        • LCD Display Module이 2줄에 8자를 표시 할 수 있는 경우, 윗 그림과 같이 DDRAM에 저장 할 수 있는 80자(Byte) 중 선택된 8자만 각 Line에 Display 된다. 둘째줄 첫번째 위치에 16진수 0x40 번지의 Data가 Display 되는 것에 유의 할 것.
        • Shift Left Operation: 윗 그림과 같이 각 줄의 Data가 별도로 Left Shift 되고 그 결과가 Display 된다.
        • Shift Right Operation: 윗 그림과 같이 각 줄의 Data가 별도로 Right Shift 되고 그 결과가 Display 된다.
      • 2-Line에 각 Line 마다 16자를 표시하는 LCD Panel인 경우 Display 예

    • Instructions
    • 아래 표는 HD44780 LCD Controller에서 실행 할 수 있는 명령을 요약 하여 보여 주고 있다. 자세한 내용은 첨부한 pdf 자료를 참고 하기 바람. 별첨 자료: hd44780.pdf


  • LMC1623A LCD Module의 외부 Pin 배열
    • 아래 표는 LCD Module(LMC1623A)의 Pin 배열과 Function 설명서 이다.
    • 이 Module은 기본적으로 8 Bit Data Bus를 사용 하고 있다. 그러나 이 경우 Control 신호 3개를 포함 하면 8 Bit Output Port 하나를 사용 하여 제어 할 수 없기 때문에 이 LCD Module은 Data Bus를 4 Bit 만 사용(8 Bit Data를 4 Bit 씩 2번 전송)하는 변형된 Interface를 제공 한다.
    • LCD Module(LMC1623A)은 모듈 동작에 필요한 14Pin 이외에 Backlight 제어를 위한 2개의 핀을 포함 하여 16Pin으로 구성된 경우가 있다.(아래 그림 참고 요)


  • 윗 LCD Module을 사용 하여 Data Bit를 4Bit만 사용한 Interfacing 예(Port A 사용)
    • 아래 회로는 LCD Module(LMC1623A)과 외부장치(Embedded Computer)의 Interfacing 예 이다.
    • 이 예에서는 Data Bit를 4 Bit 만 사용 하여 PortA 8 Bit 중 7 Bit(Control 신호 3 Bit + Data Bit 4 Bit)만 사용 하였다.

  • HD44780 Controller 의 Access Type과 Timing Diagram
  • 아래 그림은 LCD Module 제어 프로그램 작성에 필요한 정보를 제공 하기 위한 Timing Diagram 이다.


  • Parallel Port LCD Interface(4 Bits) 프로그램 예:
    • Parallel Port LCD Interface(4 Bits) 프로그램 예: cho_avr_lcd_1602_4bit_soft_2560.zip
    • Console 프로그램으로 부터 문자를 입력 받아 Console과 LCD에 출력하는 실험을 위한 회로 예

      Console 프로그램으로 부터 문자를 입력 받아 Console과 LCD에 출력하는 main 프로그램 예:


    • LCD 제어 함수에서 사용 하는 Header File: avr_lcd_1602_4bit.h

    • LCD 제어 함수 프로그램 예: avr_lcd_1602_4bit_soft.c

      • 실험을 위한 준비
        • 실험 구성도를 참고하여 PC와 Mega board 사이에 UART 통신선을 연결한다.
          • Arduino Mega 2560를 사용하는 경우 2560 Pin name과 Mega board pin name mapping table을 참고하여 신호선을 연결한다.

            참고자료: Arduino Mega 2560 PIN mapping table

          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Mega board의 TXD1(PD3)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Mega board의 RXD1(PD2)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Mega board의 GND를 연결한다.
          • 주: 컴퓨터에 Serial Port가 없는 경우 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. 개발보드에 따라서는 "USB --> UART(RS232) 변환 모듈"을 내장하고 있는 경우가 많기 때문에 본인이 사용하는 개발보드에서 확인 하여야 한다.

            참고자료: USB - Serial 변환 모듈

        • 실험 구성도를 참고하여 Mega board에 LCD display module의 신호를 연결한다.
          • 실험 구성도를 참고하여 LCD 제어 신호(RS, R/W, Enable)를 연결한다.
          • 실험 구성도를 참고하여 LCD Data 신호(Data0, Data1, Data2, Data3)를 연결한다.
        • 위 "LCD 모듈 4Bit Interface 예"을 참고하여 전원과 Contrast adjustment 선을 연결한다.
          • GND: LCD 모듈 1번 핀
          • Vdd: LCD 모듈 2번 핀
          • Contrast adjustment: LCD 모듈 2번 핀. 5 에서 10K 가변저항을 사용하여 "LCD 모듈 4Bit Interface 예"와 같이 연결한다.
          • 주: 처음 LCD display module을 연결한 경우에는 Contrast adjustment 가변저항을 조정하여 LCD에 문자가 잘 보이도록 하여야 한다.

      • 실험 방법
        • cho_avr_lcd_1602_4bit_soft_2560.zip 파일을 Download하여 압축을 해제한다.
        • cho_avr_lcd_1602_4bit_soft_2560.hex를 개발 보드에 Upload 한다.
        • 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
        • 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
        • 실험:
          • 개발 보드의 Reset SW를 누르면 모니터에 "LCD test" 메세지가 출력된다.
          • LCD display module의 첫 Line에 "Line1 T" 메세지가 출력된다.
          • LCD display module의 둘째 Line에 "Line2" 메세지가 출력된다.
          • 모니터 프로그램에서 영문자를 입력하면 모니터와 LCD의 첫줄에 문자가 출력(첫줄의 끝까지만 출력됨)된다.

    • Keypad와 LCD를 이용한 가산기 프로그램 예: cho_keypad_lcd_adder_pointer_2560.zip
    • External Interrupt를 이용 한 Keypad Input, Timer Interrupt를 이용한 Debouncing, I/O Buffer로 Circular Buffer를 사용 하는 방법, 표준 출력 장치로 LCD를 사용 하는 방법을 이해 하기 위한 예 이다.

      Keypad와 LCD를 이용한 가산기 프로그램 시스템 구성도

      • 실험을 위한 준비
        • Arduino Mega 2560를 사용하는 경우 2560 Pin name과 Mega board pin name mapping table을 참고하여 신호선을 연결한다.

          참고자료: Arduino Mega 2560 PIN mapping table

        • 실험 구성도를 참고하여 Mega board에 Keypad를 연결한다.
        • 참고자료: Keypad Interfacing

        • 실험 구성도를 참고하여 Mega board에 LCD display module의 신호를 연결한다.
          • 실험 구성도를 참고하여 LCD 제어 신호(RS, R/W, Enable)를 연결한다.
          • 실험 구성도를 참고하여 LCD Data 신호(Data0, Data1, Data2, Data3)를 연결한다.
        • 위 "LCD 모듈 4Bit Interface 예"을 참고하여 전원과 Contrast adjustment 선을 연결한다.
          • GND: LCD 모듈 1번 핀
          • Vdd: LCD 모듈 2번 핀
          • Contrast adjustment: LCD 모듈 2번 핀. 5 에서 10K 가변저항을 사용하여 "LCD 모듈 4Bit Interface 예"와 같이 연결한다.
      • 실험 방법
        • cho_keypad_lcd_adder_pointer_2560.zip 파일을 Download하여 압축을 해제한다.
        • cho_keypad_lcd_adder_pointer_2560.hex를 개발 보드에 Upload 한다.
        • 실험:
          • 개발 보드의 Reset SW를 누르면 LCD display module의 둘째 Line에 "KeyPad Adder" 메세지가 출력된다.
          • Keypad에서 정수와 + 연산자(* Key), 정수, = 연산자(# Key)를 입력하면 LCD display module의 첫 Line에 입력 내용과 연산 결과가 출력된다. 입력 예: 12+23= , LCD 출력 예: 12 + 23 = 35

    • I2C 통신을 사용한 LCD 모듈 제어 프로그램 예
    • I2C(AVR 에서는 TWI 라고 함) 통신을 사용한 LCD 모듈 제어 프로그램 예를 Two-wire Serial Interface(TWI) 페이지에 작성하였으니 참고 바람니다.

      I2C 통신을 사용한 LCD 모듈 제어 프로그램 예


  • LCD 표시 장치 관련 페이지 보기