1. venv를 설치한다.

2. pycharm의 실행환경에서 file->Settings->project->project interpreterfh 간다.

3. 톱니 누르고 new virtualenv선택

4. pycharm의 base interpreter경로를 venvdml python으로 등록한다.


'공부일지' 카테고리의 다른 글

7.20~26일 공부계획  (0) 2015.07.19

https://wikidocs.net/book/1


https://wikidocs.net/book/2


https://www.codecademy.com/tracks/python-ko

'Python' 카테고리의 다른 글

Virtualenv에서 python3사용하기  (0) 2015.10.11
pycharm에서 virtualenv 만들기  (0) 2015.10.11
파이썬 환경설정  (0) 2015.09.27
파이썬 설치하기  (0) 2015.09.27

7.3 PyCharm을 이용한 개발 환경 구축

PyCharm

지금까지는 Python IDLE를 통해서 주로 파이썬 실습을 진행해 보았습니다. Python IDLE는 사용하기 편하고 무엇보다 복잡한 다른 툴들을 설치하지 않고도 바로 사용할 수 있기 때문에 초보 분들에게 적합한 개발 환경입니다. 하지만 조금 큰 프로그램을 작성하는 경우에는 프롬프트 상에서만은 개발 할 수는 없습니다. 코드의 개발 및 유지 보수와 관련된 모든 것들을 처리할 수 있는 통합 개발 환경이 필요합니다. 보통 이러한 것들을 영어로는 IDE (Integrated Development Environment)라고 부른답니다. 모 회사의 커피 광고가 생각나는 군요... 이게 ~~라면...넌 TOP 야~

PyCharm은 파이썬 개발을 위한 IDE 중에 하나입니다. PyCharm은 체코의 JetBrains 이라는 회사에서 개발 된 개발 툴로 무료 버전과 유로 버전이 있습니다. 물론 우리가 사용할 것은 무료 버전이겠지요 ? 무료 버전과 유료 버전 사이에는 몇 가지 차이가 존재하지만 여러분들이 웹페이지를 전문적으로 개발하지 않는 이상 무료 버전인 Community Edition으로 충분히 개발이 가능합니다.

PyCharm 다운로드

사실 이 책을 읽는 거의 대부분의 독자 분들이 윈도우즈 환경에서 개발하고 계실 것이라 생각이 듭니다. 사실 윈도우 환경에서는 마이크로소프트 (윈도우를 만든 회사이죠?)가 만든 대표적인 개발툴인 Visual Studio (비주얼 스튜디오)가 있습니다. 그러나 Visual Studio는 다 좋은데~ 유료 라는 단점이 있습니다. 회사에서 사용하려면 1 copy당 1천만원 이상의 비용을 지불해야 합니다. 이에 반해, PyCharm은 유사한 기능을 제공하면서 무료로 제공된다는 큰 장점이 있습니다.

먼저 아래의 링크로 이동합니다. 윈도우 환경을 선택하신 후 "Community Edition"을 클릭하여 다운로드를 시작합니다.

http://www.jetbrains.com/pycharm/download/

PyCharm 설치

다운로드 실행파일을 클릭하면 다음과 같은 설치화면이 나옵니다. 중간에 먼가를 물어보는 화면이 나온다면 "예"를 클릭하면 된답니다.

다음으로 Next 또는 Install 버튼을 그때 그때 눌러서 설치를 진행합니다. 아래와 같은 화면은 바탕화면에 PyCharm 아이콘을 만들지에 대한 옵션과 그리고 파이썬 확장자인 *.py 파일에 대해서 자동으로 PyCharm으로 열리도록 하겠는지에 대한 옵션을 체크하는 부분입니다. 클릭을 하셔도 되고 안하셔도 되지만 일단 저는 클릭을 해보도록 하겠습니다.

다음 단계는 Install 버튼을 누르니 알아서 설치가 진행이 됩니다.

PyCharm 실행하기 및 기본 환경설정

PyCharm Community Edition을 설치하셨다면 다음과 같이 바탕화면에서 아이콘을 클릭하여 프로그램을 실행합니다.

우리가 PyCharm을 설치한 후 처음으로 실행을 시켰기 때문에 기본적인 설정화면이 나타납니다. 당황하지 마시고 OK 버튼을 클릭합니다.

먼가를 또 물어보는 창이 뜹니다. 먼가 점점 더 복잡해지고 있습니다. 새로 뜬 창의 제목을 읽어보니 PyCharm Community Edition Initial Configuration 이라고 되어 있네요. 초기 설정이라는 의미이지요? 이 정도 영어는 우리도 해석할 수 있지요 ? 일단 현재 화면에서 설정하는 것은 나중에 다시 바꿀 수 이씅니 너무 걱정하지 마시고 아래와 같이 설정을 해봅니다.

다음으로 넘어가려고 했더니 새로 변경 된 설정으로 다시 프로그램을 실행한다고 하네요. 실행하라고 일단 해줍니다.

PyCharm을 이용한 첫 프로젝트 생성

이제 우리가 원하는 설정으로 변경 된 PyCharm이 새롭게 시작되었습니다. 먼저 프로젝트를 만들어 봅니다. 여기서 프로젝트라는 것은 여러분들이 먼가를 만들고자 하는 단위입니다. 보통 회사에서 우리 이번에 큰~ 프로젝트를 시작할꺼야~!! 이런 의미랑 같습니다. 그냥 여러분들이 만들고자 하는 시스템 트레이딩 프로그램 자체를 프로젝트라고 부르는 것입니다. Create New Project을 클릭합니다.

아래와 같이 프로젝트 파일들이 저장될 위치 (Location), 그리고 작성한 파이선 프로그램을 실행할 인터프리터의 버전을 설정할 수 있도록 되어 있습니다. 일단 처음이니깐 쉽게 기본 설저응ㄴ 바꾸지 않고 프로젝트의 제목을 untitled라고 되어 있는 부분만 hello 라고 변경해 봅시다.

변경을 모두 하신 분들은 하단의 Create 버튼을 클릭하여 프로젝트를 생성해 봅시다. 프로젝트가 생성이 되면 아래와 같이 윈도우 방화벽 관련 메세지가 나올 수 있는데 놀라지 마시고 엑세스 허용을 클릭하시면 됩니다.

또 화면에 Tip of the Day 라는 창에는 메일 메일 간단한 팁을 알려주는데 시간이 되시는 분들은 읽어보신 후 Close 버튼을 클릭하여 닫아주시면 됩니다.

프로젝트에 코드 추가하기

이제 생성된 프로젝트에 파이썬 소스코드를 추가해보도록 하겠습니다. 지금까지는 보통 파이썬 IDLE를 사용하다보니 코드를 매번 새로 작성해야 했습니다. 이제 우리가 글을 쓸 때 워드나 한글이라는 소프트웨어를 사용하는 것처럼 우리도 파이썬 코드를 앞으로는 저장해가면서 프로그램을 작성할 예정입니다.

이를 위해서 우리가 좀 전에 만들어보았던 hello 라는 프로젝트에 마우스 오른쪽 버튼을 클릭하신 후 New -> Python File 메뉴를 선택합니다.

파일 이름은 여러분들이 자유롭게 정할 수 있는데, 본 예제에서는 간단히 hello.py라고 하겠습니다. 파일 이름을 입력하신 분들은 OK 버튼을 클릭합니다.

hello.py 파일에 다음과 같이 코드를 작성해 보도록 합시다. 처음이니깐 역시 "hello world"를 작성해보도록 합시다. 코드를 작성하신 분들은 Ctrl 키를 누른상태에서 s 키를 눌러서 저장합니다.

프로젝트를 실행을 하려면 기본적인 설정을 해야하는데, 가장 쉽게 할 수 있는 방법은 프로젝트에서 hello.py 파일에 마우스 오른쪽 버튼을 누른 후 Run "hello"를 선택하면 됩니다 .

아래의 그림과 같이 PyCharm의 아래쪽에 실행 결과가 출력됨을 확인할 수 있습니다.

Ctrl+F9 키를 이용해서 한번 프로젝트 설정을 해준 다음부터는 Ctrl+F5를 누르면 실행을 시킬 수 있습니다. 메뉴 버튼의 Run -> Run을 직접 클릭하셔도 실행이 됩니다.

한가지 아쉬웠던 점은 Visual Studio와 달리 기본적으로 프로젝트를 만들면 실행이 가능한 상태로 되지 않고 Ctrl+F9키를 눌러서temporary run configuration을 한번 만들어 줘야 한다는 점입니다. 사실 프로젝트를 만들고 소스코드를 추가한 후 Ctrl+F5를 눌렀을 때 바로 실행이 되면 초보자들에게 더 편했을 텐데 말이지요.

마지막 편집일시 : 2015년 1월 18일 10:38:34 오후


'Python' 카테고리의 다른 글

Virtualenv에서 python3사용하기  (0) 2015.10.11
pycharm에서 virtualenv 만들기  (0) 2015.10.11
파이썬 관련도서,사이트  (0) 2015.09.27
파이썬 설치하기  (0) 2015.09.27

3) 파이썬 설치하기

자신의 컴퓨터에 파이썬을 설치해보자. 여기서는 윈도우즈와 리눅스의 경우만을 다루도록 한다. 다른 시스템에서는 파이썬 홈페이지의 설명을 참고하도록 하자.

윈도우에서 파이썬 설치

윈도우즈의 경우에는 설치가 정말 쉽다. 우선 http://www.python.org/download (파이썬 공식 홈페이지)에서 윈도우용 파이썬 언어 패키지를 다운로드한다.

다음 그림과 같이 파이썬 버전별로 다운로드 받을 수 있는 목록을 볼 수 있을 것이다. 이 중에서 Python 3.x 로 시작하는 버전 중 가장 최근의 윈도우 인스톨러를 다운로드 받도록 하자. (이 글을 작성하는 시점의 최신버전은 3.4.3이다.)

  • 64비트 윈도우즈용 : Windows x86-64 MSI installer (python-3.4.3.amd64.msi)
  • 32비트 윈도우즈용 : Windows x86 MSI installer (python-3.4.3.msi)

인스톨러를 다운로드 받은 후에 더블클릭하면 바로 설치가 시작된다.

  1. Install for All Users 를 선택하고 "Next"를 클릭한다.
  2. 다음은 파이썬의 설치디렉토리를 묻는 화면이다. 디폴트 값(아마도 C:\Python34\)을 그대로 두고 "Next"를 클릭한다.
  3. Customize Python 부분에서는 "Next"를 클릭한다.
  4. 파이썬 설치가 진행된다. 설치가 완료되면 "Finish"를 클릭하여 종료하도록 하자.

파이썬이 정상적으로 설치되었다면 다음과 같이 프로그램 메뉴에서 확인 할 수 있을 것이다.

[시작 -> 모든프로그램 -> Python 3.4]

※ 만약 파이썬 2.7 버전을 설치할 경우에는 Python 2.7용 인스톨러 파일을 받아서 설치하면 된다.

리눅스에서 파이썬 설치

리눅스 사용자라면 이미 디폴트로 파이썬이 설치되어 있을 것이다.

$ python -V

위의 명령어를 치면 파이썬 버전을 확인할 수 있다.

http://www.python.org/download 에 접속해 Python-3.4.3.tgz를 다운로드한다.

여기서는 소스를 컴파일하여 설치하는 방법에 대해서 알아보도록 한다.

우선 다음처럼 압축을 푼다:

$ tar xvzf Python-3.4.3.tgz

다음에 해당 디렉토리로 이동한다:

$ cd Python-3.4.3

Makefile 파일을 만들기 위해서 configure를 실행한다:

$ ./configure

파이썬 소스를 컴파일 한다:

$ make

루트 계정으로 인스톨한다:

$ su -  
$ make install


'Python' 카테고리의 다른 글

Virtualenv에서 python3사용하기  (0) 2015.10.11
pycharm에서 virtualenv 만들기  (0) 2015.10.11
파이썬 관련도서,사이트  (0) 2015.09.27
파이썬 환경설정  (0) 2015.09.27

풀업(pullup)과 풀다운(pulldown)

 

풀업(pullup)과 풀다운(pulldown)을 알기에 앞서 플로팅(floating)에 대해 알아보자.

1. 플로팅 (floating)


 칩에 입력을 5V 또는 0V를 가한다. 하지만 입력을 가하지 않는 경우는 칩 자체에서는 5V를 입력하였는지 1V를 입력하였는지 모른다. 이런 문제에 의하여 오작동이 발생할 수 있다. 이런 상태를 플로팅되었다라고 한다. 플로팅 상태는 잡음에 매우 취약해지므로 시스템이 불안정해진다. 이를 해결 하기 위해서 풀업 / 풀다운 저항을 사용하게 된다.

2. 풀업 저항 (Pullup resistor)


풀업 저항을 사용한다면 스위치가 열려 있을 때 칩에는 항상 5V의 전압이 가해진다.
따라서 회로에 입력을 몰라도 항상 5V의 전압을가진 상태가 된다. 스위치를 닫는다면 그라운드 쪽으로 전류가 흐르게 되며 회로의 전압은 0V가 되며, 1을 입력한 것으로 인식하게 된다. 핀을 높은 저항에 매달아 둔다는 뜻에서 '풀 업 저항'이라 한다.


3. 풀다운 저항 (Pulldown resistor)


회로는 5V의 전압을 받으면 1로 인식하고, 0V의 전압을 받으면 0으로 인식한다.
스위치가 열려있는 상태에서 그라운드와 연결되어 있으므로 전류가 항상 그라운드로 흐르게 되어 0V가 된다. 스위치를 닫게되면 소량의 전류가 저항을 통해 그라운드로 흘러 나가지만 많은 양의 전류가 회로(핀)로 흘러 5V가 된다. 따라서 1이 입력된 것으로 인식한다. 항상 그라운드에 묶어둔다는 의미에서 '풀 다운 저항' 이라 한다.







[출처]

http://blog.naver.com/jinjinwlsdud?Redirect=Log&logNo=60112904160
http://exmars.egloos.com/3454006

'Hardware' 카테고리의 다른 글

레벨시프터 Logic Level Converter  (0) 2015.11.10
저항  (0) 2015.09.08
led와 저항  (0) 2015.09.08
I2S(Integrated Interchip Sound)  (0) 2015.08.04
SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04

'Hardware' 카테고리의 다른 글

레벨시프터 Logic Level Converter  (0) 2015.11.10
풀업(pullup)과 풀다운(pulldown)  (0) 2015.09.08
led와 저항  (0) 2015.09.08
I2S(Integrated Interchip Sound)  (0) 2015.08.04
SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04

led와 저항

100~300 옴 3~5V

1k옴 12V

'Hardware' 카테고리의 다른 글

풀업(pullup)과 풀다운(pulldown)  (0) 2015.09.08
저항  (0) 2015.09.08
I2S(Integrated Interchip Sound)  (0) 2015.08.04
SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04
I2C(Inter Integrated Circuit)  (0) 2015.08.04


(1) I2S란?

: 

위키에 보면 I2S는 Integrated Interchip Sound 의 약어라고 한다. 
즉, 디지털 오디오 장치에 표준 통신법. ( I2SBUS.pdf)



위의 그림과 같이 기본적으로는 3개의 line이 연결.
[ serial clock(이하 SCK), word select(이하 WS), serial data(이하 SD)]

○ Tansmitter - CPU
○ Receiver - Sound IC(sound codec)


(2) I2S Interface



● SCK
 : bit clock으로 'SD'로부터 나오는 데이터를 SCK의 Clock 기준으로 잘라 SD값을 읽어간다.
   1 bit값(0 or 1)을 읽을 수 있는데, 연속적으로 읽게되면 음악이 된다. (bit clock)
   대부분의 칩간의 통신이 이러한 기준 clock을 가지고 data를 읽어오곤 한다.

● WS
 : 스테레오의 'left / right 정보로 스피커에서 서로 다른 소리가 날 수 있도록 한다.

   예를 들면, 'WS'가 low일 경우 left용 data를 읽고, high일 경우 right용 data를 읽는다.

● SD
 : sound data가 되고, PCM Data.

● MASTER CLOCK
 : sound IC는 스스로 clock을 만들 수 없기 때문에 master clock을 받게 된다.
이 clock을 기준으로 sound IC는 나누고 곱하는 등 작업을 내부적으로 동작하며 'SCK'나 'WS'를 발생한다.

● UPDA
 : 마이크와 같은 입력장치가 sound IC에 물려 있게 된다면 마이크의 음성 신호를 디지털 데이터로 전환 후 
   CPU에 올려줘야 하기 때문에 'SD'와 같은 용도의 upload용 data line으로 bit들이 전송된다.

● I2C
 :추가적으로 sound IC를 제어하기 위해 I2C로 연결되어 있어야 한다.
  I2S는 sound data를 전송하기 위한 표준이고, 실제 sound IC를 제어하려면 제어용 통신이 별도로 필요하기 때문이다.
  SPI통신이나 I2C, serial통신등이 존재하지만 대부분 sound IC는 I2C 통신을 하고 있다.

 위와 같이 I2S라인 5개와 I2C라인 2개가 연결 되야 sound IC를 제어 할 수 있다.


(3) SD DATA
: wave file format은 크게 "RIFF"부분, "fmt"부분, "data"부분으로 나뉘는데, wave file의 정보를 담는 "RIFF"와 "fmt"를 합쳐도 36Byte 이다.
  그리고 나머지는 모두 "data"로 PCM변조하여 analog음원을 digital화 하면서 얻게되는 sample들을 나열한 형태이다.
  이 sample들이 "data"에 담긴 정보인 PCM data 이다.

- 연속적인 data가 'SD'라인을 통해서 sound IC에 전달 되고, sound IC는 PCM data를 아날로그화 하여 스피커로 출력된다.


(4) 정리

첫번째, sound IC가 master인지 slave인지 정하고, sound IC를 initailize(I2S, I2C정보 셋팅)합니다.

두번째, CPU에서 음원(wave file, mp3 file등)을 분석해서 sampling rate, bit per sample, channel수를 알아챕니다.

세번째, I2C를 통해 sound IC에게 sampling rate, bit per sample, channel수 등의 정보를 알려줍니다.

네번째, 'SCK', 'WS'가 해당 음원에 맞게 셋팅 됩니다.

다섯번째, 'SD'에 PCM data를 넣어줍니다.

여섯번째, 음악이 스피커나 이어폰을 통해 재생됩니다.




※ 출처 : http://musart.tistory.com/75

'Hardware' 카테고리의 다른 글

저항  (0) 2015.09.08
led와 저항  (0) 2015.09.08
SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04
I2C(Inter Integrated Circuit)  (0) 2015.08.04
UART란?  (0) 2015.08.04

SPI(Serial Peripheral Interface Bus)


(1) SPI(Serial Peripheral Interface Bus ) 통신
SPI (Serial Peripheral Interconnect) 버스는 Motorola에 의해 개발된 전이중 (full duplex) 통신이 가능한 동기 통신 규격이다.
 
I2C와 마찬가지로 Master - Slave 방식으로 동작하며 Master가 동기를 위한 클럭을 출력한다. 각 SPI Slave 장치는 chip enable (/CE) 입력을 가지고 있으며 이 입력이 활성화되었을 때에만 동작한다. 따라서 Master는 여러 개의 slave select (SS) 선을 Slave들의 /CE에 연결하고 한 순간에 하나의 Slave만 선택하는 방법을 사용하여 두 개 이상의 Slave 장치들을 구동할 수 있다. SPI의 통신 속도는 최고 70 MHz에 이르기 때문에 I2C에 비해 훨씬 빠르다.



그림에 표시된 4 개의 신호는 SPI 버스에서 정의된 신호이다

● SCLK : Serial Clock. 매스터가 출력하는 동기용 클럭 (output from master)
● MOSI : Master Output Slave Input. 매스터의 출력이며 슬레이브에게는 입력 (output from master)
● MISO : Master Input Slave Output. 슬레이브의 출력이며 매스터에게는 입력 (output from slave)
● SS : Slave Select. 매스터의 출력으로 슬레이브를 선택하기 위한 신호 (Active Low)


(2) SPI 통신 과정

SCLK는 Master가 출력하는 클럭 신호이다. SCLK를 기준으로 Master와 Slave 사이의 데이터 교환이 진행된다. MOSI는 Master의 출력으로 Slave로 정보를 보내기 위한 선이다. 반대로 MISO는 Slave의 출력으로 Master가 Slave의 정보를 받기 위한 선이다. 앞의 그림에서 보듯이 Master와 Slave의 MOSI끼리 서로 연결되며 MISO끼리 서로 연결된다. SS는 Master가 Slave를 선택하기 위한 Master의 출력으로 Slave의 /CE 입력에 연결된다. Slave는 /CE 입력이 ‘0’인 동안에만 활성화된다. 

통신을 진행하기 위해서 Master는 우선 SS로 ‘0’을 출력하여 해당 Slave를 활성화시킨다. 그런 다음 Master는 SLCK로 동기를 위한 클럭을 출력하는데 이 클럭에 맞추어 MOSI로 데이터를 한 비트씩 내보낸다. 이와 동시에 Master는 자신이 출력하는 클럭에 맞추어 MISO를 한 비트씩 읽는다. 다시 말해서 SPI Master는 자신의 출력인 SCLK에 맞추어 MOSI로 데이터를 내보내며 동시에 MISO로는 데이터를 수신한다. SPI 버스는 언제나 양방향 통신을 진행한다. SCLK에 맞추어 MOSI로 데이터를 출력하는 동안 MISO로는 데이터가 수신된다. 수신되는 데이터는 상황에 따라 의미가 있는 값일 수도 있고 쓰레기 값일 수도 있다. 마찬가지로 Slave의 데이터를 읽기 위하여 SLCK에 맞추어 MISO로 입력을 받는 동안 MOSI로는 데이터가 출력된다.

보통 SPI 통신은 8 비트 단위로 진행되지만 12 비트나 16 비트 또는 그 이상의 길이가 한 단위가 될 수도 있다. 비트 전송 순서에 대한 규정은 없다. 데이터의 전송은 MSB부터 시작될 수도 있고 LSB부터 시작될 수도 있다. 데이터를 연속 전송하는 경우 한 단위의 데이터를 보낼 때마다 SS 신호를 매번 인가할 수도 있지만 SS 신호를 ‘0’으로 설정한 후 모든 데이터를 다 보낼 때까지 이 상태를 유지하고 있다가 데이터의 전송이 끝났을 때 SS를 ‘1’로 바꿀 수도 있다. SPI 규격은 이런 부분까지 규정하고 있지 않으며 Master와 Slave 사이의 약속에 따라 결정된다. SPI Slave 장치의 용도와 특성에 따라 사용 방법이 다르므로 Slave 장치의 데이터쉬트를 반드시 확인해야 한다.

어떤 마이크로컨트롤러는 설정된 전송 단위에 맞추어 데이터 전송 때마다 자동으로 SS 신호를 출력해 주는 기능을 가지고 있다. ATMEL사의 ARM7 기반 AT91SAM7S 계열 마이크로컨트롤러가 그 예이다. 데이터 전송 단위를 16 비트로 설정했다면 SPI Master가 SCLK 신호를 출력하기 전에 자동으로 SS 신호를 ‘0’으로 내리고 데이터가 출력되는 동안 이 상태를 유지하다 전송이 끝나면 이 신호를 다시 ‘1’로 올려준다. 이런 용도로 사용할 수 있는 SS 핀이 여러 개 있어서 사용자가 선택할 수 있다. 이런 기능이 있으면 정해진 길이의 데이터를 반복해서 출력하는 경우, 예를 들면 주기적으로 DAC에 값을 전송하는 경우에 매우 편리하다. 이런 기능이 없는 마이크로컨트롤러의 경우에는 사용자가 프로그램을 통해 수동으로 SS 신호를 제어해야 한다. AVR 마이크로컨트롤러는 이 기능을 지원하지 않으므로 GPIO 핀을 Slave 선택용으로 정하고 수동으로 그 신호를 제어해야 한다.


(3) 2개 이상의 SPI Slave 연결
: I2C 버스처럼 SPI 버스에서도 한 개의 Master가 두 개 이상의 Slave와 연결될 수 있다. I2C Slave가 고유한 주소를 가지고 있는 것처럼 각각의 SPI Slave는 chip enable (/CE) 신호를 가지고 있다. SPI Master는 각 Slave의 /CE 신호를 제어하여 원하는 Slave를 선택한다. 다음 그림은 한 개의 SPI Master에 두 개의 Slave들을 연결하는 방법을 설명한다.


세 장치의 SCLK, MOSI, MISO는 각각 서로 연결되어 있지만 Slave의 /CE 신호들은 서로 묶이지 않고 Master의 다른 핀들로 연결된다.Slave의 수에 상관없이 한 순간에는 하나의 Slave만 Master와 통신할 수 있다. 두 Slave가 모두 활성화되면 Slave의 출력인 MISO에서 데이터의 충돌이 일어난다. 그래서 Master는 자신이 원하는 Slave의 /CE 신호만 ‘0’으로 설정하여 활성화시키고 나머지 Slave의 /CE는 ‘1’로 두어야 한다. /CE 입력이 ‘1’인 Slave는 선택되지 않았기 때문에 자신의 MISO 출력을 hi-Z 상태로 만들어 선택된 Slave와 Master 간의 통신에 영향을 주지 않는다. 따라서 모든 SPI Slave의 MISO 출력은 3 상태를 지원한다. /CE 입력이 ‘1’인 Slave는 당연히 Master가 출력한 SCLK와 MOSI 신호를 무시한다.
 
세 개 이상의 Slave도 같은 방법으로 Master와 연결할 수 있다. Slave의 수가 하나씩 늘어날 때마다 새로운 Slave를 위한 /CE 신호만 하나 더 필요할 뿐이다. 그런데 이 때 Master에 연결된 Slave들이 사용하는 SPI 모드가 한 가지가 아니거나 비트 전송 순서가 다를 수 있는데 이런 경우에는 통신의 효율이 많이 낮아진다. 가령 어떤 Slave는 모드 0을 사용하고 또 다른 Slave는 모드 1을 사용한다면 Master가 Slave를 바꿀 때마다 동작 모드를 매번 다시 설정해야 한다. 또한 동작 모드가 같아도 비트 전송 순서가 다르다면 마찬가지 문제가 생긴다.
 
Master가 하나의 Slave만 구동한다면 Slave의 /CE 신호를 GND로 고정시켜 두어도 상관없다. 어차피 SCLK, MOSI, MISO를 공유할 다른 Slave가 없기 때문에 이 선들은 하나뿐인 Slave 전용으로 사용된다. 그렇기 때문에 Slave를 항상 활성화시켜 둬도 기능상의 문제는 생기지는 않는다.


(4) 전송 타이밍



(5) SPI의 장단점

○ SPI 버스의 가장 큰 장점으로는 최고 70 MHz에 이르는 빠른 통신 속도와 동시 양방향 통신이 가능하다는 점을 들 수 있다.
전송 데이터 단위에 대한 제약이 없어서 8 비트, 16 비트, 24 비트 등 원하는 길이를 한 워드로 설정할 수 있다. 비트 순서에 대한 제약도없으므로 필요에 따라 MSB부터 전송할 수도 있고 LSB부터 전송할 수도 있다. I2C Slave와 달리 SPI Slave는 자체 주소를 가지고 있지 않으므로 주소 충돌의 문제도 발생하지 않는다.
 
○ I2C 버스와 달리 SPI 버스에는 한 개의 버스 Master만 있을 수 있으며 I2C 버스에 비해 필요한 핀의 수가 더 많다.
SPI 버스는 기본적으로 4 가닥의 선을 사용하며 Master에 연결된 Slave의 숫자가 많아질수록 Slave를 선택하기 위한 SS 핀의 수 역시Slave 수에 비례해서 늘어난다. 또한 I2C 버스의 ACK와 같은 메커니즘이 없어서 Master는 자신이 통신하고 있는 장치가 실제 존재하는지여부를 확인할 수 없다.



※ 출처 : http://eslectures.blog.me/80137860924

'Hardware' 카테고리의 다른 글

led와 저항  (0) 2015.09.08
I2S(Integrated Interchip Sound)  (0) 2015.08.04
I2C(Inter Integrated Circuit)  (0) 2015.08.04
UART란?  (0) 2015.08.04
How to Build an 8-Bit Computer by spel3o  (0) 2015.03.14

I2C(Inter Integrated Circuit)


(1) I2C
:
I2C(Inter Integrated Circuit)버스는 마이크로프로세서와 저속 주변장치 사이의 통신을 용도로 Philips에서 개발한 규격인데 두 가닥의 선을 사용하므로 TWI(Two Wire Interface)라고도 불린다. I2C버스는 양방향 오픈 드레인 선인 SCL(Serial Clock)과 SDA(Serial Data)로 이루어져 있으며, Master-Slave 형태로 동작한다. 속도면에서는 다른 방식에 비하여 현저히 느리지만 하드웨어적으로 간단한 구성과 대화형 protocol을 만들 수 있고 하나의 버스에 많은 수의 노드를 연결 할 수 있다는 큰 장점이 있다.


(2) I2C Interface 구성
SCL은 통신의 동기를 위한 클럭용 선이고 SDA는 데이터용 선이다. Master는 SCL로 동기를 위한 클럭을 출력하며 Slave는 SCL로 출력되는 클럭에 맞추어 SDA를 통해 데이터를 출력하거나 입력 받는다. 단지 SDA 한 선으로만 데이터를 주고 받기 때문에 I2C 버스는 반이중 (half duplex) 통신만 가능하다. SCL 선과 SDA 선은 모두 오픈 드레인므로 두 선에는 각각 풀업 저항을 연결해 주어야 한다.


모든 I2C 매스터와 슬레이브 장치들의 SCL은 서로 연결되며 SDA 또한 서로 연결된다. 모든 장치들이 SCL과 SDA를 각각 공유하고 있으므로 매스터가 슬레이브를 개별적으로 지정하기 위한 방법이 있어야 한다. I2C 버스에서 매스터가 각 슬레이브를 구분하는 수단은 슬레이브의 주소이다. 모든 I2C 슬레이브 장치들은 7 비트의 고유한 주소를 가지고 있으며 매스터는 주소로 원하는 슬레이브를 지정한다. 주소의 길이가 7 비트이므로 매스터는 최대 128 개의 슬레이브 장치들과 연결될 수 있다. 물론 슬레이브 장치들의 주소는 모두 달라야 한다.


(3) I2C 통신방식
: 앞의 그림에는 매스터가 하나 밖에 없지만 I2C 버스에 두 개 이상의 매스터들이 존재할 수도 있다. 버스에 연결된 장치의 수가 아무리 많아도 한 순간에는 오직 하나의 매스터와 하나의 슬레이브만이 통신할 수 있다. 현재 통신을 진행하고 있는 매스터가 버스 소유권을 가지고 있다. 두 개 이상의 매스터가 있는 경우에 현재 버스의 소유권을 가지고 있는 매스터 및 매스터와 통신을 진행하고 있는 슬레이브 장치 이외의 나머지 장치들은 이들의 통신을 방해하지 않아야 한다.

SCL과 SDA는 모두 오픈 드레인이므로 모든 장치들의 SCL과 SDA는 각각 와이어드 AND로 연결 되어 있다. 와이어드 AND 연결에서는 어느 한 장치라도 ‘0’을 출력하면 해당 신호의 상태는 논리 ‘0’이 된다. 만일 SCL이나 SDA에 연결되어 있는 어떤 장치가 논리 ‘0’을 출력한다면 다른 장치가 그 신호의 상태를 논리 ‘1’로 만들 수 있는 방법은 없다. 통신에 참여하지 않은 장치가 SCL이나 SDA로 ‘0’을 출력하면 매스터가 정상적으로 통신을 진행할 수 없다. 이것은 I2C 버스에 연결되어 있지만 현재 통신에 참여하지 않고 있는 장치들은 모두 자신의 출력을 플로우팅 상태로 유지해야 한다는 것을 뜻한다. (플로우팅 상태 : 신호가 low인지 high 인지 알수 없는 상태)

통신이 진행되지 않는 상황에서 모든 장치의 출력은 플로우팅 상태이므로 SCL과 SDA의 상태는 모두 논리 ‘1’이다. 이 상황에서 I2C 버스의 사용을 원하는 매스터는 SCL과 SDA로 시작 조건을 출력하며 버스 소유권을 주장하고 통신을 시작할 수 있다.두 신호의 상태가 모두 논리 ‘1’이 아니라면 현재 다른 매스터가 버스 소유권을 가지고 통신을 진행 중에 있다는 것을 뜻하므로 그 매스터가 버스 소유권을 반납할 때까지는 다른 매스터가 새로운 통신을 시작해서는 안 된다.


(3) 안정화 구간
: 다음 그림은 I2C 프로토콜의 시작 조건, 정지 조건, 그리고 데이터 안정 구간을 보여주고 있다.


I2C 프로토콜에서 SCL이 ‘0’인 구간에서는 SDA의 상태 변화가 허용되지만 SCL이 ‘1’인 구간에서는 SDA는 안정된 논리 상태를 유지해야 한다. Master가 Slave로 데이터를 출력할 때 SCL이 ‘0’인 구간에서 SDA의 비트 전환을 하며 SCL이 ‘1’인 구간에서는 SDA의 상태를 그대로 유지한다. Slave가 데이터를 출력하고 Master가 그 데이터를 읽을 때에도 마찬가지이다. 그래서SCL이 ‘1’인 구간은 데이터가 안정한 구간이다.

I2C 프로토콜에서 SCL이 ‘1’을 유지하고 있는 구간에서 SDA의 상태가 변하는 것은 일반 데이터 전송이 아닌 특별한 조건을 의미한다. SCL이 ‘1’인 동안 SDA가 ‘1’에서 ‘0’으로 바뀌는 것을 시작 조건 (start condition, S)이라고 하며 SCL이 ‘1’인 동안 SDA가 ‘0’에서 ‘1’로 바뀌는 것을 정지 조건 (stop condition, P)이라고 한다. I2C 통신을 원하는 Master는 SCL과 SDA가 모두 논리 ‘1’일 때 SDA의 상태를 ‘0’으로 바꾸어 시작 조건을 출력하며 다른 장치들에게 통신의 시작을 알린다. 마찬가지로 통신을 끝낼 때에는 SCL이 ‘1’인 동안 SDA를 ‘0’에서 ‘1’로 바꾸어 정지 조건을 출력하며 버스 소유권의 반납을 다른 장치에게 알린다.


(4) 패킷형식
: 다음 그림은 I2C 버스에서 사용되는 데이터 패킷의 형식을 보여준다. ACK을 포함한 9 비트가 I2C 규격에서 통신의 기본 단위가 된다.


Master는 SCL과 SDA가 모두 ‘1’인 상태에서 SDA를 ‘0’으로 바꾸어, 즉 시작 조건을 출력하면서 통신의 시작을 알린다. 시작 조건 이후부터는 SCL의 상태가 ‘0’인 구간에서만 SDA의 논리 값이 바뀐다. 매스터가 SCL로 출력하는 클럭에 동기를 맞추어 SDA로는 데이터가 MSB부터 한 비트씩 출력된다. SCL은 항상 Master가 출력하는 신호이지만 SDA는 현재의 동작이 Master의 읽기냐 쓰기냐에 따라 매스터의 출력일 수도 슬레이브의 출력일 수도 있다.

8 비트 데이터가 8 클럭 싸이클 동안 SDA로 출력되면 그 데이터를 수신한 쪽에서 9 번째 클럭에 맞추어 그 8 비트 데이터의 수신 여부를 확인해 주는 ACK 비트를 출력한다. 다시 말해서 ACK 비트는 직전의 8 비트 정보를 수신한 쪽에서 그 정보의 송신자에게 직전 8 비트 정보에 대한 수신 여부를 확인하는 값이다. ACK 비트가 ‘0’이면 정상 수신을 나타내며 ACK 비트가 ‘1’이면 (항상 그런 것은 아니지만) 정상 수신이 아님을 나타낸다. 값이 ‘0’인 ACK 비트와 구분하기 위하여 값이 ‘1’인 ACK 비트를 NACK (no acknowledgement)라고 부르기도 한다.

만일 매스터가 SDA로 8 비트 정보를 출력했다면 그 정보를 수신한 슬레이브가 9 번째 클럭에 SDA로 ACK 비트를 출력하여 매스터에게 수신 결과를 알린다. 이 때 매스터가 ACK 비트를 받으려면 9 번째 클럭 싸이클 동안 자신의 SDA 출력을 ‘1’로 유지하고 있어야 한다. 반대로 SDA로 출력된 8 비트 정보가 슬레이브의 출력이라면 그것을 수신한 매스터가 9 번째 클럭에서 ACK 비트를 출력한다. 이 때 매스터의 ACK 비트를 받기 위해 슬레이브는 자신의 SDA 출력을 ‘1’로 유지하고 있어야 한다.

8 비트 정보와 이어지는 ACK 비트의 전송이 끝난 다음에는 매스터가 정지 조건을 출력할 수도 있고 시작 조건을 다시 출력할 수도 있으며 다음 바이트 전송이 이어질 수도 있다. 다음 동작은 현재 진행 중인 동작이 무엇인가에 따라 달라진다.


(5) 주소 지정 형식
모든 I2C 슬레이브 장치는 7 비트의 고유한 주소를 가지고 있으며 매스터는 이 주소를 사용하여 상대 슬레이브 장치를 지정한다. 다음 그림은 매스터가 슬레이브의 주소를 지정하고 데이터를 주고 받는 방법에 대한 설명이다.



먼저
 Master 시작 조건에 이어서 자신이 원하는 Slave 7 비트 주소를 출력한다버스에 연결되어 있는 모든 Slave 장치들은 SDA 선을 계속 감시하면서 Master가 출력한 주소가 자신의 주소와 일치하는지 여부를 검사한다만일 Master 출력한 주소가어떤 Slave 주소와 같으면  Slave ACK 비트에 0’을 출력하여 Master에게 응답한다. Master 출력한 주소를 가진 Slave 없으면 아무도 ACK 비트로 0’을 출력하지 않으므로 ACK 비트의 상태는 1’을 유지하여 Master NACK 받게 된다.

 

Slave 주소 7 비트 다음에 오는 번째 비트는 다음 동작이 Master 읽기인지 쓰기인지를 가리킨다. Master  비트로 0출력했다면 이것은 Master 쓰기임을 뜻하므로 Slave 주소 다음의 1 바이트 데이터는 Master 출력이다 데이터는 앞서 주소가 지정된 Slave 위한 것이므로  Slave  값을 읽어 들인다. 반면에 Slave 주소 7 비트 다음에 오는 번째 비트가 1이면 이것은 다음 동작이 Master 읽기라는 것을 의미한다그러므로 Master 의해 주소가 지정된 Slave ACK 응답한 이어서 Master에게 보낼 데이터를 출력한다.

 

주의할 것은 Slave 주소는 7 비트이지만 패킷의 상위 7 비트로 정렬되고 마지막에 R/W 비트가 LSB 위치에 추가된다는 것이다.그렇기 때문에 Slave 주소를 왼쪽으로  비트 쉬프트 시킨 후의 8 비트 값을 Slave 주소라고 생각하는 것이  편할 수도있다예를 들면 DS1037이라는 RTC 칩의 I2C 주소는 1101000b으로 고정되어 있다 DS1037 I2C 주소는 0x68이다. DS1037 데이터를 기록해야   Master I2C 버스로 시작 조건을 출력한 다음 11010000b 출력한다. DS1037 데이터를 읽고자 한다면 Master I2C 버스로 시작 조건을 출력한 다음 11010001b 출력한다그러므로 8 비트 값인 0xd0DS1037 쓰기 주소, 0xd1 DS1037 읽기 주소로 생각할 수도 있다.

 

I2C 버스 규격은 I2C 버스의 전기적 특성  타이밍과 함께 앞에서 설명한 시작 조건정지 조건주소 지정 방법 등에 대해서만규정하고 있다구체적인 통신 방법 Master Slave 주소를 출력한 다음 정지 비트를 출력할 때까지 주고 받는 데이터의바이트 , Slave 내부 레지스터 주소 지정 방법 등은 Slave 장치에 따라 달라진다매우 다양한 종류의 I2C Slave 장치가 있으니 여러 가지 다양한 방법이 있을  있다.

 

대부분의 마이크로컨트롤러는 I2C 인터페이스를 지원한다그렇기 때문에 UART 사용할 때와 비슷하게 I2C 관련  개의 레지스터를 설정한  레지스터 읽기/쓰기를 통해 간단하게 I2C 통신을 실행할  있다마이크로컨트롤러가 I2C 인터페이스를지원하지 않으면 프로그램을 통해 비교적 쉽게 I2C 프로토콜을 구현할  있다?수신 타이밍을 정확하게 맞추어야 하는 비동기 통신과 달리 Master 출력하는 클럭에 맞추어 모든 동작이 이루어지므로 타이밍에 관련된 어려움이 특별히 없기 때문이다.


(6) I2C 통신의 예
: 직렬 EEPROM, ADC, DAC, RTC 등을 포함한 다양한 매우 장치들이 I2C 인터페이스를 지원하고 있다. I2C 슬레이브 장치와 통신을 하려면 그 슬레이브의 데이터쉬트를 참고하여 구체적인 통신 방법을 이해해야 한다. 다음 그림은 24LC64라는 64 Kbit 직렬 EEPROM의 내부 데이터를 읽기 위한 여러 방법 중 하나이다.



24LC64의 주소는 1010A2A1A0b로 정해져 있다. 앞 4 비트는 1010로 고정되어 있지만 뒤의 3 비트 A2A1A0는 사용자가 임의로 바꿀 수 있다. 주소의 마지막 3 비트를 사용자가 조절할 수 있도록 24LC64는 이 3 비트에 각각 대응되는 3 개의 입력 핀 A2, A1, A0을 가지고 있다. 주소의 일부를 사용자가 정하도록 만든 것은 24LC64에 여러 가지 다른 주소를 부여할 수 있도록 하기 위한 것이다. 만일 24LC64의 주소가 완전히 고정되어 있다면 I2C Master가 구동할 수 있는 24LC64는 1 개뿐이다.

위의 그림은 24LC64의 저장된 값을 특정 주소부터 연속으로 읽는 방법이다. 맨 먼저 Master는 시작 조건을 출력한 다음 24LC64의 7 비트 주소를 출력하고 8 번째 비트로 ‘0’을 출력하여 다음 동작이 쓰기라는 것을 알린다. Master가 지정한 주소와 동일한 주소를 가진 24LC64가 있다면 그 IC는 ACK을 출력하여 Master에게 응답한다. ACK을 받은 Master는 이어서 24LC64의 저장 공간 중에서 자신이 원하는 주소를 MSB부터 연속해서 출력한다. 24LC64의 저장 용량은 64 Kbits, 즉 8 K 바이트이므로 내부 주소 지정을 위해서는 13 비트의 주소 정보가 필요하다. 그러므로 Master는 두 번에 걸쳐 주소를 출력한다. 매 바이트를 받을 때마다 24LC64는 Master에게 ACK을 보낸다. 

24LC64 내부의 주소를 출력한 후 ACK을 받으면 Master는 시작 조건과 Slave 주소를 다시 한 번 더 출력한다. 그런데 이번에는 Master가 24LC64의 데이터를 읽을 차례이므로 7 비트 Slave 주소 다음에 오는 8 번째 비트는 ‘1’로 설정한다. 24LC64가 다시 Master에게 ACK으로 응답하면 그 다음부터 Master는 24LC64가 출력하는 데이터를 연속해서 읽는다. 24LC64의 출력을 1 바이트 받을 때마다 Master는 ACK을 출력하여 이를 24LC64에게 알린다. ACK을 받은 24LC64는 내부에서 주소를 1 증가시키고 새로운 주소의 데이터를 읽어서 다음 SCL 클럭에 맞추어 출력하게 된다. 데이터를 연속해서 수신한 Master는 자신이 원하는 마지막 데이터를 받으면 이번에는 NACK을 출력하고 이어 정지 조건을 출력하여 통신을 끝낸다.

위의 예는 I2C 통신을 사용하는 24LC64를 사용하기 위한 많은 방법들 중 하나일 뿐이다. I2C 인터페이스를 가진 장치마다 사용법이 다르기도 하거니와 한 장치에서도 명령의 종류에 따라 다양한 방법이 있을 수 있다.


(7) I2C의 장단점

○ I2C 버스의 가장 큰 장점으로 Slave 장치의 수에 관계 없이 두 가닥의 선만으로 Master와 Slave 사이의 양방향 통신이 가능하다는 것을 들 수 있다. 두 개 이상의 Master를 사용할 수 있다는 사실은 I2C 버스가 가진 또 다른 장점이다. 
 
○ 반면에 I2C 버스의 양방향 특성은 오픈 드레인 구조에 기반을 두고 있으므로 근본적으로 동시 양방향 통신이 불가능하고 통신 속도를 높이기 어렵다. 표준 모드에서 I2C 통신의 최대 속도는 100 kHz이며 고속 모드에서는 최고 400 kHz까지 가능하다. 다른 동기 통신 프로토콜, 예를 들어 뒤에서 설명할 SPI와 비교하면 매우 낮은 속도이므로 I2C 버스는 저속 주변장치와의 데이터 통신이나 주변 장치의 동작 모드 설정 등의 용도로 많이 쓰인다. 동작 모드 설정은 사용 빈도가 높지 않기 때문에 낮은 속도가 별 문제가 되지 않는다.
 
○ I2C 인터페이스를 사용하는 제품의 수는 무척 많은 반면 Slave의 주소는 7 비트로 그 길이가 제한되어 있어서 다수의 Slave 장치를 사용할 때 Slave 주소가 충돌할 가능성이 있다. 이런 문제에 대한 해결책으로 Slave 주소의 하위 2 ~ 3 비트를 사용자가 임의로 설정할 수 있는 제품들이 많기는 하지만 주소가 7 비트로 제한되어 있어서 근본적인 해결책이 될 수는 없다.





※ 출처 : http://eslectures.blog.me/80137860924

'Hardware' 카테고리의 다른 글

I2S(Integrated Interchip Sound)  (0) 2015.08.04
SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04
UART란?  (0) 2015.08.04
How to Build an 8-Bit Computer by spel3o  (0) 2015.03.14
led는 안다리가 짧은게 vcc  (0) 2015.01.03

+ Recent posts