SHT11 온도/습도 센서 실습
<사진 1. SHT11>
<PORTD의 0,1번 Pin과 연결되어 있다>
타이밍도
1. 전송 시작 시퀀스 write (M->S)
위처럼 타이밍 도에 맞게 코드를 작성하면 된다. Zigbex 는 DK128과 다르게 같은 포트라도 PIN마다 역할이 다르기 때문에
포트 전체를 제어하기보다 해당 PIN만 제어해야 한다.
2. 온도/습도 측정 명령 write (M->S)
마찬가지로 타이밍 도에 맞게 그려주면 된다
데이터를 보낼 때, 8bit의 값을 보낸다 하면 한번에 0b0000000으로 보내는 것이 아니다.
라인이 하나 뿐이기 때문에 1bit의 자료를 8번 보내야 한다
1. 0일 때는 DATA가 LOW에서 클락을 보내고
1일 때는 DATA가 HIGH에서 클락을 보낸다.
2. 8번 클락을 보낸 후, DATA의 출력방향을 입력으로 하고, ack(acknowledge) 클락을 한 번 보낸다
: 8번째의 클락이 LOW가 되고 DATA의 방향을 입력으로 바꿔주면 DATA는 LOW의 신호를 보내고
우리가 ack클락을 발생시켜 클락이 low가 될 때 DATA는 HIGH가 되어 측정을 시작한다.
3. 측정 데이터 read (M<-S)
데이터 측정을 위해서는 위의 그림에서처럼 측정시간을 기다려야한다
측정이 끝나게 되면 DATA는 HIGH에서 LOW로 변하게 된다
측정이 끝나면 DATA는 LOW가 되고, 측정을 하면 된다.
온도 : 14bit
습도 : 12bit
위의 그림에서는 DATA의 값을 SCK클락을 발생시켜 값을 읽는다
SCK가 HIGH일 때, PIND에서 DATA PIN의 값을 읽고, SCK를 LOW로 내려준다.
이것을 8번(8bit의 값을 받는 것)한 후에 ack클락을 M->S로 보내준다(DATA는 LOW로 출력되어야 한다)
하위 8bit를 알게 되면 DATA를 HIGH로 출력하는 상태에서 ack를 발생한다
그 후 이 값을 받은 변수 temp( 또는 humi)<<8을 하여
그 값에 하위 8bit의 값을 더하면 되는 것이다.
temp = ReadByte(ACK);
temp=temp<<8;
temp |= ReadByte(noACK);
4. 연결리셋 시퀀스 Write (M->S)
송수신 도중 에러발생 시 리셋하여 다시 측정한다
DATA는 HIGH로 출력될 때, SCK를 9번 이상 발생시키면 리셋이 된다
측정 데이터 컨버팅
온도 값 변환 - 14비트 분해능 사용
습도 값 변환 - 12비트 분해능 사용
습도는 온도에 영향을 받기 때문에 온도도 고려하여 다음 식을 따라야한다
dbtemp = (-39.66)+((0.01)*temp);//온도
dbhumi = (-4)+(0.0405*humi)+((-2.8)*0.000001*humi*humi);//습도
dbhumi = (dbtemp-25)*(0.01+(0.00008*humi))+dbhumi; //온도를 고려하여 계산
측정 결과
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[BSP]업무일지-박동수-20100811 (0) | 2010.08.11 |
---|---|
[BSP]업무일지-강혜정-20100810 (1) | 2010.08.10 |
[BSP]업무일지 - 송동규 -20100809 (0) | 2010.08.09 |
[BSP]업무일지 - 서동준 -20100806 (1) | 2010.08.08 |
[BSP]업무일지 - 김병찬 -20100804 (0) | 2010.08.04 |
[BSP]2010 08/03 업무일지- 이도헌 (0) | 2010.08.03 |
[BSP]업무 일지 정홍환 0802 (0) | 2010.08.02 |
[BSP]업무일지 - 임종현 -20100730 (0) | 2010.08.02 |