답변은 되도록 빨리 달려고 노력하고 있어요..
고맙습니다^^
acezoro님도 복 많이 받으시길 바라겠습니다..
강연욱
2010/05/17 22:40
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.6 Evaluation
Automatic Program Generator
?Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project :
Version :
Date : 2010-05-13
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega128
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 1024
*****************************************************/
ATmega128은 사용안해봐서 모르겠습니다.
인터럽트가 언제 걸리나요?
1byte 데이터가 수신될 때마다 인터럽트가 걸리는 것인가요?
만약 그렇다면 남겨주신 코드는 문제가 있을 거 같습니다.
인터럽트 내부에서 for 루프로 버퍼에 받는 중에 또 다시 인터럽트가 걸리면 원하는 대로 동작하지 않을 거 같습니다. 인터럽트 중 인터럽트가 수신되지 않는지는 모르겠네요.
ATmega128의 인터럽트에 대해서 몰라서 정확히 답변 드릴 수가 없네요.
2가지 정도 테스트 해보세요.
1. getch1() 함수 수정
현재 아래와 같은데요
/* 1Byte Receive*/
unsigned char getch1(void){
unsigned char data;
data = UDR0;
return data;
}
시리얼 통신에서는 10바이트를 1바이트씩 나누어서 보내거나, 한 번에 전체를 보내거나 받는 쪽에서는 크게 신경쓰지 않아도 됩니다.
어차피 수신된 데이터는 버퍼에 쌓이게 되고, 프로그램에서는 그 버퍼에 쌓인 데이터를 읽어서 처리하게 되니까요..
AVR은 사용 안해봐서 잘 모르겠습니다만...
아래 코드는 별 문제 없는 거 같습니다..
다만 while()에서 LED를 제어하고 있는 중 시리얼로 데이터가 수신되면 LED가 제어되는데 이것을 구분하기가 어려울 거 같습니다.
패킷의 start, checksum, end 정도는 검사하는 것이 좋겠죠.
실제 사용해보니 데이터가 깨어져서 전송되는 경우가 많더군요..
그리고, 참고로 LED제어하기 위해서 command, value 중 아무꺼나 사용해도 됩니다.
강연욱
2010/05/13 17:07
제가 짠 짧은 소스입니다. ㅠ
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.6 Evaluation
Automatic Program Generator
?Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project :
Version :
Date : 2010-05-13
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega128
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 1024
*****************************************************/
먼저 모듈을 tx 모드인지 rx 모드인지는 설정 하셨죠?
제가 만든 프로그램에서 id와 sub-id는 모두 수신할 모듈의 id입니다.
보통 sub-id는 사용 안해도 됩니다. 자세한 사항은 메뉴얼을 참고하시기 바랍니다.
rx 모듈 2개의 id를 동일하게 설정하면 tx 모듈에서 해당 id로 명령을 전송하면 2개의 rx 모듈이 동시에 명령을 수신합니다.