본문 바로가기
프로그래밍/AVR Atmega

NTSF4 써미스터 온도센서

by 완소루피 2017. 10. 19.
728x90
반응형

#include <mega128.h>

#include <delay.h>

#include <stdio.h>

#include <math.h>

 

float ntc_val;

float temperature;

float sensor_adc = 0;

signed int dis_temperature = 0;

void main(void)

{

PORTA=0x00;

DDRA=0xff;

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0xff;

PORTD=0x00;

DDRD=0xff;

 

// ADC 설정

// ADC Voltage Reference: AREF pin

// ADC Auto Trigger Source: ADC Stopped

ACSR=0x80;

SFIOR=0x00;

ADMUX=0x40;

ADCSRA=0x8D;

 

while (1)

{

    //ADC 값 읽어 오기

    ADMUX = 0x40;

    ADCSRA |= 0x40;

    while ((ADCSRA & 0x10)==0);

    sensor_adc = (float)(ADCW);

    // NTC_R(NTC RESISROT VALUE Ohm)

    // ADC 값 읽어 다가 NTC_R 저항값 산출

    // NTC_R /(NTC_R + 10000(분앖저항값 Ohm)) = ADC / 1023(10biT Resolustion)

    // NTC_R 에관해 풀이 하면

    // NTC_R = 10000*ADC / 1023-ADC

    ntc_val = (10000 * sensor_adc) / (1023 - sensor_adc);

    //NTS 시리즈 써미스터 데이터 시트에 온도에 따른 저항 테이블 값을 토대로 함수를 추출

    //(706.6 * ntc_val(NTC_RESISTOR Ohm) ^ -0.1541) ? 146

    // ! 좀더 정밀한 온도값을 원할 경우 테이블 값을 저장해 비교 하는 방식을 사용 하세요.

    temperature = (706.6 * pow(ntc_val,-0.1541)) - 146;

    //온도를 소수점 한자리까지 표현 하기 위해 10을 곱한후 정수형 변환

 

    dis_temperature = (signed int)(temperature);

 

    if(dis_temperature>30)

    PORTC=0x01;

    else if(dis_temperature>20)

    PORTC=0x02;

    else

    PORTC=0x04;

    

}

 



728x90
반응형

'프로그래밍 > AVR Atmega' 카테고리의 다른 글

Atmega 온도센서 및 세그먼트 표시  (0) 2017.10.19
Atemga 세그먼트 출력  (0) 2017.10.19
atmega128 인터럽트  (0) 2017.10.19