본문 바로가기
Study/Arduino

ADS1115 16BIT ADC MODULE - Non library

by Answer Choi 2018. 6. 11.
반응형

예제소스코드 다운로드



Adafruit의 ADS1015 라이브러리를 이용하여 ADC값을 쉽게 읽어올 수 있었는데


이번에는 Arduino 기본 라이브러리인 Wire만을 가지고 구현하였습니다.


ADS1115 16BIT ADC MODULE


이전 포스팅은 위 링크를 참고하세요.


ADS1115는 4채널의 ADC 컨버터입니다.


그렇다보니 채널별 지정해서 읽어야 하고, Config register도 매번 설정해 줘야합니다.

순서는 이렇습니다.


먼저 Config Register로 설정을 하고, Conversion Register에 채널을 설정하고 읽어옵니다.


Config Register와 Conversion Register를 쓰기위해서는 Write함수를 사용해야 합니다.


I2C는 병렬 통신이므로 주소값을 알아야 합니다.


따라서 Write함수를 사용하기위해 주소를 알려줘야 하는데 


통신을 위해 주소를 알려주는 함수가 beginTransmission()입니다.


그리고 마칠때에는 endTransmission()을 사용합니다.



아두이노 예제를 보면 write()함수 사이에 beginTransmission()과 endTransmission()이 있습니다.


이제 Config Resister를 설정하기위해 ADS1115 datasheet를 살펴봅니다.



Config Resister의 주소는 1h이고, 레지스터 구조는 위와 같습니다.


default값 위주로, 0번채널을 읽는것으로 설정을 해보면


0xC183(0b1100 0001 1000 0011)이 됩니다.


이부분을 코드로 보시면


1
2
3
4
5
Wire.beginTransmission(ads1115);
Wire.write(1);
Wire.write(0xc183>>8);
Wire.write(0xc183&0xff);
Wire.endTransmission(); 
cs


Line 1: ads1115에서 설정한 I2C주소입니다.(저는 ADDR을 VDD와 연결하여 0x49입니다.)


Line 2 : Config Resister를 가르키는 주소값입니다.


Line 3~4 : 0xC183의 상위 8bit와 하위 8bit를 따로 전송합니다.


Line 4 : I2C전송의 끝을 나타냅니다.


Config Resister를 입력하였으니, 이제 Conversion Resister를 입력합니다.


이 Conversion Resister는 변환된 값을 Resister에 저장시킵니다.


코드는 아래와 같습니다.


1
2
3
Wire.beginTransmission(ads1115);
Wire.write(0);
Wire.endTransmission();  
cs


Line 2 : Conversion Resister값을 전송합니다.


이제 값을 읽어올 차례입니다.


읽어올때는 requestFrom()을 사용합니다.



아두이노 예제입니다. 


Wire.request(device 주소, 읽을 바이트수) 입니다.


1
2
3
4
5
6
7
8
9
Wire.requestFrom(ads1115, 2);
int cnt=0;
while(Wire.available()){
  if(cnt==0)
    highbyte=Wire.read();
  else
    lowbyte=Wire.read();
  cnt++;
}
cs


Line 1 : I2C로 2byte를 ads1115의 주소에서 읽어옵니다.


Line 2 : 1byte씩 총 2byte를 읽어 계산하기 위해 바이트 구분을 위해 사용합니다.


Line 4~8 : 첫번째 읽은 바이트는 highbyte에 두번째 읽은 바이트는 lowbyte에 저장합니다.


이렇게 읽어온 값을 계산하여 ADC값과 전압값, 센서의 온도값으로 변환하였습니다.



이전 포스팅과 동일한 결과값이 출력됩니다.^^



반응형

'Study > Arduino' 카테고리의 다른 글

CLCD 글자 만들기  (0) 2018.07.13
SD카드 사용하기  (0) 2018.07.05
ADS1115 16bit ADC Module  (2) 2018.06.08
PIR Sensor(모션감지센서) DFRobot  (0) 2018.05.31
Steam Sensor(스팀센서)  (0) 2018.05.30

인기글