원본소스는 아닙니다. 참고로 사용하실 분만 가져가서 수정하셔서 사용해주세요.
온도센서도 함께 되어있는데 분해능을 정확하게 하지않았으며, 소스에서 수정 후 사용바랍니다.
퍼가실때는 필히 댓글 남겨주시기 바랍니다.
#pragma opt- #include#include #include #asm .equ __lcd_port=0x15 ;PORTC #endasm #include char str[30]; int ADC_I; float ADC_F; void CH1(void); void CH2(void); void CH3(void); void CH4(void); void RC_Motor(int angle){ // angle : -90도 ~ +90도 int i; if(angle<-90)angle=-90; if(angle> 90)angle= 90; i=(angle+ 90)*20 +1500; OCR1A=i; //PB5 } void main(void){ DDRB=0xff; TCCR1A=0xAA; // FAST PWM TCCR1B=0x1A; // 8분주=0.5usec OCR1A=3000; // 1500usec=0도 ICR1=47999; // 0.5usec*48000=24000usec=41.67Hz DDRF=0xff; PORTF=0xff; DDRC=0xff; lcd_init(16); while(1){ CH1(); CH2(); CH3(); CH4(); } } void CH1(void){ ADMUX=0; ADCSRA=0xE7; //프리런닝 ADC0 한개만 사용 함 delay_ms(50); ADC_I=ADCW; ADC_F=(float)ADC_I * 5.0/1023.0; lcd_gotoxy(0, 0); sprintf(str,"CDS0 = %4.2f V", ADC_F); lcd_puts(str); delay_ms(50); if(ADC_F < 4.95){ RC_Motor(-100); delay_ms(1000);} }; void CH2(void){ ADMUX=1; ADCSRA=0xE7; //프리런닝 ADC0 한개만 사용 함 delay_ms(50); ADC_I=ADCW; ADC_F=(float)ADC_I * 5.0/1023.0; lcd_gotoxy(0, 1); sprintf(str,"CDS1 = %4.2f V", ADC_F); lcd_puts(str); delay_ms(50); if(ADC_F < 4.95){ RC_Motor(-30); delay_ms(1000); } }; void CH3(void){ ADMUX=2; ADCSRA=0xE7; //프리런닝 ADC0 한개만 사용 함 delay_ms(50); ADC_I=ADCW; ADC_F=(float)ADC_I * 5.0/1023.0; lcd_gotoxy(0, 2); sprintf(str,"CDS2 = %4.2f V", ADC_F); lcd_puts(str); delay_ms(50); if(ADC_F < 4.95){ RC_Motor(30); delay_ms(1000); } }; void CH4(void){ ADMUX=3; ADCSRA=0xE7; //프리런닝 ADC0 한개만 사용 함 delay_ms(50); ADC_I=ADCW; ADC_F=(float)ADC_I * 100/204.8; lcd_gotoxy(0, 3); sprintf(str,"LM35DZ = %4.2f ", ADC_F); lcd_puts(str); delay_ms(50); };