1 / 34

임베디드 프로그래밍

임베디드 프로그래밍. Lecture # 05 2018. 11. 06. 목 차. 아날로그 입 출 력 테스트 I2C 통신 테스트 SPI 통신 테스트. 동기식 직렬 통신 (1). 라즈베리파이의 동기식 직렬 통신. ADC. Sensors. RaspberryPi. I2C / SPI. Actuator. DAC. 동기식 직렬 통신 (2). I2C(Inter-IC) 직렬 통신 단방향 동기식 직렬 통신. 동기식 직렬 통신 (3).

stitt
Download Presentation

임베디드 프로그래밍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 임베디드 프로그래밍 Lecture #05 2018. 11. 06

  2. 목 차 • 아날로그 입출력 테스트 • I2C 통신 테스트 • SPI 통신 테스트

  3. 동기식 직렬 통신 (1) • 라즈베리파이의동기식 직렬 통신 ADC Sensors RaspberryPi I2C / SPI Actuator DAC

  4. 동기식 직렬 통신(2) • I2C(Inter-IC) 직렬 통신 • 단방향 동기식 직렬 통신

  5. 동기식 직렬 통신(3) • SPI(Serial Peripheral Interface) 직렬 통신 (1) • 양방향 동기식 직렬 통신

  6. 동기식 직렬 통신(4) • SPI(Serial Peripheral Interface) 직렬 통신 (2)

  7. 아날로그 입력 (1) • ADC 장치: MCP3802 개요 • 12-bit Analog-to-Digital (A/D) Converters with on-board sample and hold circuitry • Programmable to provide 4’s pseudo-differential input pairs or 8’s single-ended inputs • Communication with the SPI protocol(mode 0, 0 and 1, 1) • Capable of conversion rates of up to 100 ksps • Operate over a broad voltage range (2.7V – 5.5V) • Low standby and active currents of only 500nA and 320μA, respectively

  8. 아날로그 입력 (2) • ADC 장치: MCP3802 핀 설명

  9. 아날로그 입력 (3) • ADC 장치: MCP3802 동작 구조도 및 신호 타이밍

  10. 아날로그 입력 (4) • ADC 장치: MCP3802 제어 비트 • 4 비트 제어 비트 • 상위 비트(Single/Diff)- 출력 타입 결정 • 하위 3비트 – 출력값 결정

  11. 아날로그 입력 (5) • ADC 장치: MCP3802와 MCU 통신

  12. 아날로그 입력 (6) • ADC 장치: MCP3802 연결도 • 실습 키트에서는 MCP3208 장치를 CE1에 연결

  13. 아날로그 입력 (7) • ADC 장치: MCP3802 연결 • 라즈베리파이에서의SPI 장치 사용 여부 확인 • 장치 파일 생성 여부 확인 # > ls /dev/spi* /dev/spidev0.0 /dev/spidev0.1 • 장치 드라이브 로딩 여부 확인 # > lsmod : spi_bcm2708 : MCP3802 장치 파일

  14. 아날로그 입력실습 (1) • 아날로그 입력 실습 • 실습 키트에서 가변 저항과 조도센서의 값을 읽어 출력한다. • 가변 저항과 조도 센서를 각각 MCP3208의 채널 0과 1에 연결 • MCP3208의 채널 0과 1의 값을 주기적으로 읽어 출력

  15. 아날로그 입력실습 (2) • 조도 센서 회로

  16. 아날로그 입력실습 (3) • 장치 연결

  17. 아날로그 입력실습 (4) • ADC 장치테스트 #1 (1) • 주기적으로 MCP3208 장치의 채널 0과 1을 읽어 출력 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_input • Main Class Name: jiot05.mcp3208input.MCP3208Input • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가

  18. 아날로그 입력실습 (5) • ADC 장치테스트 #1 (2) • MCP3208Input.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_input/src/jiot05/mcp3208input/MCP3208Input.java

  19. 아날로그 입력실습 (6) • ADC 장치테스트 #1 (3) • 설정 파일 추가 • “lib” 디렉토리 추가 • 장치 레지스트리 파일 및 보안 정책 파일 추가 • build.xml 파일 수정

  20. 아날로그 입력실습 (7) • ADC 장치테스트 #1 (4) • 설정 파일 - 장치 레지트리 파일 작성 # RPi3 header pins 1 = deviceType: gpio.GPIOPin, pinNumber:4, name:GPIO4, predefined:true 2 = deviceType: gpio.GPIOPin, pinNumber:7, name:GPIO7, mode:4, direction:1, predefined:true #3 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, predefined:true 17 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, mode:4, direction:1, predefined:true 4 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true … 300 = deviceType: spibus.SPIDevice, name:SPI0.0, controllerNumber:0, address:0, csActive:1, wordLength:8, clockFrequency:500000, clockMode:1, bitOrdering:1, predefined:true 301 = deviceType: spibus.SPIDevice, name:SPI0.1, controllerNumber:0, address:1, csActive:1, wordLength:8, clockFrequency:500000, clockMode:1, bitOrdering:1, predefined:true …

  21. 아날로그 입력실습 (8) • ADC 장치테스트 #1 (5) • 설정 파일 - 보안 정책 파일 작성 // policy for DIO framework grant { // Very permissive permissions permission jdk.dio.DeviceMgmtPermission "*:*", "open"; permission jdk.dio.gpio.GPIOPinPermission "*:*"; permission jdk.dio.i2cbus.I2CPermission "*:*"; permission jdk.dio.spibus.SPIPermission "*:*"; };

  22. 아날로그 입력실습 (9) • ADC 장치테스트 #1 (6) • build.xml 파일 수정 • 배포 시에 설정 파일을 같이 배포하도록 수정

  23. 아날로그 입력실습 (10) • ADC 장치테스트 #1 (7) • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정

  24. 아날로그 입력실습 (11) • ADC 장치테스트 #1 (8) • 원격 실행 • 원격 디버깅 • 개선 사항 • SPI 장치 입력에 대해 값 변경에 따른 이벤트가 발생하지 않으므로 주기적으로 값을 읽어 확인하여야 한다. • 이러한 동작은 다른 동작과 비동기적으로 동작하여야 한다.

  25. 아날로그 입력실습 (12) • ADC 장치테스트 #2 (1) • 주기적으로 MCP3208 장치의 채널을 읽는 출력하는 동작을 비동기적으로 수행하도록 수정 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_polling • Main Class Name: jiot05.mcp3208polling.MCP3208Polling • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가

  26. 아날로그 입력실습 (13) • ADC 장치테스트 #2 (2) • MCP3208Polling.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_polling/src/jiot05/mcp3208polling/MCP3208Polling.java

  27. 아날로그 입력실습 (14) • ADC 장치테스트 #2 (3) • 설정 파일 추가 • “lib” 디렉토리 추가 • 장치 레지스트리 파일 및 보안 정책 파일 추가 – 앞 프로젝트와 동일 • build.xml 파일 수정 • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정

  28. 아날로그 입력실습 (15) • ADC 장치테스트 #2 (4) • 원격 실행 • 원격 디버깅

  29. 아날로그 입력실습 (16) • ADC 장치테스트 #3 (1) • SPI 장치 라이브러리 패키지 및 MCP3208 장치 드라이버 구현 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_test • Main Class Name: jiot05.mcp3208test.MCP3208Test • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가

  30. 아날로그 입력실습 (17) • ADC 장치테스트 #3 (2) • jdk.dio.spidev패키지를 이용하여 SPI 장치 드라이브 구현 • “source packages” 내에 “spi_dev” 패키지 생성 • “spi_dev” 패키지 내에 다음의 클래스 파일 생성 • SPIRPi.java – SPI Device wrapper class • SPIUtils.java – SPI Device I/O utility method(static method) 지원 • MCP3208.java – MCP3208 IC의 command enumerator 객체 정의 • 소스: • https://github.com/silla-mclab/jiot2/tree/master/jiot05_MCP3208_test/src/spi_dev

  31. 아날로그 입력실습 (18) • ADC 장치테스트 #3 (3) • SPI 장치 클래스를 이용하여 MCP3208 장치 드라이브 구현 • “source packages” 내에 “spi_dev.drivers” 패키지 생성 • “spi_dev.drivers” 패키지 내에 다음의 클래스 파일 생성 • MCP3208Device.java – MCP3208 IC의 장치 드라이브 클래스 • 소스 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_test/src/spi_dev/drivers/MCP3208Device.java

  32. 아날로그 입력실습 (19) • ADC 장치테스트 #3 (4) • MCP3208Test.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_test/src/jiot05/mcp3208test/MCP3208Test.java

  33. 아날로그 입력실습 (20) • ADC 장치테스트 #3 (5) • 설정 파일 추가 • “lib” 디렉토리 추가 • 장치 레지스트리 파일 및 보안 정책 파일 추가 – 앞 프로젝트와 동일 • build.xml 파일 수정 • 장치 레지스트리 파일에서 SPI 장치 설정을 comment 처리 deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true … #300 = deviceType: spibus.SPIDevice, name:SPI0.0, controllerNumber:0, address:0, csActive:1, wordLength:8, clockFrequency:500000, clockMode:1, bitOrdering:1, predefined:true #301 = deviceType: spibus.SPIDevice, name:SPI0.1, controllerNumber:0, address:1, csActive:1, wordLength:8, clockFrequency:500000, clockMode:1, bitOrdering:1, predefined:true …

  34. 아날로그 입력실습 (21) • ADC 장치테스트 #3 (6) • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정 • 원격 실행 • 원격 디버깅

More Related