BASIC4MCU | 질문게시판 | 답변 : atmega128 온도센서 선풍기 질문이요!!!!!!!!!!!
페이지 정보
작성자 master 작성일2018-12-06 16:49 조회5,409회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6451
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-06 오후 4:55:04// by Ok-Hyun Parkatmega128과 avr 트레이닝 키트를 이용해서온도에 따라(25도를 기준으로)자동으로 선풍기(쿨링팬)가 꺼지고 켜지고 하도록 하고,온도센서를 이용하여 온도가 7-segment에 표시 되도록 만드려고 합니다.코드를 짜봤는데 온도가 7-segment에 표시되지 않고,선풍기가 조건에 상관없이 돌아가기만 합니다.코드 보고 무엇이 문제인지 수정좀 해주세요..//#include <avr/io.h>#include <util/delay.h>//#define PERIOD 50#define DUTY_PERCENT 100#define PERIOD_1SEC(1000000L/(PERIOD*DUTY_PERCENT))//#define X0 0#define X1 1#define X2 2#define X3 3#define X4 4#define X5 5#define X6 6#define X7 7//unsigned int ADC_Temp=0;unsigned int ADC_average=0;int ADC_Temperature=250;//struct NTC{ int temp; unsigned long res; };//const struct NTC NTC10K[]={{-50,10240000},{-40,5120000},{-30,110881},{-25,86603},{-20,67683},{-19,64519},{-18,61519},{-17,58675},{-16,55976},{-15,53416},{-14,50986},{-13,48679},{-12,46488},{-11,44407},{-10,42431},{-9,40552},{-8,38766},{-7,37068},{-6,35454},{-5,33918},{-4,32456},{-3,31065},{-2,29741},{-1,28480},{ 0,27280},{ 1,26135},{ 2,25045},{ 3,24006},{ 4,23016},{ 5,22071},{ 6,21170},{ 7,20311},{ 8,19490},{ 9,18708},{ 10,17960},{ 11,17247},{ 12,16565},{ 13,15914},{ 14,15291},{ 15,14697},{ 16,14128},{ 17,13584},{ 18,13064},{ 19,12567},{ 20,12091},{ 21,11636},{ 22,11200},{ 23,10782},{ 24,10382},{ 25,10000},{ 26,9633},{ 27,9281},{ 28,8944},{ 29,8621},{ 30,8312},{ 31,8015},{ 32,7730},{ 33,7456},{ 34,77194},{ 35,6942},{ 36,6701},{ 37,6468},{ 38,6246},{ 39,6032},{ 40,5826},{ 41,5628},{ 42,5438},{ 43,5256},{ 44,5080},{ 45,4911},{ 46,4749},{ 47,4593},{ 48,4443},{ 49,4298},{ 50,4159},{ 51,4025},{ 52,3896},{ 53,3771},{ 54,3652},{ 55,3536},{ 56,3425},{ 57,3318},{ 58,3215},{ 59,3115},{ 60,3019},{ 61,2917},{ 62,2838},{ 63,2752},{ 64,2669},{ 65,2588},{ 66,2511},{ 67,2436},{ 68,2364},{ 69,2295},{ 70,2227},{ 71,2162},{ 72,2100},{ 73,2039},{ 74,1980},{ 75,1924},{ 76,1869},{ 77,1816},{ 78,1765},{ 79,1715},{ 80,1668},{ 81,1621},{ 82,1576},{ 83,1533},{ 84,1491},{ 85,1451},{ 86,1411},{ 87,1373},{ 88,1336},{ 89,1301},{ 90,1266},{ 91,1232},{ 92,1200},{ 93,1168},{ 94,1138},{ 95,1108},{ 96,1080},{ 97,1052},{ 98,1025},{ 99,999},{ 100,974},{ 110,758},{ 120,597},{ 130,475}};//unsigned char FND_Buffer[8];//unsigned char FND_Font[]={0B11111100,0B01100000,0B11011010,0B11110010,0B01100110,0B10110110,0B10111110,0B11100100,0B11111110,0B11110110};//------------------------------------------void FND_Display(void){unsigned char i;for(i=0; i<8; i++){ PORTE=~(1<<i); PORTB=FND_Buffer[i]; _delay_us(100); }}//void ADC_Read(unsigned char chn){ADMUX=(ADMUX&0B11100000)|chn;ADCSRA|=(1<<ADSC); while((ADCSRA&0X10)==0);ADC_Temp=(int)ADCL+((int)ADCH<<8);}//unsigned int ADC_10Read(unsigned char chn){unsigned int cnt=0,average=0;for(cnt=0; cnt<10; cnt++){ ADC_Read(chn); average+=ADC_Temp; }average/=10;return average;}//int ADC_CalTemp(unsigned long ADC_Value){static int dis_temp;unsigned char i;long res,res_div,dif_temp;if(ADC_Value<=50)ADC_Value=50;else if(ADC_Value>1022)ADC_Value=1023;res=(10000*ADC_Value)/(1024-ADC_Value);for(i=1; i<(sizeof(NTC10K)/ sizeof(struct NTC)); i++){if(NTC10K[i].res<res){res_div=(NTC10K[i-1].res-NTC10K[i].res)/ 10;dif_temp=(NTC10K[i-1].res-res)/ res_div;dis_temp=(NTC10K[i-1].temp)*10+dif_temp;return dis_temp;}else if(NTC10K[i].res==res){dis_temp=(NTC10K[i].temp)*10;return dis_temp;}}return dis_temp;}//int main(void){unsigned char fan=0;DDRF=0B11111110;DDRE=0B11111111;DDRB=0B11111111;DDRA=0B11111111;ADMUX=(0<<REFS1)|(1<<REFS0);ADCSR=(1<<ADEN);ADCSR|=0x01;while(1){ADC_average=ADC_10Read(0);PORTA=~(ADC_average>>8);PORTC=~(ADC_average&0xFF);ADC_Temperature=ADC_CalTemp(ADC_average);//if(ADC_Temperature>=270){ fan=(0<<X5)|(1<<X4); fan|=(1<<X6); PORTA=fan; } // 25도else { fan&=~(1<<X6); PORTA=fan; }//if(ADC_Temperature<0){ ADC_Temperature=-ADC_Temperature; FND_Buffer[0]=0x02; }else { FND_Buffer[0]=0x00; }//FND_Buffer[1]=FND_Font[(ADC_Temperature%1000)/100];FND_Buffer[2]=FND_Font[(ADC_Temperature%100)/10]|1;FND_Buffer[3]=FND_Font[(ADC_Temperature%10)/1];FND_Display();}return 1;}
댓글 2
조회수 5,409으엉엉님의 댓글
으엉엉 작성일
정말 감사합니다!! 이제 온도가 표시되긴 하는데
팬이 돌아가는 조건 온도를 1도로 설정해놓아도 팬이 안돌아가네요ㅜㅜ 이건 뭐가 문제일까요???
master님의 댓글
master 작성일팬 구동회로도 첨부해보세요