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 변환기를 구매하셔셔 사용하시면 편리합니다.


And