임베디드 프로그래밍 Lecture #04 2017. 10. 16
목 차 I2C 통신 테스트 TMP102 디지털 온도 센서 인터페이스
동기식 직렬 통신 (1) 라즈베리파이 동기식 직렬 통신 ADC Sensors RaspberryPi I2C / SPI Actuator ADC I2C / SPI DAC
동기식 직렬 통신 (2) I2C 직렬 통신
동기식 직렬 통신 (3) SPI 직렬 통신
TMP102 디지털 온도 센서 (1) TMP102 Breakout Board TMP102 IC Low-power digital temperature sensor SMBus™/Two-Wire(I2C) Serial Interface 12-bit ADC Resolution - 0.0625 ℃/count Accuracy: 0.5°C (–25°C to +85°C) Low Quiescent Current: 10mA Active (max) / 1mA Shutdown (max) Voltage Supply Range: 1.4V to 3.6V
TMP102 디지털 온도 센서 (2) TMP102 Breakout Board TMP102 IC
TMP102 디지털 온도 센서 (3) TMP102 Breakout Board TMP102 IC cf) (1) Pointer register : 8 bits (2) Other registers : 16 bits, Little-endian order
TMP102 디지털 온도 센서 (4) TMP102 Breakout Board TMP102 Temperature Register Normal Mode Config. Reg. EM bit = 0 12-bit resolution Extended Mode Config. Reg. EM bit = 1 13-bit resolution
TMP102 디지털 온도 센서 (5) TMP102 Breakout Board TMP102 Temperature Register – data format
TMP102 디지털 온도 센서 (6) TMP102 Breakout Board TMP102 Temperature Register – data format
TMP102 디지털 온도 센서 (7) TMP102 Breakout Board TMP102 High/Low Limit Register Alert 동작의 경계 온도 설정
TMP102 디지털 온도 센서 (8) TMP102 Breakout Board TMP102 Configuration Register (1) Conversion Rate(CR) - Sampling speed (2) Extended Mode(EM) - Sampling resolution(12/13 bits) 선택
TMP102 디지털 온도 센서 (9) TMP102 Breakout Board TMP102 Configuration Register (3) Alert(AL) – read only (4) Polarity(POL) (5) Termostat Mode(TM) TM = 0 TM = 1
TMP102 디지털 온도 센서 (10) TMP102 Breakout Board TMP102 Configuration Register (6) Fault Queue(F1/F0) A fault condition exists when the measured temperature exceeds the user-defined limits set in the THIGH and TLOW registers. The number of fault conditions required to generate an alert may be programmed using the fault queue. The fault queue is provided to prevent a false alert as a result of environmental noise.
TMP102 디지털 온도 센서 (11) TMP102 Breakout Board TMP102 Configuration Register (7) Shutdown Mode(SM) (8) One-Shot/Conversion-Ready(OS) (9) Conversion Rate(R1/R0=‘11’)
TMP102 디지털 온도 센서 (12) TMP102 Breakout Board TMP102 Addressing : ADD0 pin
TMP102 디지털 온도 센서 (13) TMP102 Breakout Board https://www.sparkfun.com/products/13314 http://www.devicemart.co.kr/1342030
TMP102 디지털 온도 센서 (14) TMP102 Breakout Board : JK전자 ADD0을 Vcc에 연결 => 0x49
TMP102 디지털 온도 센서 (15) TMP102 Breakout Board : 라즈베리파이와의 연결 RaspberryPi TMP102 BB pin1(3.3V) Vcc pin39(GND) GND pin3(SDA) SDA pin4(SCL) SCL ADD0 pin11(GPIO17) Alert
TMP102 디지털 온도 센서 (16) TMP102 Breakout Board : I2C 주소 확인 # sudo i2cdetect –y 1
TMP102 디지털 온도 센서 (17) TMP102 Breakout Board : I2C 입출력 테스트 # sudo i2cget –y 1 0x49 0x00 w // read current temperature # sudo i2cget –y 1 0x49 0x01 w // read config. register # sudo i2cget –y 1 0x49 0x02 w // read low limit temperature register # sudo i2cget –y 1 0x49 0x03 w // read high limit temperature register # sudo i2cset –y 1 0x49 0x01 0xb060 w // set config. Register to enable EM mode
TMP102 BB 테스트 (1) 테스트 프로젝트 생성 NetBeans IDE를 이용한 테스트 프로그램 작성 및 테스트 프로젝트명: TMP102_Test 프로젝트 속성 설정에서 라이브러리 추가 lib 디렉토리 생성 dio.jar 파일을 lib 디렉토리로 복사 프로젝트 속성에서 dio.jar 라이브러리 추가
TMP102 BB 테스트 (2) I2C 인터페이스 패키지 복사 PCF8591BB_Test 프로젝트로 부터 I2C 인터페이스 패키지를 “source packages” 내로 복사 i2c_dev package I2c_dev.drivers package
TMP102 BB 테스트 (3) I2C 인터페이스 패키지 확장 (1) i2c_dev.I2CUtils 클래스에 short 타입 데이터 출력 메소드 추가 public static void writeShort(I2CDevice device, byte cmd, int value) { ByteBuffer txBuf = ByteBuffer.allocateDirect(3); txBuf.put(0, cmd); txBuf.put(1, (byte)((value >> 8) & 0x00FF)); txBuf.put(2, (byte)(value & 0x00FF)); try { device.write(txBuf); } catch (IOException ex) { System.out.println("WARNING: " + ex.getMessage()); }
TMP102 BB 테스트 (4) I2C 인터페이스 패키지 확장 (2) i2c_dev.TMP102 Enumeration 클래스 추가
TMP102 BB 테스트 (5) I2C 인터페이스 패키지 확장 (3) i2c_dev.drivers.TMP102Device 클래스 추가
TMP102 BB 테스트 (6) 장치 테스트 클래스 작성 tmp102_test.TMP102_Test 클래스 구현
TMP102 BB 테스트 (7) 설정 파일 추가 및 수정 “lib” 디렉토리에 장치 레지스트리 파일 및 보안 정책 파일 추가 build.xml 파일 수정
TMP102 BB 테스트 (8) 설정 파일 – 장치 레지스트리 파일 # 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 4 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true 5 = deviceType: gpio.GPIOPin, pinNumber:22, name:GPIO22, predefined:true 6 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, mode:2, direction:0, predefined:true 7 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, mode:2, direction:0, predefined:true 8 = deviceType: gpio.GPIOPin, pinNumber:25, name:GPIO25, mode:4, direction:1, predefined:true 9 = deviceType: gpio.GPIOPin, pinNumber:27, name:GPIO27, predefined:true 100 = deviceType: uart.UART, controllerName:ttyAMA0, name:ttyAMA0, baudRate:19200, dataBits:8, parity:0, stopBits:1, flowControl:0, 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 gpio.GPIOPin = initValue:0, controllerNumber:0, direction:0, mode:2, trigger:1, predefined:true uart.UART = baudRate:19200, parity:0, dataBits:8, stopBits:1, flowControl:0, predefined:true
TMP102 BB 테스트 (9) 설정 파일 – 보안 정책 파일 // 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 "*:*"; };
TMP102 BB 테스트 (10) build.xml 파일 수정
TMP102 BB 테스트 (11) 프로젝트 속성 설정 수정 Sources / Run 속성 수정
TMP102 BB 테스트 (12) 원격 실행 원격 디버깅