아트메가/이론

아트메가128 usart통신하기(3) 컴퓨터

원원 2017. 7. 3. 21:06

아트메가128 usart통신하기(1)


안녕하세요. 컴퓨터와 아트메가 통신을 하겠습니다.

사용하는 프로그램은 터미널 아무거나 사용하면 됩니다.


컴퓨터에 있는 RS-232에서 나오는 신호는 +-12V입니다. 그러나 아트메가의 RX,TX의 신호는 0~5V입니다. 중간에서 전압을 변환시켜주는 것이 필요한데 MAX232라는것을 보통 사용합니다. 그러나 제가 사용하는 노트북은 RS-232단자가 없습니다. 그래서 USB-TTL변환케이블을 사용하면됩니다. USB-TTL케이블을 연결하면 컴퓨터는 RS-232로 인식을합니다. 또한 따로 전압을 바꿔줄 필요가 없습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
 
volatile char BUFF[100];
volatile unsigned flag;
 
ISR(USART0_RX_vect)
{
    flag=UDR0;
}
 
void init() 
{
    DDRA=0xff;
    UCSR0A=0x00;
      UCSR0B=0x98;
      UCSR0C=0x06;
      UBRR0H=0;
      UBRR0L=103
    SREG=0x80;
}
void USART0_Transmit( char data )
{
    while(!(UCSR0A&0x20));
    UDR0 = data;
}
 
 
void USART0_str( char *str)
{
    while*str )    
    USART0_Transmit(*str++);
}
 
int main(void)
{
   init();
   int i=0;
    while(1)
    { 
        sprintf(BUFF,"wowon.tistory.com %d \n",i);
 
        if(flag=='G')
        {
            PORTA=0x01;
            USART0_str(BUFF);
            _delay_ms(1000);
            i++;
        }
        if(flag=='Q')
        {
            PORTA=0x00;
        }
    }
}
cs
26번째줄 - (UDRE비트)송신준비가 되있으면1, 준비되지않았으면0입니다. 그러므로 1이면 while문을 빠져나갑니다.
33번째줄 - str포인터가 null이 아닐때까지 반복
34번째줄 - str포인터 다음 것 가리키고 함수로 보내기
43번째줄 - sprintf함수 사용하여 배열만들기


위 코드의 26번째줄을 while문 안쓰려면 아래의 코드로 고치면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void USART0_Transmit( char data )
{
 
    if((UCSR0A&0x20))
    UDR0 = data;
}
 
 
void USART0_str( char *str)
{
    while*str )
    {
        USART0_Transmit(*str++);
        _delay_ms(1);
    }
}
cs


G - 메세지출력 , LED키기
Q - 메세지출력x , LED끄기