ايران ويج

نسخه‌ی کامل: مشکل رطوبت سنج
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
دوستان من با یه سنسور رطوبت سنج یه مدار درست کردم.
با دو تا ترانزیستور تقویتش کردم و وقتی رطوبت زیاد میشه ، نور یه ال ای دی افزایش پیدا می کنه.
حالا تونستم یه کاریش کنم که به ورودی صفر ADC مگا هشت وصلش کنم و میکرو با افزایش رطوبت 5 تا ال ای ادی رو روشن می کنه(وقتی رطوبت کمه یه ال ای دی و وقتی زیاد میشه ، دو و سه و چهار و در نهایت 5 تا ال ای دی روشن میشه)
حالا یه کاریش کردم که 10 تا ال ای دی را روشن کنه . ولی ال ای دی ها هی روشن خاموش می شه. و اصلا نظمی نداره(مشکل نویزه؟)
اینم کد برنامه میکرو:
کد php:
#include <mega8.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA 0x10)==0);
ADCSRA|=0x10;
return 
ADCH;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
float volt ;
// Input/Output Ports initialization


// Port D initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0;
DDRD=0xFF;
DDRB=(1<<DDB7)|(1<<DDB6);
PORTB=0;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE 0xff;
ADCSRA=0x83;
while (
1)
      {
     
volt=read_adc(0);
     
volt=volt*5/256;
          if(
volt<=0.1)               { PORTD=0;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=0.5 && volt >0.1)  { PORTD=0b1;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=&& volt >0.5)    { PORTD=0b11;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=1.5 && volt >1)    { PORTD=0b111;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=&& volt >1.5)    { PORTD=0b1111;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=2.5 && volt >2)    { PORTD=0b11111;PORTB.6=0;PORTB.7=0;}
     else if(
volt<=&& volt >2.5)    { PORTD=0b11111;PORTB.6=1;PORTB.7=0;}
     else if(
volt<=3.5 && volt >3)    { PORTD=0b11111;PORTB.6=1;PORTB.7=1;}
     else if(
volt<=&& volt >3.5)    { PORTD=0b111111;PORTB.6=1;PORTB.7=1;}
     else if(
volt<=4.5 && volt >4)    { PORTD=0b1111111;PORTB.6=1;PORTB.7=1;}
     else if(
volt >4.5)               { PORTD=0b11111111;PORTB.6=1;PORTB.7=1;} 
     
delay_ms(10);
      }

چرا ال ای دی ها هی روشن خاموش میشه؟؟؟؟؟
چرا برای 5 تا ال ای دی مشکلی نبود؟
توضیح : در مدار با 5 تا LED ، کاری کرده بودم که با افزایش هر یک ولت در ADC ، یه LED روشن بشه و در این پروژه با 10 تا LED به ازای افزایش هر 0.5 ولت یه LED روشن میشه .
ولی پروژه دومی اصلا خوب جواب نمی ده و LED ها هی روشن خاموش میشه.
اینم شکل مدار:
(جالبه که توی پروتئوس با 10 تا led راحت کار می کنه)
[attachment=10223]