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

python-LCD-display

Char 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는 호환 된다.

    Hitachi HD44780.pdf


    • 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 예
    • 아래 회로는 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) 프로그램 예: LCD-HD44780-4bit-class-main.py
      • 주: LCD 제어 library는 "Awesome MicroPython"의 "MicroPython I2C 16x2 LCD Screen"을 사용하였다.

      • LCD 제어 library와 테스트 프로그램(main())을 하나의 파일로 작성한 예


      • 실험을 위한 준비
        • 위에 있는 "윗 LCD Module을 사용 하여 Data Bit를 4Bit만 사용한 Interfacing 예"를 참고하여 Raspberry Pi Pico에 LCD 모듈을 연결 한다.
      • 실험 방법
        • LCD-HD44780-4bit-class-main.py를 다운로드하여 저장 한다.
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 LCD-HD44780-4bit-class-main.py를 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • 프로그램이 실행되면 main()에서 설정한 메세지가 LCD에 연속하여 출력된다.
      • LCD 제어 library와 테스트 프로그램(main())을 별도 파일로 작성한 예
        • LCD 제어 library 프로그램 예: LCD_HD44780.py



        • 실험을 위한 main 프로그램 예: LCD-HD44780-4bit-main.py



        • 실험을 위한 준비
          • 위에 있는 "윗 LCD Module을 사용 하여 Data Bit를 4Bit만 사용한 Interfacing 예"를 참고하여 Raspberry Pi Pico에 LCD 모듈을 연결 한다.
        • 실험 방법
          • LCD 제어 library 프로그램 "LCD_HD44780.py"를 다운로드하여 저장 한다.
          • 실험을 위한 main 프로그램 "LCD-HD44780-4bit-main.py"를 다운로드하여 저장 한다.
          • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
          • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
          • Thonny IDE의 "파일 -> 열기"를 실행하여 LCD_HD44780.py 파일을 Open 한다.
          • Thonny IDE의 "...(으)로 저장" 기능을 사용하여 LCD_HD44780.py 파일을 "MicroPython 장치"에 저장(Upload)한다.
          • Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 LCD-HD44780-4bit-main.py를 Open 한다.
          • 실험
            • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
            • 프로그램이 실행되면 main()에서 설정한 메세지가 LCD에 연속하여 출력된다.

    • Keypad와 LCD를 이용한 가산기 프로그램 예 lcd-keypad-adder.py
      • library와 테스트 프로그램(main())을 하나의 파일로 작성한 예


      • 실험을 위한 준비
      • 실험 방법
        • lcd-keypad-adder.py를 다운로드하여 저장 한다.
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE에서 "파일 -> 열기... -> 이 컴퓨터"를 실행하여 lcd-keypad-adder.py를 Open 한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • Keypad에서 "정수 + 정수 = " 형태로 정수와 연산자를 입력하면 연산 결과가 LCD에 "정수 + 정수 = 정수" 형태로 출력된다.

    • I2C 통신을 사용한 LCD 모듈 제어 프로그램 예
    • I2C(AVR 에서는 TWI 라고 함) 통신을 사용한 LCD 모듈 제어 프로그램 예는 "Raspberry Pi Pico I2C(Inter-Integrated Circuit) 통신" 페이지에 작성하였으니 참고 바람니다.

      참고자료: I2C 통신을 사용한 LCD 모듈 제어


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