티스토리 뷰

위에 보이는 그림은 ATMEL에서 만든 ATAVRSBIN1이라는 센서 모듈이다.  그림에 표시되어 있는것처럼 AK8975라는 Compass와 BMA150이라는 Accelerometer와 ITG3200이라는 Gyroscope를 포함하는 세개의 센서가 실장되어 있다.

각각의 센서들은 모두 동일한 TWI버스에 연결되어 있기 때문에 MCU는 하나의 TWI를 이용하여 각각의 센서들과 통신할 수 있다.


일반적으로 임베디드 시스템은 다른 시스템과 연동없이 자체적으로 동작되는 경우도 있지만, 컴퓨터를 비롯해서 다른 임베디드 시스템과 연동하여 동작되는 경우도 많다.  특히, 최근들어 IoT라는 개념으로 인하여 다른 시스템과의 상호 연동되는 경우가 점점 더 기본 기능처럼 되어 가고 있는 추세다.


다른 시스템과 데이터를 주고 받기 위해서는 와이파이나 블루투스등 여러가지 방법들이 있겠지만 8비트 AVR의 경우에는 UART를 통해서 데이터 송수신을 하는 것이 비교적 쉬운 방법일 것이다.

그러나 UART를 이용하여 통신을 할 때 몇가지 고려해야할 내용들이 있다.


먼저, AVR이 컴퓨터와 UART로 연결되었다고 가정해 보자.  그럼, 컴퓨터에서는 일반적인 UART터미널 프로그램을 이용해서 데이터를 표시해 줄것이다.  그렇다는 얘기는 AVR에서는 모든 데이터를 문자로 바꾸어서 보내주어야 한다는 것을 의미한다.

예를 들어, AK8975에서 읽은 compass 데이터가 다음과 같다고 한다면,

48 09 01 4B 00 A1 FF 23 00 00

이 데이터를 그대로 컴퓨터로 보낼수는 없을 것이다.  일단 AVR에서 데이터를 가공하여 UART 터미널이 화면에 표시해 줄 수 있는 문자로 보내주어야 한다.

예를들면, 다음과 같은 모양으로 컴퓨터로 송신할 것이다.

x=004B(75), y=FFA1(-95), z=0023(35)

만약 컴퓨터에서 일반적인 UART 터미널을 사용하지 않고 ATAVRSBIN1을 위한 전용 프로그램을 만든다고 가정하면 위의 데이터를 분석하여 실제 데이터 값을 뽑아내는 기능이 있어야 한다.  그럴바엔 차라리 AVR에서 센서로부터 읽어 들인 데이터를 가공하지 말고 원래의 값을 컴퓨터로 전송해주는것이 더 좋은 방법이 될 것이다.


또 다른 고려할 사항은 다른 임베디드 시스템과의 통신을 수행할때의 경우이다.

예를 들어 ATAVRSBIN1 센서를 드론에 부착하여 현재의 드론 상태를 드론 조정기로 보내는 시스템을 상상해 보자.  센서로부터 읽은 데이터를 RF모듈로 전송하여 조정기의 RF모듈로 수신하는 시스템이다.  센서 데이터를 송신하는 쪽에서는 수집된 데이터를 가능한 자주 드론 조정기를 향해서 내 보낼 것이다.  드론 조정기에서는 수신된 데이터를 분석하여 드론의 상태를 파악할 수 있게 된다.


그러나, 이런 시스템을 실제로 구현해 보면 생각했던것처럼 제대로 동작하지 않게 되는 경우가 많다.  제일 먼저 부딪히는 문제는 수신된 데이터중에서 첫번째 위치하는 데이터가 어떤 것인지 알아야 제대로 데이터 내용을 복구할 수 있는데, 문제는 수신된 데이터가 몇번째 데이터인지 알아낼수 있는 방법이 없다는 것이다. UART의 경우 데이터의 시작과 끝을 알려 줄 수 있는 방법이 없기 때문이다.  데이터의 시작 위치가 한번 어긋나기 시작하면 그 뒤에 들어오는 모든 데이터에 대한 처리가 불가능하게 된다.  


그리고 또다른 문제는 수신된 데이터가 오류 없이 제대로 된 값이 들어 왔는지 알수가 없다는 것이다.  통신의 가장 기본 전제조건이 오류없는 데이터의 교환이기 때문에 수신한 데이터에 오류가 없다는 것이 반드시 보장 되어야 한다.


이러한 몇가지 문제를 해결하기 위하여 데이터의 시작과 끝을 알 수 있는 플래그를 설정하는 방법과 수신된 데이터의 오류가 있는지 없는지 확인할 수 있는 CRC 값을 추가하는 방법에 대해서 알아 보도록 하겠다.


이를 통해서 직렬 통신을 수행하되 오류 없는 패킷 통신을 구현해 보는 것이다.


심화 과정 목차

'심화' 카테고리의 다른 글

패킷 통신 - PC 프로그램  (0) 2016.08.03
패킷 통신 - 회로 구성  (0) 2016.07.30
포인터(Pointer) - 개념  (0) 2016.07.02
random 함수  (4) 2016.06.12
EABI(Embedded Application Binary Interface)  (0) 2016.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함