안녕하세요. 컴퓨터와 아트메가 통신을 하겠습니다.
사용하는 프로그램은 터미널 아무거나 사용하면 됩니다.
컴퓨터에 있는 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끄기
'아트메가 > 이론' 카테고리의 다른 글
아트메가128 타이머/카운터란? (0) | 2017.08.06 |
---|---|
아트메가128 센서제어하기(ADC제어) 2편 (5) | 2017.07.04 |
아트메가128 usart통신하기(2) 블루투스 (13) | 2017.07.03 |
아트메가128 usart통신하기(1) (1) | 2017.07.03 |
아트메가128 센서제어하기(ADC제어) 1편 (0) | 2017.06.01 |