도와주세요!!
글 수 15,339
2003.04.17 03:16:52 (*.117.157.181)
6695
이지보드의 Serial2(ttySA2)와 PC와의 통신을 하는 중입니다.
나중에 PC가 아닌 12V로 통신하는 장치를 붙여볼까 생각중입니다.
그래서 74HC14를 TX,RX쪽에 연결해서 MAXIM으로 연결했습니다.
즉, 이지보드--74HC14--MAX232--PC
이런식의 통신을 수행합니다. 인버터를 달았기에, 이지보드에서는
데이터를 반전시켜서 보냈습니다. 그러면 PC쪽에서도 이지보드에서
보낸 데이터를 무사히 받을수 있을것이란 생각때문이었습니다.
그런데 결과는 엉뚱하게 나오는군요.
인버터를 달았을때에는 데이터가 제대로 가지를 않는것인지 궁금하네요.
어떻게 해야할지를 모르겠거든요. ^^ 이거, 인버터 없을때는 잘 되던
거였고요. 스코프로 찍어봐도 잘 나오는 거였습니다. ^^
지금도 인버터랑 MAX232를 통해서 나가는 데이터를 찍어보면 제대로 나가고
있습니다.
소스 보시고 문제점좀 짚어주실수 있으신지요? ^^
아래에 소스 첨부합니다.
결과는 맨 아래에 첨부합니다.
=================================================================
/*****************************************
ez_send.c
이지보드에서 PC로 데이터를 전송
******************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int fd;
struct termios oldtio, newtio;
unsigned char data[4]={0x03,0x31,0x52,0x86};
unsigned char imsi_data[4];
int i,j,res,k;
fd = open("/dev/ttySA2", O_RDWR | O_NOCTTY);
if (fd<0) {
// 화일 열기 실패
printf("Device Open Fail
");
return -1;
}
tcgetattr(fd,&oldtio); // 현재 설정을 oldtio에 저장
memset(&newtio,0,sizeof(newtio));
newtio.c_cflag = B19200 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 10;
newtio.c_cc[VMIN] = 100;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
k=sizeof(data)/sizeof(unsigned char);
printf("k = %d
",k);
for(i=0;i
imsi_data[i]=~data[i];
write(fd,&imsi_data[i],1);
printf("0x%02x ==> 0x%02x
",data[i],imsi_data[i]);
}
/* 시리얼 포트를 원래대로 세팅하고 */
tcsetattr(fd,TCSANOW,&oldtio);
/* 끝낸다. */
close(fd);
return 0;
}
===========================================================
/********************************************
pc.c
이지보드에서 들어오는 데이터를 받는다.
**********************************************/
#include
#include
#include
#include
#define BAUDRATE B19200
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX 호환 소스 */
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
main()
{
int fd, c, res, i;
struct termios oldtio, newtio;
unsigned char buf[255];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
if (fd < 0) { perror(MODEMDEVICE); exit(-1); }
tcgetattr(fd, &oldtio); /* save current serial port settings */
bzero(&newtio, sizeof(newtio)); /* clear struct for new port
settings */
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 10;
newtio.c_cc[VMIN] = 255;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
res = read(fd,buf,255);
buf[res] = 0; /* set end of string, so we can printf */
for(i=0;i
printf("0x%02x ",buf[i]);
printf("%s",buf);
printf("
");
printf("O.K.
");
tcsetattr(fd,TCSANOW,&oldtio);
close(fd);
return 0;
}
====================================================================
결과
ez_send.c
-----------------------------------
[root@ezboard canon]$ ./ez_send
k = 4
0x03 ==> 0xfc
0x31 ==> 0xce
0x52 ==> 0xad
0x86 ==> 0x79
[root@ezboard canon]$
------------------------------------
pc.c
--------------------------------------------
user@merong:/data/work/test/canon$ ./pc
0x00 0xc0 0x8c 0x4a 0x08 0x00 0x00
O.K.
user@merong:/data/work/test/canon$
---------------------------------------------
뭐가 문제일까요?
나중에 PC가 아닌 12V로 통신하는 장치를 붙여볼까 생각중입니다.
그래서 74HC14를 TX,RX쪽에 연결해서 MAXIM으로 연결했습니다.
즉, 이지보드--74HC14--MAX232--PC
이런식의 통신을 수행합니다. 인버터를 달았기에, 이지보드에서는
데이터를 반전시켜서 보냈습니다. 그러면 PC쪽에서도 이지보드에서
보낸 데이터를 무사히 받을수 있을것이란 생각때문이었습니다.
그런데 결과는 엉뚱하게 나오는군요.
인버터를 달았을때에는 데이터가 제대로 가지를 않는것인지 궁금하네요.
어떻게 해야할지를 모르겠거든요. ^^ 이거, 인버터 없을때는 잘 되던
거였고요. 스코프로 찍어봐도 잘 나오는 거였습니다. ^^
지금도 인버터랑 MAX232를 통해서 나가는 데이터를 찍어보면 제대로 나가고
있습니다.
소스 보시고 문제점좀 짚어주실수 있으신지요? ^^
아래에 소스 첨부합니다.
결과는 맨 아래에 첨부합니다.
=================================================================
/*****************************************
ez_send.c
이지보드에서 PC로 데이터를 전송
******************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int fd;
struct termios oldtio, newtio;
unsigned char data[4]={0x03,0x31,0x52,0x86};
unsigned char imsi_data[4];
int i,j,res,k;
fd = open("/dev/ttySA2", O_RDWR | O_NOCTTY);
if (fd<0) {
// 화일 열기 실패
printf("Device Open Fail
");
return -1;
}
tcgetattr(fd,&oldtio); // 현재 설정을 oldtio에 저장
memset(&newtio,0,sizeof(newtio));
newtio.c_cflag = B19200 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 10;
newtio.c_cc[VMIN] = 100;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
k=sizeof(data)/sizeof(unsigned char);
printf("k = %d
",k);
for(i=0;i
write(fd,&imsi_data[i],1);
printf("0x%02x ==> 0x%02x
",data[i],imsi_data[i]);
}
/* 시리얼 포트를 원래대로 세팅하고 */
tcsetattr(fd,TCSANOW,&oldtio);
/* 끝낸다. */
close(fd);
return 0;
}
===========================================================
/********************************************
pc.c
이지보드에서 들어오는 데이터를 받는다.
**********************************************/
#include
#include
#include
#include
#define BAUDRATE B19200
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX 호환 소스 */
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
main()
{
int fd, c, res, i;
struct termios oldtio, newtio;
unsigned char buf[255];
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
if (fd < 0) { perror(MODEMDEVICE); exit(-1); }
tcgetattr(fd, &oldtio); /* save current serial port settings */
bzero(&newtio, sizeof(newtio)); /* clear struct for new port
settings */
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 10;
newtio.c_cc[VMIN] = 255;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
res = read(fd,buf,255);
buf[res] = 0; /* set end of string, so we can printf */
for(i=0;i
printf("%s",buf);
printf("
");
printf("O.K.
");
tcsetattr(fd,TCSANOW,&oldtio);
close(fd);
return 0;
}
====================================================================
결과
ez_send.c
-----------------------------------
[root@ezboard canon]$ ./ez_send
k = 4
0x03 ==> 0xfc
0x31 ==> 0xce
0x52 ==> 0xad
0x86 ==> 0x79
[root@ezboard canon]$
------------------------------------
pc.c
--------------------------------------------
user@merong:/data/work/test/canon$ ./pc
0x00 0xc0 0x8c 0x4a 0x08 0x00 0x00
O.K.
user@merong:/data/work/test/canon$
---------------------------------------------
뭐가 문제일까요?