'USART'에 해당되는 글 3건

  1. 2011.08.03 시리얼통신을 이용한 CLCD문자전송 (4)
  2. 2011.08.02 적외선통신을 이용한 문자찍기!! (12)
  3. 2011.05.22 블루투스(FB155BC) LED 제어 (18)
안녕하세요 숭덕이 박제현 입니다. 오늘은 시리얼통신으로 LCD에 문자를 찍어볼텐데요 !!

일단 시리얼 통신을 하려면 FTDI 나 Silabs 사의 칩을 이용하여 하는데 저는 CP2102를 사용해서 하겠습니다.
CP2102같은 경우는 WIN7 일 경우 자동으로 드라이브를 찾아 설치해주니까 너무 좋은거 같네요 FTDI사의 칩도 그렇다는..
하지만 제가 사용하기에는 간단하게 편해서 씁니다!!


자 다음은 AVR 칩이 있어야 겠네요!!!!
RX,TX는 서로 크로스로 연결하셔야 합니다.


 


자 다음은 LCD 음 이제 준비물은 다 끝난거 같네요!!!
이렇게 3가지만 가지고 충분히 작품을 하나 만들겠군요!!!!1!!!

 



 

                     

#include <mega128.h>


#include <delay.h>


#asm


.equ __lcd_port=0x1B ;PORTA


#endasm


#include <lcd.h>


 


char rx[50]={0}, rx_cnt=0;         




interrupt[USART0_RXC]void usart0_rxc(void){


  rx[rx_cnt]=UDR0;


  if(++rx_cnt>=16)rx_cnt=0;


}  


void main(void){                              


    UBRR0H=0; UBRR0L=103; UCSR0B=0x98;


    lcd_init(16);


    #asm("sei")


    while(1){


        delay_ms(1000);


        lcd_gotoxy(0,0); lcd_puts(rx);


    }


} 
                                                                                                                                                          


       

 

Posted by 숭덕이
안녕하세요 숭덕이 박제현입니다. 오랜만에 이렇게 글을 쓰는거 같네요 !!!
음 일요일날은 IR센서를 이용한 통신을 할 건데요 !! 간략하게 설명만 하고 일요일날 자료를 올리겠습니다.
많은 자료조사와 테스트는 해보지 않았으나 리모콘 수신용이면 발광부에 케리어만 실어주게 되면 데이터전송이 가능할거
같아 이렇게 구매를 해서 테스트 해볼 예정입니다. 빨리 테스트 해보고 싶지만 졸리네요 !!!!!!!



수광부(603LM)


발광부(CL-1L5)




                   출처 : http://www.devicemart.co.kr/mart7/mall.php?cat=049001000&query=view&no=6900


                                                                    603LM
                출처 : http://www.devicemart.co.kr/mart7/mall.php?cat=049001000&query=view&no=6899

                                                                  
                                                                        CL-1L5R

ADC 계산
16Mhz / 128 분주 = 125kHz
1 / 125000 = 0.000008 = 8us

채널0 을 가정해서 A/D한다면 최초에 25클럭이 소요되고 그 이후 13클럭이 되므로
( 25 + 13 ) * 8 = 304us

UART 계산

1/9600bps = 1.041666667

start(1bit) + data(8bit) + stop(1bit) = 총 10bit
1.041666667 * 10bit = 0.001041666667

2byte 전송시
0.001041666667 * 2 = 0.0020833333...

답은 : 2.0833333333ms


-----------------------------------------------------------------------------------------------------
자 저는 리모콘형식의 수광부와 발광부를 구매했고 38khz의 주파수로 테스트를 해보겠습니다.

38khz일떄 펄스 1개는 약 26us 나옵니다.

16Mhz / (1+410) = 0.0000256878 = 26us

1 / 0.0000256878 = 38khz 입니다. 계산은 다 나온거 같네요!!!

저도 처음으로 적외선통신을 해보는것이라 방식이 어려운거 같기도 하네요

일단 집에 가서 납땜 후 테스트까지는 몰라도 한번 해보겠습니다.

발광부에 트랜지스터를 사용해야하는데 그렇게 안하고 거리가 가까운곳에서 테스트 예정이기 떄문에

트랜지스터 없이 그냥 직렬로 연결해서 테스트하겠습니다.

일단 CP2102로 USB to Serial로 적외선통신값을 컴퓨터 하이퍼터미널에 찍기 위한 회로도 입니다.




 자 LED는 적외선통신시 CP2102를 통해 키보드로 1번을 눌렀을 시 적외선센서로 통신을 통해 반대편에 있는 LED로 수신을
 표시하기 위한 장치로 회로를 구성하였습니다.


아래 그림은 PB5포트에서 38khz PWM파형이 나오며, TX단자에서 데이터를 싫어주고 발광부로
내보내게 된다.


PB5와 TX단자를 NOR 했습니다. 둘 다 LOW 일때 HIGH가 출력이 되므로 LED에 PW ON이 됩니다.
RS-232 TX 파형은 아래 그림과 같이 LOW일때 데이터출력이 됩니다.




아래 그림은 위에 그림과 같은 건데 PB5와 TX단자를 NOR 했을 2포트의 입력이 LOW일때, 출력은 HIGH가 출력이 됨으로써
LED PW ON 이 됩니다.



수광부 603LM은 38khz의 Frequency를 가지고 있으며, Supply Voltage는 5.5V 이다.
이 단자는 RX에 물려서 TX에 나온 데이터 38khz를 갖는 데이터를 받아 처리한다.




2011년 8월 5일 새벽 12:26분 오늘은 흠냥 부품이 많이 없던 탓인지 휴 잘안되네!!! TX보내기 귀찮아서 while문안에
TX통신함수를 사용하여 1 ~ 4까지 반복문을 돌리고 수광부에서 1,2,3,4를 체크해서 LED 불키는것을 하는데 흠냥..
수광부 이놈의 시키가 왜 반응을 안하지 ㅡㅡ;;; 내일은 필히 2개의 과제를 끝내고 ARM과제를 하겟엉 기다려라...


Apple | iPhone 3GS | Normal program | Average | 1/10sec | F/2.8 | 3.9mm | ISO-800 | No flash function

 




 



603LM은 37.9khz의 주파수만 감지하는것이 아닙니다. 다른 주파수도 감지하지만 37.9khz에 대해서 감도가 제일 크다는것을 의미합니다. 적외선센서를 사용하면 발광부에서 수광부로 데이터를 전송하는데 대기중의 노이즈가 섞여 수신이 될 수도 있습니다. 이러한것을 조금이나마 줄이기 위해 발광부에 특정 주파수를 보내게 됩니다. 이러한 과정을 인코딩이라고 하며 또한 펄스파를 캐리어라고 부른다고 합니다. 저는 37.9khz를 사용했기때문에 1초에 37900번의 일정한 펄스파를 발광부에서 쏘게 됩니다. 
이 센서는 Band Pass Filter로 설계된 센서로 캐리어주파수는 증폭을 하고 그 외에 주파수는 증폭률이 캐리어주파수보다 작게 설정되어 있어 노이즈를 필터링에 용이 합니다.


 


 

 드디어 다했군요!!!! 일찍 퇴근 후에 바람 좀 쐬고 여유롭게 놀다가 10분만에 뚝!!!!!!!쿄쿄쿄 LED 한개가 DIE ^^
CP2102칩을 안가져와서 그냥 TX에 임의에 값을 넣어주고 쏴주었습니다. 지갑으로 가렸을때 LED가 멈추는것을 볼 수있습니다. LED가 멈추면 발광부에 캐리어를 싫어서 보내도 수신부에서 받지를 못하면 쓰레기값이 됩니다. 지갑을 치우는 순간 1초에 LED가 한칸씩 움직입니다.
                  

#include 
#include  

char rx; interrupt [USART0_RXC] void usart0_rx_isr(void)
{    
	rx=UDR0;     
	if(rx=='2')PORTB=2;    
	if(rx=='3')PORTB=4;    
	if(rx=='4')PORTB=8; 
} 

void TX0_CHAR(char Sdata){ while(!(UCSR0A&0x20)); UDR0=Sdata; } 

void main(void)
{    
	UCSR0A=0; UCSR0B=0x98; UCSR0C=6; UBRR0H=416/256; UBRR0L=416&0xFF;  //2400     
	DDRB=0xff; OCR1A=210;    
	TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80;     
	#asm("sei")    
	
	while(1)
		{       
		TX0_CHAR('2');     delay_ms(1000);   
		TX0_CHAR('3');      delay_ms(1000);  
		TX0_CHAR('4');     delay_ms(1000);           
		}
}   
  
                                                  

Posted by 숭덕이
AVR 8BIT/통신(USART)2011.05.22 04:07

안녕하세요 숭덕이 박제현입니다.

오늘 많이 삽질을 했습니다..

저녁에 와서 요즘 스트레스로 어깨가 많이 결려서 하루종일 침대에 누워있다가 이렇게 하면 안되겠다 싶어

주말에 올리기로 한 블루투스(FB155BC) 글을 올립니다.

현재 새벽 4:03분이네요 

컴파일은 코드비젼이고요 크리스탈은 14.7456 입니다. 이것때문에 많은 고생을 했다는...........

STM32만 매일 하다가 오랜만에 AVR 잡으니까 힘드네요 AVR은 무조건 16Mhz 인줄알았습니다. ^^

그래서 UBRR을 103으로 보레이트 9,600으로 했는데 아무리 해도 안되길래 이걸로 1시간 동안 고민했다는.....^^

소스는 쉽다보니...책에서 레지스터값만 찾아서 공부하시면 쉬울듯 합니다..


 

 SOURCE



#include <mega128.h>
#include <delay.h>

char rx;

interrupt[USART0_RXC]void usart0_rxc(void){
rx=UDR0;

레지스터에 데이터를 쓰면 송신 데이터버퍼 TXBn에 값이 써지고, UDRn 레지스터를 읽으면 데이터 버퍼 RXBn에
들어있는 내용이 읽어진다.

if(rx=='1')PORTC=1,delay_ms(300);
if(rx=='2')PORTC=2,delay_ms(300);
if(rx=='3')PORTC=4,delay_ms(300);
if(rx=='4')PORTC=8,delay_ms(300);
if(rx=='5')PORTC=16,delay_ms(300);
if(rx=='6')PORTC=32,delay_ms(300);
if(rx=='7')PORTC=64,delay_ms(300);
if(rx=='8')PORTC=128,delay_ms(300);

}

void main(void)
{

DDRC=0xff;
UCSR0B=0x98; //RXEN , TXEN Enable
UCSR0C=0x06; //8bit mode
UBRR0H=0;
UBRR0L=95;

 

UBRRL = (F_CPU/(UART_BAUD_RATE*16L)-1; // 보레이트 계산식입니다.

보레이트때문에 고생을 많이 했네요 14.7456Mhz로 계산결과 97이 나왔는데 데이터시트에는
95로 적혀있길래 95로 사용하였고요 또한 에러율은 0% 마음에 드네요 속도면서 크게 문제가
되지는 않을거 같습니다.

#asm("sei")

}


 

결과물



'AVR 8BIT > 통신(USART)' 카테고리의 다른 글

블루투스(FB155BC)를 이용한 CDS센서 값 USART 찍기  (0) 2011.05.24
블루투스(FB155BC) LED 제어  (18) 2011.05.22
ATMEGA USART 이론  (0) 2011.05.20
Posted by 숭덕이