RnA DISPLAY 구동 Clcd 구동 Made by Bonobonobono
제작 목적 기본적인 IO만 구동할줄 안다면 누구나 구동할 수 있으나 맞춤형 자료가 없기에 작성하였음.
LCD란 LCD 액정이 갖는 여러 가지 성질 가운데 전압을 가하면 분자의 배열이 변하는 성질을 이용하여 표시하는 장치. : Liquid Crystal Display. 액정이 갖는 여러 가지 성질 가운데 전압을 가하면 분자의 배열이 변하는 성질을 이용하여 표시하는 장치. - 다음 백과사전 -
LCD의 종류 그래픽 LCD 캐릭터 LCD 흔히 보는 LCDTV, LCD모니터 문자나 숫자등만 표시할때 주로 쓰임
LCD 모듈의 구성 LCD Panel LCD Driver/Controller Back Light 실제 표시되는 부분 데이터를 받아 LCD패널에 표시하는 IC 실제 데이터를 입/출력하는 부분 Back Light 우리가 LCD를 제어하고자 할 때 실제적으로 데이터를 입출력 하는 부분은 드라이버 IC이다.
LCD PANEL 종류 TN-LCD STN-LCD TFT-LCD Twisted Nematic Liquid Crystal Display STN-LCD Super Twisted Nematic Liquid Crystal Display TFT-LCD Thin Film Transistor Twisted Nematic Liquid Crystal Display TN패널의 경우 가격이 제일 저렴함. 시야각이 좁다. STN은 TN패널의 개량형. 시야각이 더 넓어짐. TFT 가격이 제일 고가인 반면 시야각이 넓다. LCD의 동작원리 1) TN-LCD TN-LCD의 동작원리는 액정분자가 면에 따라서 일축(네마틱) 배향하도록 처리한 유리판을 직각으로 교차시켜 대향시키고 그 사이에 액정을 넣으면 액정분자의 배열이 꼬이고(트위스트), 거기에 전압을 가하면 액정분자가 전계방향으로 배열을 바꾸는 원리이다. 이 액정셀을 편향축을 직행시킨 편향판으로 끼우면 전압 OFF시에는 입사광이 통과하고, 전압 ON시에는 입사광을 차단하여 명암의 콘트라스트를 얻을 수 있는데, 이 효과를 표시장치에 응용하는 것이다. 2) STN-LCD STN-LCD의 동작원리는 TN과 같고 다만 비틀림각을 더 주었다는 것이 특징이다(90°→240°정도). TN이 가지는 단점인 정보표시량의 한계에 의해 대화면에의 응용이 불가능하기 때문에 비틀림각을 크게 하여 전기광학적 특성의 경사도를 향상시킨 것이다. 위상차판을 이용하여 바탕색을 보상함으로써 B/W가 가능하며, 컬러필터를 사용하여 컬러화도 가능하게 된다. 3) TFT-LCD TFT-LCD의 구동원리는 TN의 표시정보량의 한계를 극복하는 다른 방법으로서, 기존 TN모드를 그대로 사용하면서 수동구동 대신 능동구동방법을 사용한 방식이다. 주어진 신호가 ITO를 통해 각 DOT에 그대로 가해지는 수동구동(TN, STN)과는 달리 능동구동기법은 각 DOT마다 전기적 소자를 제조하여 하나 하나의 각 화소를 직접 구동하기 때문에 콘트라스트, 해상도, 시야각, 응답속도 등에서 수동구동보다 훨씬 우수한 특성을 나타낸다
LCD PANEL
LCD CONTROLLER 컨트롤러의 역할 종류 LCD 패널을 uP가 제어하도록 도와줌. 폰트DATA내장. CLCD에 주로사용되는 컨트롤러. : HD44780, SED1278, ST7066, NT3881등.
LCD DRIVER 드라이버 IC의 역할 드라이버IC의 종류 LCD PANEL을 제어하는 역할. 컨트롤러IC의 명령을 받아 LCD에 DISPLAY. 드라이버IC의 종류 HD44100, SED1181, ST7065, NT3882
LCD 컨트롤러/드라이버 컨트롤러 드라이버 IC들을 패키지로(TQFP등)한 제품을 사용 하면 단가가 상승하기 때문에 패키지가 되지 않은 IC를 PCB에 올려놓은뒤 그 상태에서 배선을 하고 그 위에 코팅을 한다.
Back Light CLCD의 Back Light LED조명 LCD는 자체 발광하지 않기때문에 빛이 있어야만 DISPLAY되는 내용을 알 수 있다. 그러기 때문에 LCD 패널의 후면에서 전면을 향해서 빛을 조사하여 내용을 알수 있도록 해준다. 이 역활을 하는 부품이 Back LI
CLCD 개요 CLCD(Character LCD) 표시 문자수에 따른 종류 텍스트형 LCD 필요시 폰트 추가 가능 종류 표시 문자수에 따른 종류 8x2, 16x2, 16x4, 20x2, 20x4, 40x2 등. 문자DISPLAY시 문자데이터와 표시위지 데이터를 LCD 컨트롤러에 전송하면 원하는 문자가 출력됨
CLCD 모듈 구성도 원하는 내용을 컨트롤러에 입력하면 컨트롤러를 그에 해당하는 내용을 LCD드라이버에 출력하고 LCD드라이버는 LCD컨트롤러로부터 받은 데이터를 LCD_PANEL에 DISPLAY함.
CLCD 내부 구조 DD RAM CG ROM CG RAM 각 자리에 표시할 문자 데이터를 저장. 문자 코드를 실제 표시할 문자 폰트로 변환. CG RAM 사용자 정의 문자를 저장.
CLCD의 외형
CLCD의 외형 4line 4x20의 5x7의 도트를 가진 lcd이다
CLCD의 외형 도트부분. 도트의 크기에 따라 5x7(5x8), 5x10(5x11)로 분류된다. 데이터 시트에서 발췌.
CLCD의 핀 배열 CLCD는 모두 같은 핀 배열을 갖는다. 15, 16번 핀은 lcd후면에 발광체(LED)가 달려있을 경우 LED 의 전원 공급용이다. 일반적인 LED제어와 같이 저항을 달아 전류를 흘려준다.
CLCD의 핀 배열 각 PIN의 의미. 1 – LCD의 GND 2 – LCD 전원 공급(5V) 3 – 문자의 명암 조절 4 – RS (제어PIN) 5 – R/\W (제어PIN) 6 – E(Enable) (제어PIN) 7~14 – 데이터 PIN 15~16 – LED Anode,Cathode CLCD의 핀배열은 거의 표준화가 되었다고 할 수 있을 대부분 비슷하다. 1,16번의 백라이트핀은 모듈에 따라 있을 수도 없을 수도 있다.
CLCD PIN설명 Vss 내부회로의 공통선(GND) Vdd 내부회로의 구동 전압(5V)
CLCD PIN설명 RS(Register Select) RS = 1 -> DR(DATA Register) RS = 0 -> IR(Instruction Register) 명령어 DATA 송신시
CLCD PIN설명 R/W(Read / Write) R/W = 1 -> Read R/W = 0 -> Write DATA 읽어오기 R/W = 0 -> Write DATA 쓰기
CLCD PIN설명 E(Enable) E = 1 -> LCD Enable E = 0 -> LCD Disable
CLCD PIN설명 VO LED Anode, Cathode LCD의 명암을 조절하는 단자 VO단자의 전압이 0V에 가까워질수록 문자의 명암이 어두워짐. LED Anode, Cathode LCD 후면의 LED단자. 저항(10~15Ω)을 이용하여 전원 인가. VO의 전압이 올라갈 수록
CLCD 명령어 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 실행시간 Clear Display 1 1640 1 1640 화면 CLEAR/ 00번지로. Return home X 시프트 전화면/ 00번지로 Entry mode set I/D S 40 I/D :커서 이동방향 D:화면 시프트 모양 DISPLAY On/Off control D C B D:화면, C:커서 on/off B:커서 깜빡임 Cursor/Display Shift S/C R/L x S/C: 커서,화면의 이동 R/L:시프트 방향 Function set DL N F DL:DATA길이 N:LINE수 F:문자 폰트 정의 CG RAM ADDR set ACG CGRAM 어드레스 주소 DD RAM ADD DDRAM 어드레스 주소 Busy Flag/ ADDR RD BF AC BF:LCD측에서 현제 명령을 받을수있나없나 출력. CG/DD RAM DATA WR WRITE DATA CG/DD RAM에 데이터를 기록 DATA RD READ DATA CG/DD RAM에 데이터를 읽어옴
CLCD 명령모드 Clear display LCD에 표시 되고 있는 내용을 모두 지움 Entry모드의 I/D = 1로 강제 설정함. 커서를 00번지(왼쪽 1번라인)로 이동시킴
CLCD 명령모드 Return home 커서를 00번지(왼쪽 1번라인)로 이동시킴. 현재 표시하는 내용은 지우지 않음.
CLCD 명령모드 Entry mode set 커서의 위치와 화면을 SHIFT 시킬 것인지 설정하는 mode I/D(Increment Mode) I/D = 1 -> 자동으로 커서 오른쪽으로. I/D = 0 -> 자동으로 커서 왼쪽으로. S(Display shift operation) S = 1 -> 커서가 shift될때 화면도 shift됨 S = 0 -> shift되지 않음.
CLCD 명령모드 Display ON/OFF control 커서나 화면을 ON/OFF함, 커서의 깜빡임 설정 D (DISPLAY),C(Cursor) D, C = 1 -> 화면, 커서 ON. D, C = 0 -> 화면, 커서 OFF. B(Blink) B = 1 -> 커서 깜빡임. B = 0 -> 커서 깜빡이지 않음.
CLCD 명령모드 Cursor or Display Shift S/C() S/C = 1 -> 화면만 Shift. S/C = 0 -> 커서만 Shift. R/L(Right/Left) R/L = 1 -> 오른쪽으로 Shift. R/L = 0 -> 왼쪽으로 Shift.
CLCD 명령모드 Function set 데이터 길이(8/4bit)와 표시행수, 도트의 사이즈를 설정. DL(DATA Line) DL = 1 -> 데이터를 8bit단위로 송수신. DL = 0 -> 데이터를 4bit단위로 송수신. N() N = 1 -> 화면표시 행수를 2행으로 함. N = 0 -> 화면표시 행수를 1행으로 함. F(Font Size) F = 1 -> 도트 사이즈를 5x10 (실제 사이즈 5x11). F = 0 -> 도트 사이즈를 5x7 (실제 사이즈 5x8).
CLCD 명령모드 CG RAM Address set CG RAM의 주소를 지정한다.
CLCD 명령모드 DD RAM Address set DD RAM의 주소를 지정한다. DD RAM : CLCD의 각 자리에 표시되는 문자 저장장소.
CLCD 명령모드 BF / Addr RD BF(Busy flag) AC 모듈이 현재 동작 중 이여서 명령어를 받을 수 있는지 없는지 검출. BF = 1 -> 현재 동작 중(명령어 수신 불가). BF = 0 -> 대기중(명령어 수신 가능). AC 현재 처리하고 있는 주소의 값을 출력함.
CLCD 명령모드 CG/DD RAM Data WR CG/DD RAM Data Rd DDRAM에 입력하는 DATA값은 표에 주어져있지만 ASCII코드와 호환성이 있다.(0x20~0x7d)
CLCD 기본 구동법 CLCD초기화 원하는 좌표로 이동. 표시할 문자를 출력 초기화 후 좌표데이터와 문자데이터만 전송하면 문자가 출력됨
CLCD 초기화(8bit) LCD 모듈에 전원을 인가한다. 전원을 인가후 30ms이상 대기 전원인가 LCD 모듈에 전원을 인가한다. 전원을 인가후 30ms이상 대기 Function set Function set명령을 수행한다. Display on/off Display on/off control을 수행한다. Entry mode set Entry Mode set명령을 수행한다. 전원 인가후 30ms정도 대기하는 이유는 컨트롤러가 내부적인 준비를 마치고 동작이 되려면 15~30ms가 필요하기 때문이다. Function set의 명령을 4.1ms, 100us정도씩 지연을 하면서 3회정도 반복한다.(명령 반복중 Busy check하면 안됨 ). 반복하여 입력하는 이유는 확실한 초기화를 위해서이다.
CLCD 화면 출력 DDRAM ADDR 송신 Busy check DDRAM DATA 송신 위와 같이 DDRAM ARRD을 송신하고 DATA를 송신하면 원하는 위치에 원하는 문자를 출력할 수 있다. ADDR의 송신없이 DATA만 송신하면 현제 커서의 위치에 문자가 출력이 된다. 커서를 shift하게 설정하였다면 처음에 주소를 송신한뒤 DATA만 송신하면 자동으로 주소가가 shift되어 출력된다.
CLCD DDRAM ADDR 기본적으로 왼쪽의 상단부가 00임. 이것은 거의 모든 CLCD가 동일함. ADDR값을 입력할때 7번 bit는 high상태 00,40,14,54 7번bit를 High상태로 한 뒤 주소값(4x20)
실제 작성 프로그램 핀배열. MCU - ATMEGA128 프로그램 - AVR STUDIO LCD - PMC2004E-SBLW D포트의 0번이 R/W 1번이 Rs에 연결됨 LCD측 DB 0~7번핀 -> AVR의 C포트의 0~7번과 연결. MCU - ATMEGA128 프로그램 - AVR STUDIO LCD - PMC2004E-SBLW - 4line x 20 , 5*11dot 의 lcd 모듈.
실제 초기화 프로그램 void lcd_init() //LCD초기화 함수 { PORTD=0x00; delay_ms(30); PORTC=0x38; //0b0011 1000 PORTC=0x38; busy_chk(); PORTC=0x01; //0b0000 0001 PORTC=0x0c; //0b0000 0110 PORTC=0x06; //0b0000 1100 } D포트의 0번이 R/W 1번이 Rs에 연결되어있고 데이터 비트인 DB0~7번핀은 C포트의 0~7번과 연결.
Busy check void busy_chk() { PORTD=0x01; // R/W핀을1로set DDRC=0x00; // 데이터 입력모드로. delay_us(40); // 최소시간지연 while(PINC&0x80); // BF가 0이 될때까지 대기 DDRC=0xff; // BF가 0이 된후 출력으로 PORTD=0x00; // 제어상태로 전환 }
문자 출력 void lcd_put(char ch) { PORTD=0x02; //문자데이터를 쓰기 위해 DDRAM WR모드로 전환 PORTC=ch; //입력 받은 문자를 출력함(ASCII) busy_chk(); //문자 출력 후 처리 될 때까지 기다렸다가 제어를 해야 함. }
원하는 위치로 이동 void gotoxy(unsigned char x,unsigned char y) //원하는 좌표값을 매개변수로 받음. { char xy[4]={0x80,0xc0,0x94,0xd4}; //문자열의 첫번째 주소를 배열로 생성 DDRC=0xff; //C,D포트를 출력으로 설정. DDRD=0xff; PORTD=0x00; //좌표값 입력위해 RS, R/W에 0을 입력. PORTC=(xy[y]+x); //좌표값을 주소값으로 변환하여 출력. busy_chk(); //처리확인. delay_ms(100); //처리후 100ms의 시간을 주어 확실히 함. }
전체소스. void busy_chk(){ #include<avr/io.h> PORTG=0x02; void LCD_bcd(unsigned int dec){ int a; char bcd[4]; bcd[3]=(dec/1000); bcd[2]=(dec/100)-(bcd[3]*10); bcd[1]=(dec/10)-(bcd[3]*100)-(bcd[2]*10); bcd[0]=dec%10; for(a=3;a>=0;a--) { lcd_put(bcd[a]+48); } void lcd_init(){ delay_ms(30); PORTC=0x38; busy_chk(); PORTC=0x01; PORTC=0x06; PORTC=0x0f; PORTC=0x80; void busy_chk(){ PORTG=0x02; DDRC=0x7f; delay_us(100); while(PINC&0x80); DDRC=0xff; PORTG=0x00; } void lcd_put(char ch){ PORTG=0x01; PORTC=ch; busy_chk(); void gotoxy(unsigned char x,unsigned char y){ char xy[4]={0x80,0xc0,0x94,0xd4}; DDRG=0xff; PORTC=(xy[y]+x); delay_ms(100); void lcd_string(unsigned char *ch){ int i; for(i=0;ch[i]!=0x00;i++) { lcd_put(ch[i]); void lcd_clear(){ PORTC=0x01;