사용자 도구

사이트 도구

English

clcd:index

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
clcd:index [2018/07/31 11:27]
Comfile Technology [아두이노에서 CLCD 사용]
clcd:index [2018/12/13 13:18] (현재)
Comfile Technology [CUBLOC에서의 사용방법]
줄 1: 줄 1:
 +====== CLCD 캐릭터 LCD모듈 ======
  
 +본 제품은 시리얼 방식으로 LCD를 제어할 수 있는 “시리얼 캐릭터 LCD 모듈”입니다. 기존의 LCD모듈은 12가닥 정도의 많은 선과
 +복잡한 제어 방식을 이해해야만 사용할 수 있는 “병렬접속” 방식이었지만,​ 본 제품은 단 한 선으로 시리얼 방식의 데이터를
 +송신하여,​ LCD상에 글자를 표현할 수 있는 방식으로 LCD 모듈에 대한 구체적인 이해 없이도 손쉽게 사용할 수 있도록 만든
 +제품입니다. ​
 +
 +===== 제품의 특징 =====
 +
 +  * 16 by 2라인부터 20 by 4라인까지 다양한 사이즈
 +  * UART 또는 I2C(CUNET((CUNET와 I2C는 동일합니다.))) 인터페이스 방식
 +  * 위치조정(LOCATE) 및 화면 클리어(CLS),​ 커서 관리(CSR ON, OFF)기능 내장 ​
 +
 +===== 제품의 외형 =====
 +
 +{{ :​clcd:​clcd420b.png?​nolink |}}
 +
 + CLCD 모듈의 뒷면에는 콘트롤보드가 부착되어 있습니다. 이 콘트롤 보드가 CUNET(I2C) 신호를 받아서 LCD 모듈을 구동합니다. ​
 +
 +{{ :​clcd:​clcd_control_module.png?​nolink |}}
 +
 +===== 연결 방법 =====
 +
 +CLCD는 CUNET(I2C)통신 이외에도 RS232신호를 받을 수 있도록 되어 있습니다. RS232에는 2종류의 콘넥터가 있는데, 3핀 콘넥터
 +5V레벨의 RS232신호를 연결하는 콘넥터입니다. PC와 직접 연결하고자 할 때에는 +/- 12V 레벨의 RS232신호를 연결하는 4핀
 +콘넥터를 사용합니다. ​
 +
 +{{ :​clcd:​clcd_connection.png?​nolink |}}
 +
 +
 +딥스위치로 보레이트 및 I2C 슬레이브 어드레스를 설정할 수 있습니다. DIP스위치 중 4번 스위치는 사용하지 않는 스위치입니다. ​
 +
 +{{ :​clcd:​clcd_dipsw.png?​nolink |}}
 +
 +
 +===== 동작방법 =====
 +
 +I2C와 RS232는 동시에 동작하도록 되어 있으나, 실제로 사용할 때에는 둘 중 하나만 연결해서 사용하시기 바랍니다.
 +
 +다음은 CLCD의 명령코드 표입니다. ​
 +
 +^명령 ^전송예 (16진) ^바이트 수 ^수행시간 ^설 명^
 +|ESC ’C’ |1B 43 |2 |15mS |화면을 클리어 합니다. 이 명령 수행 후 반드시 15mS를 딜레이 해 주어야 합니다.|
 +|ESC ‘S’ |1B 53 |2 | |커서표시를 ON합니다.(디폴트)|
 +|ESC ‘s’ |1B 73 |2 | |커서표시를 OFF합니다.|
 +|ESC ‘B’ |1B 42 |2 | |백라이트를 ON합니다. (디폴트)|
 +|ESC ‘b’ |1B 62 |2 | |백라이트를 OFF합니다.|
 +|ESC ‘H’ |1B 48 |2 | |LOCATE 0,​0위치로 갑니다.|
 +|ESC ‘L’ |1B 4C x y |4 |100 uS |커서위치를 변경합니다.|
 +|ESC ‘D’ |1B 44 code 8byte |11| | 캐릭터코드 8부터 15까지 8개 영역은 유저가 정의할 수 있는 영역입니다.\\ ​ Code 에 8~15사이의 코드를 하나 선택하시고,​ 이어서 8 개의 데이터를 보내주십시오.\\ ​ 이 코멘드를 수행한 후에는 LOCATE 0,0 명령을 반드시 수행하여 주십시오.|
 +|ESC ‘K’ |1B 4B X Y X Y data 0 | | |문자를 표시합니다. 같은 X, Y 좌표를 두번 보냅니다. 이후 문자코드를 보냅니다. \\ 맨끝에는 0을 보냅니다. |
 +
 +===== CUBLOC에서의 사용방법 =====
 +
 +다음은 CB280모듈에서 CLCD모듈을 CUNET(I2C)으로 접속하여 표시하는 샘플 프로그램입니다. 본 프로그램을 실행시키면 LCD상에 숫자가 증가되는 상황을 볼 수 있습니다. ​
 +
 +<code xbasic>
 +Const Device = Cb280
 +Set Display 2,0,0,50
 +Dim i As Integer
 +Delay 100              ' 최초 딜레이 (CLCD 모듈이 START UP 하는 시간을 기다려줌)
 +Cls
 +Delay 200              ' CLCD 가 클리어 하는데 걸리는 시간을 기다림
 +Csroff
 +Clcdout 5,2, "​Start!!!"​
 +Delay 500
 +Cls
 +Delay 100
 +Do
 +   Incr i
 +   ​Clcdout 0,0, "​COMFILE"​
 +   ​Clcdout 1,3, "​CUBLOC ",Dec i
 +   delay 100
 +Loop 
 +</​code>​
 +
 +===== 캐릭터정의 사용방법 =====
 +
 +CLCD에는 유저정의 캐릭터를 사용할 수 있습니다. 화살표등과 같은 특수문자를 유저가 임의대로 정의하여 사용하실 수
 +있습니다. 코드8부터 15까지 총 8개의 캐릭터를 정의하여 사용할 수 있습니다.
 +
 +<code xbasic>
 +Const Device = CB320
 +Set Display 2,0,0,80
 +Wait 100
 +Cls
 +Wait 100
 +Print 0x1b,"​D",​8,​0k,​0,​0,​0,​15,​15,​0,​0,​0 ​                          '​8 번 캐릭터를 정의
 +Print 0x1b,"​D",​9,​0,​0x10,​0x18,​0x1c,​0x1c,​0x18,​0x10,​0 ​             '9 번 캐릭터를 정의
 +Locate 0,0                           '​ 정의가 끝나면 반드시 Locate 명령어를 수행해야합니다.
 +Print "​abc"​
 +Print 8,9                            ' 정의한 캐릭터를 표시
 +Do
 +Loop
 +</​code>​
 +
 +정의가 끝난후에는 해당 코드를 보내면, 정의된 캐릭터가 표시됩니다. ​
 +
 +{{ :​clcd:​clcd_definecode.png?​nolink |}}
 +
 +위 그림처럼 5 x 8 캐릭터를 정의하실 수 있습니만,​ 실제로는 5x7 만 사용하실 수 있습니다.
 +8번째 줄은 커서가 위치해야되므로,​ 반드시 비워두시기 바랍니다. ​
 +
 +
 +===== MCU 에서 C 언어를 이용하여 CLCD 사용 =====
 +
 +다른 MCU, 예를들면 PIC, AVR등에서도 CLCLD를 사용하실 수 있습니다.
 +다음은 CCS-C (CCS 사의 PIC전용 C 컴파일러)를 사용해서 구동한 예입니다. (디바이스는 PIC16C711, 클록은 4MHz 사용, RS232전송
 +방법) ​
 +
 +<code c>
 + #​include <​16c711.h>​
 + #use delay(clock=4000000) // 4MHz 사용 시
 + #use rs232(baud = 19200, xmit = PIN_B1, rcv=PIN_B0)
 + #byte TRISB = 0x85
 + #byte PORTB = 5
 + void main()
 + {
 +     char i;
 +     TRISB = 1;
 +     ​delay_ms(200); ​                     // lcd 모듈이 초기화하는 시간을 기다림
 +     ​printf(“%c%c’,​0x1b,​0x43); ​          // cls
 +     ​delay_ms(200); ​                     // lcd모듈이 클리어하는 시간을 기다림
 +     ​while(1) {
 +         ​printf(“%c%c%c%c”,​0x1b,​0x4c,​0,​0); ​    // locate 0,0
 +         ​printf(“COMFILE SERIAL “);
 +         ​printf(“%c%c%c%c”0x1b,​0x4c,​0,​1); ​     // locate 0,1
 +         ​printf(“LCD MODULE %d “,i);
 +         i++;
 +     }
 + ​} ​
 +</​code>​
 +
 +===== 아두이노에서 CLCD 사용 =====
 +
 +다음은 FA-DUINO (산업용 아두이노)에서 CLCD를 사용한 예입니다.
 +
 +<code c>
 +#define STATE_PIN 13 // RS232 포트 확인용입니다.
 +#define _DIR unsigned char // 자료형 재정의.
 + 
 +/* 함수 프로토타입 부분입니다. */
 +void commandSet(char code);
 +void Cls(void);
 +void Csron(void);​
 +void Csroff(void);​
 +void Locate(_DIR x, _DIR y);
 +void Clcdout(_DIR x, _DIR y, String data);
 +/* ************************************** */
 + 
 +void setup() {
 +  pinMode(STATE_PIN,​OUTPUT);​ // 확인용 led 출력방향설정.
 +  digitalWrite(STATE_PIN,​LOW);​ // low로 출력합니다.
 +  Serial1.begin(19200);​ // 통신속도 19200
 +  while(!Serial1);​ // RS232포트가 해당 속도로 열릴때까지 대기합니다.
 +  digitalWrite(STATE_PIN,​HIGH);​ // high 출력을 통해 포트가 열렸음을 알립니다.
 + 
 +  Cls(); // CLCD를 초기화하고,​ CLCD에 출력된 모든 내용을 지웁니다.
 +  Csroff(); // 커서출력을 비활성합니다.
 + 
 +  /* 고정문구를 출력합니다. */
 +  Clcdout(1,​1,"​ComfileTechNology"​);​
 +  Clcdout(1,​2,"​Value : ");
 +  /* ************************ */
 +}
 + 
 +void loop() {
 +  // put your main code here, to run repeatedly:
 +  static unsigned long tmpd = 0x00; // 임시변수입니다.
 + 
 +/* 500ms마다 1씩 증가하는 값을 출력합니다. */
 + 
 +  Clcdout(9,​2,​(String)tmpd++);​
 +  delay(500);
 + 
 + /* ****************************** */
 +  ​
 +}
 + 
 +/* 함수 정의부 */
 +void commandSet(char code)
 +{
 +  Serial1.print((char)0x1b);​
 +  Serial1.print((char)code);​
 +}
 + 
 +void Cls()
 +{
 +  commandSet(0x43);​
 +  delay(15); // 15ms 대기해줍니다.
 +}
 +void Csron()
 +{
 +  commandSet(0x53);​
 +}
 +void Csroff()
 +{
 +  commandSet(0x73);​
 +}
 +void Locate(_DIR x, _DIR y)
 +{
 +  commandSet(0x4c);​
 +  Serial1.print((char)x);​
 +  Serial1.print((char)x);​
 +  Serial1.print((char)y);​
 +  Serial1.print((char)y);​
 +  delayMicroseconds(100);​ // 100uS 대기합니다.
 +}
 +void Clcdout(_DIR x, _DIR y, String data)
 +{
 +  commandSet(0x4b);​
 +  Serial1.print((char)x);​
 +  Serial1.print((char)y);​
 +  Serial1.print((char)x);​
 +  Serial1.print((char)y);​
 + 
 +  Serial1.print(data);​
 +  Serial1.print((char)0x00);​
 +}
 +
 +</​code>​
 +
 +<​html><​center>​
 +<iframe width="​544"​ height="​306"​ src="​https://​serviceapi.nmv.naver.com/​flash/​convertIframeTag.nhn?​vid=923E90F4A66487B7E48822DDB77F0770D51C&​outKey=V123480a9d808a408f8abd96732a009e527a92f0fc7e4ddc6df49d96732a009e527a9"​ frameborder="​no"​ scrolling="​no"​ title="​NaverVideo"​ allow="​autoplay;​ encrypted-media"​ allowfullscreen></​iframe>​
 +</​center></​html>​
 +[[:​index|Comfile Technology'​s Document Library]]