#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <string.h> void init_Serial0(void)
{
PORTE = PORTE & 0xFC;
UCSR0A = 0x00; //
UCSR0B = 0x00; // Receive enable
UCSR0C = 0x06; // 비동기 방식, No parity, 1stop bit
UBRR0L = 0xCF; // 0x33 = 51 --> 19200bps, 0x10 = 16 --> 57600bps
UBRR0H = 0x00; // 16MHz, 57600 bps ->16(0x10)(UBRR)
UCSR0B = 0x18; // Receive/Transmit enable
} void init_Serial1(void)
{
PORTE = PORTE & 0xFC;
UCSR1A = 0x00; //
UCSR1B = 0x00; // Receive enable
UCSR1C = 0x06; // 비동기 방식, No parity, 1stop bit
UBRR1L = 0xCF; // 0x33 = 51 --> 19200bps, 0x10 = 16 --> 57600bps
UBRR1H = 0x00; // 16MHz, 57600 bps ->16(0x10)(UBRR)
UCSR1B = 0x18; // Receive/Transmit enable
} void putch(char data)
{
while(!(UCSR0A & 0x20));
UDR0 = data;
} /*
unsigned char USART_Receive(void){
while (!(UCSR1A & (1<<RXC)));
return UDR1;
}
*/ int main(void){ unsigned char getData;
unsigned int index = 0; init_Serial0();
init_Serial1();
while(1){
PORTB = 0x00;
DDRB=0x00; while ( !(UCSR0A & (1<<RXC)) ); getData = UDR0; for(index=0;index<8;index++){
if( getData & (1<<index) ){
PORTB = 0x1F;
DDRB=0x1F;
_delay_us(200);
}
else{
PORTB = 0x00;
_delay_us(200);
}
}
}
}
저희가 한것은 tera term이라는 하이퍼터미널 프로그램을 써서 send file버튼을 누르고 파일을 선택하면 UDR0를 통해서 데이터를 1바이트씩 보내게 설계를 했고 아웃풋 포트에 PORTB에 LED를 연결하여 LED가시광 통신을 구현해보려고 합니다. 그에앞서 파일전송을 하면 LED가 깜박이는데 이게 파일을 바이너리로 인식해서 깜박이는건지 확실히 하기 위해 만약 ***.wav 파일이 011010100 이렇게 시작하면COM1의 하이퍼 터미널에 011010100으로 신호가 나오기 시작하는 동시에 com2에서의 하이퍼 터미널(PORTF포트에서 부터 받은 신호가)에 011010100으로 신호가 나오기 시작하면 바이너리 신호로 정확히 전달이 된다고 생각할 수 있을것 같습니다. 위과 같은 내용으로 atmega2에 리시브 소스를 작성하려고 하는데... 기초가 너무 부실해서...ㅠ.ㅠ다음주에 발표라는... 고수님들 도와주세요..
#include <avr/io.h>
#include <util/delay.h>
#include <string.h> void init_Serial0(void)
{
PORTE = PORTE & 0xFC;
UCSR0A = 0x00; //
UCSR0B = 0x00; // Receive enable
UCSR0C = 0x06; // 비동기 방식, No parity, 1stop bit
UBRR0L = 0xCF; // 0x33 = 51 --> 19200bps, 0x10 = 16 --> 57600bps
UBRR0H = 0x00; // 16MHz, 57600 bps ->16(0x10)(UBRR)
UCSR0B = 0x18; // Receive/Transmit enable
} void init_Serial1(void)
{
PORTE = PORTE & 0xFC;
UCSR1A = 0x00; //
UCSR1B = 0x00; // Receive enable
UCSR1C = 0x06; // 비동기 방식, No parity, 1stop bit
UBRR1L = 0xCF; // 0x33 = 51 --> 19200bps, 0x10 = 16 --> 57600bps
UBRR1H = 0x00; // 16MHz, 57600 bps ->16(0x10)(UBRR)
UCSR1B = 0x18; // Receive/Transmit enable
} void putch(char data)
{
while(!(UCSR0A & 0x20));
UDR0 = data;
} /*
unsigned char USART_Receive(void){
while (!(UCSR1A & (1<<RXC)));
return UDR1;
}
*/ int main(void){ unsigned char getData;
unsigned int index = 0; init_Serial0();
init_Serial1();
while(1){
PORTB = 0x00;
DDRB=0x00; while ( !(UCSR0A & (1<<RXC)) ); getData = UDR0; for(index=0;index<8;index++){
if( getData & (1<<index) ){
PORTB = 0x1F;
DDRB=0x1F;
_delay_us(200);
}
else{
PORTB = 0x00;
_delay_us(200);
}
}
}
}
저희가 한것은 tera term이라는 하이퍼터미널 프로그램을 써서 send file버튼을 누르고 파일을 선택하면 UDR0를 통해서 데이터를 1바이트씩 보내게 설계를 했고 아웃풋 포트에 PORTB에 LED를 연결하여 LED가시광 통신을 구현해보려고 합니다. 그에앞서 파일전송을 하면 LED가 깜박이는데 이게 파일을 바이너리로 인식해서 깜박이는건지 확실히 하기 위해 만약 ***.wav 파일이 011010100 이렇게 시작하면COM1의 하이퍼 터미널에 011010100으로 신호가 나오기 시작하는 동시에 com2에서의 하이퍼 터미널(PORTF포트에서 부터 받은 신호가)에 011010100으로 신호가 나오기 시작하면 바이너리 신호로 정확히 전달이 된다고 생각할 수 있을것 같습니다. 위과 같은 내용으로 atmega2에 리시브 소스를 작성하려고 하는데... 기초가 너무 부실해서...ㅠ.ㅠ다음주에 발표라는... 고수님들 도와주세요..
프로그램은 프로토콜을 만드세요.프로토콜을 이용하면 각종 콘트롤이 쉬어집니다.계획, 검토, 실현방법을 미리 연구하고 구성하면 좋겠네요.