블로그 이미지
송시혁

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 5. 28. 23:29 임베디드/Arm2567SAM



LCD_Cmd_WRITE함수는 명령을 내리는 함수. 최초의 init함수에서 셋팅이 끝나면, 사용자가 LCD에 명령을 보내야 하는데

 그 역할을 이 LCD_Cmd_WRITE함수가 역할한다. 일단, 먼저 Timing Diagram을 참조해야한다.


1.(빨간색): 

RS=명령을 입력받을때는 LOW값이다. 그래서 PIO_CODR=LCD_RS;

RW = LOW일때, WRITE이므로 PIO_CODR=LCD_RW;

EN= 타이밍도를 보면 LOW인 상태.

DELAY는 타이밍도 전체 지연시간이다.

 

2.(주황색) RS가 명령을 받아 low가 되고  RW는 write에 해당하는 low값을로 변하여 아래로 내려가게 된다. 

하지만, low가 되기전에 delay를 시켜야한는데 얼마만큼 delay하느냐는 타이밍도를 참조해서 구해야 한다.

주황색으로 된 네모를 보면, RS, RW가 내려왔을때 지연되는 시간은 Tas- ter를 하면, 대략 구할 수 있다. 

15ns가 나오는데 전체 delay-delay1(15ns)를 하면 된다. 그 후에는 EN이 high로 되는 것을 볼 수 있다.

 그래서 활성화 레지스터인 PIO_SODR=LCD_EN; 이 된다.


3.  EN이 high로 되는데 시간이 또 걸린다. 그래서 다시 for문으로 다시 지연시킨다. 시간계산을 위해서는 타이밍도를 

보고 만들 수 밖에 없다.  EN이 활성화 된뒤에 DB(데이터 버스)에서 값이 변화하기까지 지연시킨다.

전체 delay에서 ter의 값을 빼면 된다.

PIO_CODR = LCD_BS;BS를 16번자리에만, 0V로 만든다.

PIO_SODR = ucdata<<16; DB가 데이터를 받아 16번자리에 넣는다.


4. 값이 오랫동안 유지되는 구간이다. 그러다가 EN이 내려가는것이 보인다.

    EN이 바로 내려가기 직전까지 전체 delay에서 빼준다.

     LCD_delay - LCD_delay3;

LCD_delay3= pweh-tdsw;


5. EN은 이미 low가 된상태, 다른값들은 유지되는 구간이다. 이 전체delay에서

    빼준다.

    LCD_delay - LCD_delay4;

    LCD_delay4= tef+th










LCD_DATA_WRITE부분은 데이터를 입력받는 부분이기 때문에 RS를 HIGH값으로 바꿔주면 된다.

PIO_SODR= LCD_RS;가 된다.

나머지는 위의 CMD_WRITE와 동일하다.




'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 LED정리  (0) 2013.05.31
4월 17일 LCD문자입력함수 만들기  (0) 2013.05.30
5월 27일 LCD에 한글이름 찍기  (0) 2013.05.27
5월 23일 ULTRA 2.  (0) 2013.05.24
5월 23일 ultra1(진행중)  (0) 2013.05.23
posted by 송시혁