통신 > DTM300 온도센서 - 128 외부인터럽트와 GPIO - 하이퍼터미널

TODAY688 TOTAL3,245,098
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 통신 | SPI통신 | DTM300 온도센서 - 128 외부인터럽트와 GPIO - 하이퍼터미널

페이지 정보

작성자 키트 작성일2017-09-01 10:28 조회1,793회 댓글0건

본문

//DTM 300 온도센서
//
//pin1 = vcc, supply
//pin2 = INT,  Output => PD0       //128 입력, 외부 인터럽트0
//pin3 = sck   Output => PB1  sck  //128 입력
//pin4 = SI     input => PB3  MISO //128 출력
//pin5 = SO    Output => PB2  MOSI //128 입력
//pin6 = GND  Ground
//
//
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
//
#define DTM300_INT PIND.0  //128 입력
//
#define DTM300_SCK PINB.1  //128 입력
#define DTM300_SO  PINB.2  //128 입력
#define DTM300_SI  PORTB.3 //128 출력
// 
bit DTM300_flag=0;
unsigned int  Object_temp=0, Ambient_temp=0;
//
void TX0_CH(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; }  // 송신함수
//
interrupt [EXT_INT0] void ext_int0_isr(void){ // 외부인터럽트0
    unsigned char temp[5], i;
    for(i=0;i<5;i++)temp[i]=0; // 버퍼 크리어
    //
    for(i=0;i<40;i++){
        while(DTM300_SCK);               // 0 이 될 때까지 대기
        while(DTM300_SCK==0);            // 1 이 될 때까지 대기
        if(DTM300_SO)temp[i/8]=1<<(i%8); // data 저장, first LSB
        //
        if(DTM300_INT)return;            // 비정상 상태 종료
    }
    //
    if(temp[0]==0xA1){
        Object_temp =(temp[1]*256)+temp[2]; 
        Ambient_temp=(temp[3]*256)+temp[4]; 
        DTM300_flag=1;
    }
}
//
void main(void){
    int i;
    char str[50];

    UCSR0B=8; UBRR0H=0; UBRR0L=103; // 9600, USART0
    EICRA=0xaa; EIMSK=1;            // falling edge, int0
    #asm("sei")
    while(1){ 
        if(DTM300_flag){ DTM300_flag=0;
            sprintf(str,"Object Temp=%d Ambient Temp=%d\r\n", Object_temp, Ambient_temp);
            i=0; while(str[i])TX0_CH(str[i++]);  // USART0 전송
        }
    }
}
// 

데이터시트 잠깐 보고 만든거라서 동작 확인은 안된겁니다.

센서가 없어서 확인 못 했습니다.

돌려보신분은 아래 댓글로 동작 여부를 적어 주세요

 

약 3ms 정도 걸립니다.

동작 중에 다른 인터럽트의 방해를 받으면 데이터 손실이 발생 하게 됩니다.

인터럽트를 막아서 받으면 온도 값을 제대로 받지만

3ms 사이에 발생 하는 다른 인터럽트를 받지 못하게 됩니다.

3ms가 문제가 되면 SPI로 받아야 합니다.

댓글 0

조회수 1,793

등록된 댓글이 없습니다.

통신HOME > 통신 > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기