==================================Outline====================================
적외선 센서 코딩
----------------------------------------------------------------------------
적외선 센서 코딩
적외선 센서를 동작시키기 위한 코딩을 해보자.
우선 하드웨어 설정을 한 후 데이터 시트를 보고 하나 하나 코딩을 한다.
우선 기본적으로 알아야 할 점들.
- 입력 전압은 3.3V이다. 물체의 표면을 500ms 이내에 정확하게 측정할 수 있다.
- DTS-L300-V2는 온도계산 프로세서를 내장하고 있어 따로 온도 계산이 필요 없다.
- DTS-L300-V2는 디지털 통신으로 온도 값을 출력한다. 때문에 통신의 연결이 필요하다.
- 주변 온도와 대상 온도를 동시에 측정한다.
VCC와 GND를 제외하고 사용하는 핀은 4개이다.
- SCK: 클럭 공급
- SCE: 적외선 센서 활성화
- SDI: 신호를 입력
- SDO: 신호를 출력
이러한 신호들은 SPI통신을 통해 이루어지기 때문에 SPI사용에 대한 숙지를 해야 한다.
SPI에 대한 학습이 되어 있지 않음으로 우선 I/O를 사용하여 코딩에 성공하면 SPI를 사용하여 코딩을 하도록 하자.
우선 데이터 시트에 나와 있는 코드를 주석을 사용하여 해석해보자.
unsigned char buffer_Lo, buffer_Hi, p02; //1byte선언
long CHECK(unsigned char datum) //2byte return 함수
{
unsigned char i= 0;
buffer Lo = 0; //버퍼 비워주기
buffer Hi = 0; //버퍼 비워주기
/*** 적외선 준비 설정 ***/
EN_LOW; //enable low
delay us(10); //10us 딜레이
for(i=0; i<8; ++i)
{
if( ( (0x80 >> i ) & datum) == 0)
{
SDO_LOW; //SDO = 0;
}
else
{
SDO_HIGH; //SDO = 1;
}
}
SDO_LOW; //SDO = 0;
delay_ms(10); //10ms 딜레이
/*** 하위 바이트 읽기 ***/
for(i=0; i<8; I++)
{
buffer_Lo = buffer_Lo << 1; //하위 버퍼 좌로 한비트 밀기
SCK_LOW; //SCK = 0;
delay_us(1); //1us 딜레이
SCK_HIGH; //SCK = 1;
dealy_us(1); //1us 딜레이
p02 = FP02 //포트의 상태 읽기
if(p02 == 1)
{
buffer_Lo = buffer_Lo|0x01;}
}
else
{
buffer_Lo = buffer_Lo&0xFE;
}
}
SDO_LOW; //SDO = 0;
delay_ms(10); //10ms 딜레이
/*** 상위 바이트 읽기 ***/
for(i=0; i<8; i++)
{
buffer_Hi = buffer_Hi << 1; //상위 버퍼 좌로 한비트 밀기
SCK_LOW; //SCK = 0;
delay_us(1); //1us 딜레이
SCK_HIGH; //SCK = 1;
dealy_us(1); //1us 딜레이
p02 = FP02 //포트의 상태를 변수에 담아서 판단
if(p02 == 1)
{
buffer_Hi = buffer_Hi|0x01;}
}
else
{
buffer_Lo = buffer_Lo&0xFE;
}
}
EN_HIGH; //enable = 1;
return (buffer_Hi*256 + buffer_Lo);
}
void main(void)
{
while(1)
{
Target_Value = CHECK(0xa0); // 대상 온도
delay_ms(50);
Ambient_Value = CHECK(0xa0); // 주변 온도
delay_ms(500);
//LCD에 값 출력 코드 넣기
}
}
대충 감이 잡히면 코딩을 해보도록 하자. 순서는 아래와 같다.
1. 각 핀의 포트설정
DDRJ = 0x07; //0~2번핀 출력, 3번핀 입력
2. 입력 값에 대한 high, low 값 정의
#define SCE_LOW PORTJ=PORTJ&(~0x01)
#define SCE_HIGH PORTJ=PORTJ|0x01
#define SCK_LOW PORTJ=PORTJ&(~0x02)
#define SCK_HIGH PORTJ=PORTJ|0x02
#define SDO_LOW PORTJ=PORTJ&(~0x08)
#define SDO_HIGH PORTJ=PORTJ|0x08
3. SPI 함수 해석하여 작성
int SPI(unsigned char uiMode)
{
unsigned char ucCnt;
ucBuf_Low = ucBuf_High = 0;
SCE_LOW; //enable low
(진행 중)
}
4. main에서 적외선 센서 감지 값을 LCD에서 출력하도록 설정
5. main에서 적외선 센서 감지 값을 LCD로 출력
#include <avr/io.h> |
'Busan IT > 센서 제어' 카테고리의 다른 글
서머 커플러, 적외선 센서 (0) | 2015.09.24 |
---|---|
자동차 후진 경고 센서 (0) | 2015.09.14 |
온도계 섭씨 화씨 변경, 초음파의 특성 (0) | 2015.09.10 |
C#을 활용한 NTC 온도 센서 (0) | 2015.09.04 |
NTC 온도계 저항값 변환 (0) | 2015.09.04 |