350 likes | 395 Views
임베디드 프로그래밍. Lecture # 05 2018. 11. 06. 목 차. 아날로그 입 출 력 테스트 I2C 통신 테스트 SPI 통신 테스트. 동기식 직렬 통신 (1). 라즈베리파이의 동기식 직렬 통신. ADC. Sensors. RaspberryPi. I2C / SPI. Actuator. DAC. 동기식 직렬 통신 (2). I2C(Inter-IC) 직렬 통신 단방향 동기식 직렬 통신. 동기식 직렬 통신 (3).
E N D
임베디드 프로그래밍 Lecture #05 2018. 11. 06
목 차 • 아날로그 입출력 테스트 • I2C 통신 테스트 • SPI 통신 테스트
동기식 직렬 통신 (1) • 라즈베리파이의동기식 직렬 통신 ADC Sensors RaspberryPi I2C / SPI Actuator DAC
동기식 직렬 통신(2) • I2C(Inter-IC) 직렬 통신 • 단방향 동기식 직렬 통신
동기식 직렬 통신(3) • SPI(Serial Peripheral Interface) 직렬 통신 (1) • 양방향 동기식 직렬 통신
동기식 직렬 통신(4) • SPI(Serial Peripheral Interface) 직렬 통신 (2)
아날로그 입력 (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
아날로그 입력 (2) • ADC 장치: MCP3802 핀 설명
아날로그 입력 (3) • ADC 장치: MCP3802 동작 구조도 및 신호 타이밍
아날로그 입력 (4) • ADC 장치: MCP3802 제어 비트 • 4 비트 제어 비트 • 상위 비트(Single/Diff)- 출력 타입 결정 • 하위 3비트 – 출력값 결정
아날로그 입력 (5) • ADC 장치: MCP3802와 MCU 통신
아날로그 입력 (6) • ADC 장치: MCP3802 연결도 • 실습 키트에서는 MCP3208 장치를 CE1에 연결
아날로그 입력 (7) • ADC 장치: MCP3802 연결 • 라즈베리파이에서의SPI 장치 사용 여부 확인 • 장치 파일 생성 여부 확인 # > ls /dev/spi* /dev/spidev0.0 /dev/spidev0.1 • 장치 드라이브 로딩 여부 확인 # > lsmod : spi_bcm2708 : MCP3802 장치 파일
아날로그 입력실습 (1) • 아날로그 입력 실습 • 실습 키트에서 가변 저항과 조도센서의 값을 읽어 출력한다. • 가변 저항과 조도 센서를 각각 MCP3208의 채널 0과 1에 연결 • MCP3208의 채널 0과 1의 값을 주기적으로 읽어 출력
아날로그 입력실습 (2) • 조도 센서 회로
아날로그 입력실습 (3) • 장치 연결
아날로그 입력실습 (4) • ADC 장치테스트 #1 (1) • 주기적으로 MCP3208 장치의 채널 0과 1을 읽어 출력 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_input • Main Class Name: jiot05.mcp3208input.MCP3208Input • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가
아날로그 입력실습 (5) • ADC 장치테스트 #1 (2) • MCP3208Input.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_input/src/jiot05/mcp3208input/MCP3208Input.java
아날로그 입력실습 (6) • ADC 장치테스트 #1 (3) • 설정 파일 추가 • “lib” 디렉토리 추가 • 장치 레지스트리 파일 및 보안 정책 파일 추가 • build.xml 파일 수정
아날로그 입력실습 (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 …
아날로그 입력실습 (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 "*:*"; };
아날로그 입력실습 (9) • ADC 장치테스트 #1 (6) • build.xml 파일 수정 • 배포 시에 설정 파일을 같이 배포하도록 수정
아날로그 입력실습 (10) • ADC 장치테스트 #1 (7) • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정
아날로그 입력실습 (11) • ADC 장치테스트 #1 (8) • 원격 실행 • 원격 디버깅 • 개선 사항 • SPI 장치 입력에 대해 값 변경에 따른 이벤트가 발생하지 않으므로 주기적으로 값을 읽어 확인하여야 한다. • 이러한 동작은 다른 동작과 비동기적으로 동작하여야 한다.
아날로그 입력실습 (12) • ADC 장치테스트 #2 (1) • 주기적으로 MCP3208 장치의 채널을 읽는 출력하는 동작을 비동기적으로 수행하도록 수정 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_polling • Main Class Name: jiot05.mcp3208polling.MCP3208Polling • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가
아날로그 입력실습 (13) • ADC 장치테스트 #2 (2) • MCP3208Polling.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_polling/src/jiot05/mcp3208polling/MCP3208Polling.java
아날로그 입력실습 (14) • ADC 장치테스트 #2 (3) • 설정 파일 추가 • “lib” 디렉토리 추가 • 장치 레지스트리 파일 및 보안 정책 파일 추가 – 앞 프로젝트와 동일 • build.xml 파일 수정 • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정
아날로그 입력실습 (15) • ADC 장치테스트 #2 (4) • 원격 실행 • 원격 디버깅
아날로그 입력실습 (16) • ADC 장치테스트 #3 (1) • SPI 장치 라이브러리 패키지 및 MCP3208 장치 드라이버 구현 • NetBeans IDE에서 새로운 프로젝트 생성 • 프로젝트명: jiot05_MCP3208_test • Main Class Name: jiot05.mcp3208test.MCP3208Test • 프로젝트 속성 설정에서 라이브러리 추가 • dio.jar 라이브러리 추가
아날로그 입력실습 (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
아날로그 입력실습 (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
아날로그 입력실습 (19) • ADC 장치테스트 #3 (4) • MCP3208Test.java 코드 작성 • https://github.com/silla-mclab/jiot2/blob/master/jiot05_MCP3208_test/src/jiot05/mcp3208test/MCP3208Test.java
아날로그 입력실습 (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 …
아날로그 입력실습 (21) • ADC 장치테스트 #3 (6) • 프로젝트 속성 설정 수정 • Sources / Run 속성 수정 • 원격 실행 • 원격 디버깅