mpc860과 pic를 통해 원거리 원격으로 모터제어를 실시함(자동과수동모드로제어)
본 자료는 8페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
해당 자료는 8페이지 까지만 미리보기를 제공합니다.
8페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

mpc860과 pic를 통해 원거리 원격으로 모터제어를 실시함(자동과수동모드로제어)에 대한 보고서 자료입니다.

목차

1. nfs서버 설정방식의 시스템의 전반적인 주의점

2. ramdisk 방식의 서버 시스템

3. ramdisk 방식의 서버 설정

4. 서버의 전체적인 동작 시스템

5. 서버의 프로그램 설계
(1) PIC의 모터제어 프로그램
(2) mpc860으로 빛의 밝기를 파악하여 PIC에 값을 뿌려주는 프로그램

6. 소켓 프로그램

7. 서버와 클라이언트의 소켓 통신 시스템
(1) 클라이언트의 서버접속 소켓 통신 프로그램
(2) 서버의 최종적인 프로그램 (자동, 수동 모드의 socket통신)

본문내용

설: LCD control 0x10000001
LCD_dat = (unsigned char *)(mem_addr32_2);
// 해설: LCD data 0x30000000
adc = (unsigned short *)(mem_addr32_3 + 0x08);
// 해설: ADC 0x40000008 (2byte)
LCD_word(CTRL,0x38); /* Function Set */
LCD_word(CTRL,0x0C); /* Display On/Off Control */
LCD_word(CTRL,0x01); /* Display Clear */
LCD_word(CTRL,0x06); /* Entry Mode Set */
LCD_word(CTRL,0x02); /* Return Home */
// 해설: LCD 셋팅
LCD_word(CTRL, 0x80);
// 해설: LCD의 커서위치의 초기주소를 0x80으로 한다.
printLCD("\n # A/D CONVERTER #\n");
// 해설: 문자열 # A/D CONVERTER # 을 LCD에 출력함
fl = open("file.in",O_WRONLY | O_CREAT, 0644 | O_TRUNC);
// 해설: 쓰기모드로 file open한다. 없으면 생성
write(fl," ",4);
// 해설: 빈 공백(스페이스) 4개의 데이터를 fl에 쓴다.
close(fl);
if ((pid = fork()) > 0) {
// 해설: 부모프로세스 (소켓통신에서 보내는 역할을 한다.)
while(1){
fl = open("file.in",O_RDONLY | O_CREAT, 0644 );
// 해설: 읽기모드로 file open한다. 없으면 생성
read(fl, read_buffer, 4);
// 해설: fl에서 4개의 데이터를 받아와 read_buffer에 값을 대입
close(fl);
for(i = 0; i < 256; i++){
data = ( *adc & 0xfff );
avr_data = avr(data);
}
// 해설: adc에서 얻은 voltage(data)값을 avr함수에 0~255까지 더해서 256으로 나누어 평 균값을 취함.
avr_data = i_to_lux(avr_data);
// 해설: i_to_lux함수에 voltage(avr_data)값을 대입하여 lux값을 반환함
if (strncmp(read_buffer, "mode", 4) != 0){
// 해설: read_buffer가 mode(사용자모드)가 아닌경우에 무조건 동작하게끔 함
if((avr_data >= 0) && (avr_data < 300)) send='l';
else if((avr_data >= 300) && (avr_data < 700)) send='s';
else if((avr_data >= 700) && (avr_data <= 1000)) send='r';
// 해설: lux값이 0~299까지는 왼쪽회전, lux값이 300~699까지는 중지, lux값이 700~1000까지는 오른쪽회전
if(sendE != send){
// 해설: 첫번째루프값과 (초기값 포함) 받은 값과 달라졌을때 즉, 일정수준의 lux값이 변경 되어 회전명령어를 보내줄수 있도록 함
putchar(send);
// 해설: lux값에 따라 회전명령어 'l','s','r'을 보내줌
putchar('\n');
// 해설: 엔터값을 같이 보내줌
}
sendE = send;
// 해설: 첫번째 받은 루프값을 sendE변수에 대입하여 다음루프에 위의 if문 실행에서 사용
} // 해설: 여기까지가 자동모드 실행부분
itoa(avr_data , buf);
LCD_word(CTRL , 0xd4);
printLCD(buf);
buf[4]='\n';
buf[5]='\0';
// 해설: 얻은 buf값을 pc로 보내주기 위해서 (soket에 싣기 위해서) 4번째는 엔터값 5번째 는 null값을 대입
write(s, buf, 6);
// 해설: 소켓에 6자리의 buf값을 실어서 보낸다.(쓴다)
}
}
else if (pid == 0){
while(1){
size=read(s, read_buffer, BUF_LEN);
// 해설: s(소켓)에서 BUF_LEN길이만큼의 문자열을 읽어와서 read_buffer에 대입하고, 그 길이를 변수 size에 반환한다.
if(size != 0) {
// 해설: size가 0이 아니라면, 즉, read_buffer값에 어떤값이 대입되었다면
fl=open("file.in",O_WRONLY | O_CREAT, 0644 | O_TRUNC);
// 해설: 쓰기모드로 file open한다. 없으면 생성
write(fl, read_buffer,BUF_LEN);
// 해설: read_buffer값의 4개의 데이터를 fl에 쓴다.
close(fl);
if (strncmp(read_buffer, "auto", 4) == 0){ type = 0; }
// 해설: read_buffer값이 auto이면 type 값을 0으로 하여 클라이언트에서 보내온 값을 시 리얼포트에 전달하지 않게함.
else if (strncmp(read_buffer, "mode", 4) == 0){ type = 1; }
// 해설: read_buffer값이 mode이면 type 값을 1로 하여 클라이언트에서 보내온 값을 시리 얼포트에 전달하게함.
else if (strncmp(read_buffer, "exit", 4) == 0){
kill(pid, SIGQUIT);
break;
}
// 해설: read_buffer값이 exit이면 실행하고 있는 프로세스를 죽이고 프로그램을 종료시킴
if (type == 1){ printf(" %s ", read_buffer)}
// 해설: type 값이 1이리면 클라이언트에서 보내온 값(read_buffer)을 그대로 시리얼포트에 전송함
}
}
}
unmapping(mem_addr32_1);
unmapping(mem_addr32_2);
unmapping(mem_addr32_3);
close(s);
return 0;
}
  • 가격3,000
  • 페이지수23페이지
  • 등록일2005.07.20
  • 저작시기2005.07
  • 파일형식한글(hwp)
  • 자료번호#307854
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니