라즈베리파이3에 라즈비안을 설치할 때 locale관련 설정을 모두 초기로 했을 시,


처음 실행한 다음


sudo apt-get update

sudo apt-get upgrade


한글 폰트를 설치

sudo apt-get install fonts-unfonts-core


한글 입력기를 설치

sudo apt-get install fcitx-hangul


reboot


재부팅한 다음,


- [시작] - [Setting] - [Input Method] 에서 키보드 입력기를 fcitx로 설정해줍니다.


- [시작] - [Setting] - [Raspberry Pi Configuration] - [Localisation] 에 들어가


1. Locale: ko(Korean), Character Set: UTF-8로 설정하고


2. Set Timezone을 서울 시간으로.


3. Set Keyboard를 Model: Generic 105-key (intl) PC, Layout Korean, Variant Korean


설정하면 됩니다.


Ok를 누르면 재부팅되고 설정이 적용됩니다.



fcitx입력기의 기본 한/영 입력 전환키는 [Ctrl] + [Space] 입니다.

실행 화면





clc

clear

delete(instrfindall)


% 시리얼 통신 포트 및 통신 방식 설정

s2 = serial('COM33', 'BaudRate', 115200, 'DataBits', 8, 'StopBits', 1, 'Parity', 'non');

fopen(s2);

time = 0;


% 그래프 x축 최대 크기

x_limit = 1000;


for a = 1:x_limit

   time = time+1;


   % 시리얼 통신으로 전송받은 string 데이터 저장

   accel = (fscanf(s2));

   

   % string형으로 받아온 데이터를 tokenizer(공백이나 쉼표 등)로 분리하여 data행렬에 저장 

   [data, tf] = str2num(accel);


   xlim([0,x_limit]);

   if a>2

       plot(time, data(1), 'r.');

       hold on;

       plot(time, data(2), 'g.');

       hold on;

       plot(time, data(3), 'b.');

       hold on;

       

       drawnow;

    fprintf('%d: \t%d\t%d\t%d\r\n', a, data(1), data(2), data(3));

   end

end

a = 0;

clf;


fclose(s2);

delete(instrfindall)

I2C통신은 아주 흔하게 사용하는 통신 방법중에 하나로서, 주로 하나 이상의 센서들을 제어하거나 값을 받아올 때 사용합니다.


센서용으로 I2C통신이 흔하게 이용되는 이유는 한 간편한 방식으로 통신라인에 최대 7-bit 주소를 이용할 수 있기 때문인데,


이는 곧 이론상으로 한 통신라인 상에서 127개의 센서를 제어할 수 있다는 뜻입니다.


해당 통신을 구현하기 위해서는 특정한 회로 및 시퀀스 스펙을 맞춰주어야 합니다.



1. 하드웨어상 특징


- 통신 라인에서 제어 주체별로 각각 Master, Slave로 나눌 수 있으며 주로 MCU가 Master가 되고 센서가 Slave가 됩니다.

  Master는 통신 라인의 Clock 주파수를 생성하고 Slave의 주소를 호출하여 동작을 제어하는 역할을 합니다.

  Slave는 Master에 의해 호출되어 Master가 원하는 값을 반환합니다.


- 주로 +3.3V 전압을 이용하며, 그 이상의 전압도 가능합니다. 다만, 각 칩이나 센서별로 스펙상 특정한 전압을 사용하기 때문에

  해당 전압에 맞추어 사용하여야 합니다.


- 통신 라인은 SDA(데이터), SCL(클락) 두 선으로 구성되어 있고 각각의 선에 풀업 저항이 필요합니다. (+3.3V의 경우 주로 4.7K)

 


2. 동작 시퀀스 특징


일반적인 경우 흐름 제어 옵션을 OFF로 하기 때문에 Baud Rate만 신경을 쓰면 되지만

 

흐름 제어 기능을 사용할 경우에는 평상시처럼 Rx, Tx만으로는 통신이 되지 않는다.

 

 

1. Software Handshaking

 

직렬 통신을 통해 버퍼 사이즈 초과 등으로 인하여 더 이상 데이터를 입력 받지 못할 경우에

입력 측에서 XOFF문자를 보내주면 출력 측에서 데이터 전송을 중단한다.

 

반대로, 추가적인 데이터를 받을 수 있는 경우에 입력 측에서 XON문자를 보내주면

출력 측에서 중단했던 데이터 전송을 재개한다.

 

XON - 아스키코드 문자 DC1, 0x11, Ctrl+Q

XOFF - 아스키코드 문자 DC3, 0x13, Ctrl+S

 

2. Hardware Handshaking

 

마찬가지로 데이터를 입력 받지 못하는 상황이 발생하면 RTS, CTS Pin 출력 상태로 알려준다.

 

RTS(Request To Send) : 수신 측에서 데이터 수신이 가능한 상태이면 Low, 불가능한 상태이면 High를 출력함

CTS(Clear To Send) : 송신 측에서 CTS핀 상태가 Low일 때 데이터를 송신

 

 

하드웨어 흐름 제어를 On 으로 사용하여야 할 때,

 

MCU로 직접 RTS, CTS핀을 제어하여 통신할 수도 있으며 간단하게 이용하려는 경우에는

 

같은 장치끼리 RTS-CTS를 Short시키거나 CTS를 Low로 Pull Down 해 주면

 

흐름 제어를 이용하지 않는 상태처럼 직렬 통신을 이용 가능하다.

 

 

PIC시리즈 MCU들의 클럭 소스관련 블럭도입니다.

 

복잡해 보이지만 하나하나 정리해 보겠습니다.

 

PIC에서 이용되는 클럭 소스는 크게 나누자면 내부 클럭, 외부 클럭으로 나눌 수 있습니다.

 

- 내부 클럭 : MCU자체에 내장되어 있는 RC오실레이터를 이용한 클릭 소스.

HFINTOSC, MFINTOSC, LFINTOSC로 분류되어지며 기준은 주파수의 크기입니다.

HF, HF, LF 에서 F는 말그대로 Frequency이며 무조건 클럭이 높으면 좋은 거 아닌가?

라고 생각할 수 있겠지만 주파수가 높아지면 MCU 소모 전류가 많아집니다.

 

따라서 PIC MCU중에서 LF(Low Frequency) 시리즈들을 보면

Sleep모드를 지원하는 데, Sleep모드에서 LFINTOSC(31kHz)의 가장 낮은 주파수를 사용하게 됩니다.

 

또 한 가지 특성은 내부 클럭들은 RC오실레이터를 이용하기 때문에 열에 의해

오차가 커질 수 있다는 특성이 있습니다. 따라서 정확한 클럭 소스를 얻어야 할 때는

외부 크리스탈을 이용해야 합니다.

 

- 외부 클럭 : 크리스탈, 오실레이터, 레조네이터 등을 주로 말하며,

필요에 의해 MCU 외부에 추가적으로 회로를 설계해야 합니다.

 

각 발진원들의 특징을 보자면,

 

※ 크리스탈

MCU에 가장 흔히 쓰이는 클럭 소자이며, kHz ~ 32MHz 정도의 주파수를 얻을 수 있습니다.

오차율은 최대 ±30ppm 정도로서, ppm이라는 단위는 발진 소자가

1,000,000번의 발진 주파수에서 오차가 어느 정도 허용되는 지를 말합니다.

시계를 예로 들면 ±30ppm 정도면 하루에 1,2초 정도 오차가 생길 수도 있다고 보시면 됩니다.

회로 구성이 간단하며 MCU에 연결하지 않으면 스스로 발진하지 않습니다.

 

※ 레조네이터

전체적으로 크리스탈과 회로 구성이나 특징은 비슷하지만 오차율이 매우 큽니다. (1/1000정도)

 

※ 오실레이터

전체적으로 가장 좋은 특성을 가지고 있지만 크기가 비교적 크며 자체적으로 전원이 인가되어야 합니다.

따라서 외부MCU에 연결되어 있지 않아도 발진 파형을 만들 수 있습니다.

 

 

 

PIC MCU를 이용하기 위해서 가장 먼저 해 줘야 할 것이 바로 클럭 소스원 설정입니다.

 

코드상에서 OSCCON 등의 클럭 관련 레지스터를 변경하여 직접 설정하거나

 

아래와 같이 MPLAB IDE 프로그램 상단 메뉴의 [Run - Set Configuration Bits] 에서

 

FOSC 메뉴의 bit를 직접 설정할 수 있습니다.

 

 

 

 

1,2,3 번은 External Clock이라고 되어 있지만 오실레이터만을 의미합니다.

 

크리스탈을 외부 클럭을 사용한다고 해서 이 것을 선택하면 크리스탈이 발진하지 않습니다

 

만약 크리스탈이나 레조네이터를 이용할 경우에는 주파수에 맞게 HS, XT, LP 중에서 하나를 선택해야 합니다.

 

외부 클럭원을 사용하지 않고 내부 RC오실레이터를 이용하려면 INTOSC를 선택하면 됩니다.

 

 

+ Recent posts