본문 바로가기
코스웨어/16년 스마트컨트롤러

20160324_김도관_업무일지_시리얼통신4_저항및온도측정,PWM

by 알 수 없는 사용자 2016. 4. 3.
728x90
반응형

ADC 저항과 써미스터로 온도 측정



써미스터 : 

서미스터(thermistor)란 저항기의 일종으로, 온도에 따라 물질의 저항이 변화하는 성질을 이용한 전기적 장치이다. 열가변저항기라고도 하며, 주로 회로의 전류가 일정 이상으로 오르는 것을 방지하거나, 회로의 온도를 감지하는 센서로써 이용된다.




adc.c


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "adc.h"
 
void adc_Init(void)
{
    ADMUX  = (0 << REFS1)|(0 <<  REFS0)|(1 <<  ADLAR)|(0 <<  MUX4)|(0 <<  MUX3)|(0 <<  MUX2)|(0 <<  MUX1)|(0 <<  MUX0); //adlar 1 left 
    ADCSRA = (1 << ADEN )|(0 <<  ADSC) |(0 <<  ADATE)|(0 <<  ADIF)|(0 <<  ADIE)|(1 << ADPS2)|(1 << ADPS1)|(0 << ADPS0);
    ADCSRB = (0 << ACME )|(0 <<  MUX5) |(0 <<  ADTS2)|(0 << ADTS1)|(0 << ADTS0); // 설정 없음
    return;
}
 
unsigned int adc_Run0(void)
{
    //adc_Init();
    ADCSRA = ADCSRA |(1 <<  ADSC); // high
    while0 != (ADCSRA &(1 <<  ADSC))); //중지되면 data 출력
    
    return ADCH; //high 만 리
}
cs


4번 ADMUX 기존과 달리 ADLAR을 1로 바꿈 (왼쪽 정렬)


main.c 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "main.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
 
int main(void)
{
    
    unsigned char ucData;
    char caVal[] = "0000";
    unsigned int uiVal;
        
    LCD_Init(); //
    usart0_Init();
    adc_Init();
    sei();
      
    usart0_Str("AVR ON");
    while(1)
    {
        uiVal = adc_Run0();
        caVal[0= '0' + (uiVal/1000);
        caVal[1= '0' + (uiVal%1000)/100;
        caVal[2= '0' + (uiVal%1000)%100/10;
        caVal[3= '0' + (uiVal%1000)%100%10// uival%10
 
        LCD_Str(caVal);
        usart0_Str(caVal);
        LCD_Inst(LCD_HOME);
    }
    return 0;
}
 
cs

29번 : LCD_Inst(LCD_HOME); 여러번 찍히는거 반복 막음





PWM

PWM은 프로세서의 디지털 출력으로 아날로그 회로를 제어하는 강력한 기법이다. PWM은 계측과 통신에서 전력제어와 전력 변환에 이르기까지 광범위한 영역에서 사용되고 있다.






728x90