이글의 전부 또는 일부, 사진, 소스프로그램 등은 저작자의 동의 없이는 상업적인 사용을 금지합니다. 또한, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.

 


(본 글은 2016.12.13.에 필자의 다른 티스토리 http://avrlab.tistory.com에 적었던 것을 옮겨왔습니다.)

 

 

 

ATmega32를 arduino로 사용할 수 있도록 만든 다음 뭐 해볼까 하고 생각하다가 피시포카(http://www.pc4car.com) 의 DIY 난에 윤광환회원님이 LCD Smartie를 만드신 것을 보고 나도 만들어 보기로 했습니다.

링크(http://pc4car.com/bbs/skin/sirini_ezset_fullpack/ezset_catch_trackback.php?id=diy&no=3522)

 

인터넷에서 정보를 얻어다 만드는데 정말로 너무 쉬웠습니다. 처음에 AVR 배우면서 LCD에 글자 하나 띄우기 위해 며칠을 삽질 했던 것과 비교하면 이것은 완전 거저입니다.

 

구글에서 LCD Smartie arduino로 검색해 보았습니다. 다음 사이트가 맨 앞에 나왔습니다.

http://waihung.net/lcd-smartie-through-arduino/

 

위 사이트에 있는 회로도입니다.

 


 

그런데 뭔가 이상합니다. 저렇게 해도 되는지 모르겠는데 LCD에 데이터를 3bit만 연결했습니다. 보통 4bit 아니면 8bit를 사용하는데... 4비트를 사용하는 것으로 설계를 바꿨습니다.

 

다음은 ATmega32에 연결한 회로도입니다. 윈도우즈 10 그림판에서 대충 그렸습니다.

 

 


 

 

위 회로도의 핀 연결 상태를 표로 정리해 봤습니다.

 Function

 LCD

ATmega32

 Function

LCD

ATmega32

 VSS(GND)

 1

 X

 DB4

 11

 D20 (PC4)

 Vcc(5V)

 2

 X

 DB5

 12

 D21 (PC5)

 Vo(GND)

 3

 X

 DB6

 13

 D22 (PC6)

 Rs

 4

 D18 (PC2)

 DB7

 14

 D23 (PC7)

 Rw(GND)

 5

 X

 Back +(5V)

 15

 E

 6

 D19 (PC3)

 Back -(GND)

 16

 X

 

대충대충 배선해 놓은 상태입니다.



 

 

배선이 끝나면 스케치를 실행합니다. 스케치의 [파일] 메뉴에서 [새 파일]을 선택합니다.

 


 

완성된 소스 프로그램을 가져올 예정이므로 위에 기본적으로 나타난 코드는 필요 없습니다. 마우스로 드래그하여 모두 지웁니다. 위에서 링크한 사이트(http://waihung.net/lcd-smartie-through-arduino/)의 아래 쪽으로 내려가면 다음 그림과 같이 생긴 버튼이 있습니다. 이 버튼을 클릭하면 소스가 나타납니다. 마우스로 드래그하여 전체 내용을 선택한 다음에 Ctrl+C를 눌러서 복사합니다.

 

 


복사한 코드를 스케치 프로그램에 복사하여 넣습니다. 적당한 폴더에 ArduinoSmrtie 등 적절한 이름으로 저장합니다. 확장자 ino를 붙이지 않아도 스케치가 알아서 붙여 줍니다. 또한 스케치가 기본적으로 파일명과 같은 이름의 폴더를 만들고 그 폴더 안에 저장합니다.

 

원래의 배선과 다르게 배선하였으므로 배선한 상태를 스케치에게 알려 줘야합니다.

 

위 소스의 상단에 다음과 같은 내용이 있습니다.

// these constants won't change. But you can change the size of
// your LCD using them:
const int numRows = 2;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8,9,4,5,6,7);
// RS, RW, Enable, 4,5,6,7 (Refer to the back of your LCD for details)

 

numRows 변수와 numCols 변수에 자신이 가지고 있는 LCD의 행 수를 입력합니다.
위의 예는 16x2의 LCD의 경우입니다. 4행 20자 lcd의 경우에는 다음과 같이 지정해야 합니다.

const int numRows = 4;
const int numCols = 20;


LiquidCrystal lcd(8,9,4,5,6,7);로 되어 있는 부분을 위의 회로도에 맞게 수정하여 주어야 합니다.

RS 핀은 D18 핀, E(nable) 핀은 D19 핀, DB4 핀은 D20 핀, DB5 핀은 D21, DB6 핀은 D22, DB7 핀은 D23 핀에 각각 연결하였으므로 다음과 같이 수정하여 줍니다.

 

LiquidCrystal lcd(18,19,20,21,22,23);

 

마지막으로 위 소스의 맨 마지막 라인에 다음과 같은 명령이 있습니다.

 

  lcd.print(rxbyte); //otherwise a plain char so we print it to lcd

이 소스를 작성할 때의 lcd.print() 함수의 기능이 스케치가 업데이트 되면서 바뀌었다고 합니다. 위 링크의 댓글에 있습니다. 위스의 lcd.print() 함수를 lcd.write() 함수로 바꾸어 줍니다.

  lcd.write(rxbyte); //otherwise a plain char so we print it to lcd

스케치의 [툴] 메뉴에서 ATmega32가 선택되어 있는지, 통신 포트는 맞게 지정되어 있는지 확인합니다.

확인 후에 [스케치] 메뉴에서 [업로드]를 합니다. 편하게 스케치 툴의

버튼을 눌러 업로드를 시킵니다.

 

 

 

성공적으로 업로드 되면 다음과 같이 화면이 나옵니다.



 

 

LCD Smartie 프로그램을 다운 받아서 설정하면 됩니다

 

http://lcdsmartie.sourceforge.net/

 

현재 버전은 5.4.2.92입니다.

 

LCD Smartie를 써 본적이 없어서 헤메었습니다.

하드웨어를 만드는 시간보다 설정 방법을 몰라서 헤멘 시간이 더 길었던 것 같습니다.

프로그램의 Setup으로 들어가서 다음 사진의 빨간 사각형의 내용 처럼 Display Plugin으로 matrix.dll 을 지정하고 ATmega32가 연결된 포트를 지정해 주면 됩니다.

 

 


 

 

동작하는 화면입니다.




 


블로그 이미지

엠쿠스

Microprocessor(STM32, AVR)로 무엇인가를 만들어 보고자 학습 중입니다.

,