7. ATmega162 시리얼 통신
[뇌를 자극하는 하드웨어 - ATmega162 시리얼 통신, IAR]
내가 고대하던 시리얼 통신 챕터다!!! ( 시리얼 통신만 된다면 기기끼리 통신이 되니 +.+)
컴퓨터에 프린터 포트가 없는 관계로 1차 좌절과 시리얼 포트가 없어서 2차 좌절.....
그러나 그에 굴하지 않고 결국 해냈습니다.
1. 목표
- 시리얼 통신을 통한 문자 출력
- 시리얼 통신으로 문자를 입력 받아서 처리후에 출력
2. 준비물
- MAX232 IC 칩
-USB 시리얼 케이블
3. 회로도
-CON10에서 1번은 PD0에 2번은 PD2에 연결.
4. 구현도
-역시 지저분 합니다. (-.-)
5. ATmega 시리얼 소스 ( 입/출력)
#include<iom162.h> #include<ina90.h> void Putch(char data) { while(!(UCSR0A & 0x20)); UDR0=data; } char Getch() { while(!(UCSR0A & 0x80)); return UDR0; } void main(void) { char string[]="Hello\r\n"; char *pStr; UCSR0A=0x00; UCSR0B=0x18; UBRR0L=103; UBRR0H=0; pStr=string; while(*pStr) { Putch(*pStr++); } while(1) { Putch(Getch()+1); } }
-인터럽트 방식이 아닌 폴링방식
-UCSR0A=0x00 : 통신속도 2배 설정 해제, 멀티프로세서 통신 모드 해제
-UCSR0B=0x18 : 송신 및 수신 기능 활성화
-UBRR0L=103,UBRR0H=0 : 통신 속도 9600설정
-UCSR0A & 0x20 : 송신 데이터 레지스터(UDRE) 준비 완료 표시 비트가 1인지 확인
-UCSR0A & 0x80 : 수신 완료 표시 비트(RXC)가 1인 지확인 ( 데이터가 수신이 됐는지 확인)
-return UDR0 : 현재 수신한 값을 리턴한다.
6. 결과
7. 피드백
-MAX232의 회로도에 있는 1uF짜리 콘덴서를 전해콘덴서로 샀다가 피봤습니다. 세라믹 콘덴서를 사야 한다고 해서
매장을 뒤저봐도 안나오더라구요... 이리저리 인터넷 뒤져본 결과 모노콘덴서도 가능하다는 이야기를 듣고 1uF짜리 모노컨덴서(105)
를 구매해서 회로도를 완성하였습니다.(역시 초보티가... 아직도 콘덴서의 기능을 정확하게 모르겠음.. 누가 아시는분좀.)
-책에서 나오는 시리얼 통신 케이블을 만들다가 머리 빠지는줄 알았다... 그냥 통신 케이블에 들어가기전에 Tx와 Rx를 꼬아서
처리해버렸다 ㅋ
-컴퓨터에 USB 포트가 없으신 분은 USB to Serial 변환기를 구매하셔셔 사용하시면 편리합니다.