السلام عليكم
ياشباب ايش هي مشكله عدم استقرار حساس الحراره LM35 فهو يعطي قراءات عشوائيه من صفر الى 17 وبسرعه ولما قررت اعمله تغذيه مستقله لا يريد ان يعمل وهذا هو الامر الغريب واذا لمست الارضي للمصدر المستقل على الارضي للداره يشتغل بس بيخريط
لماذا لا يعمل الحساس فى حاله توصيله بمصدر جهد مستقل عن الدائره مع اني قست الخرج فوجدته انه يقرا ولكن المايكرو لا يعرض النتائج
والمحاوله الاخري هي اني لما اوصل(LM35) مع الدائره قبل المتكامله 7805 (الفولت الداخل ) يبقي يقرا عشوائي ولما اوصله مع الجهد الخارج المنظم يبقى يقرا بس فى رقمين مره يقرا 17 ويثبت شويه ومره يقرا 16 ولا يتاثر بالحراره ابداا مع اني مركب 100N مكثف مئه نانو بين طرفي الخرج والارضي تاره ومره بين الارضي والموجب تاره ولكن لا فائده
كما ان مصدر الجهد عندي منعم بالمكثفات (50فولت 10 UF)
هل من حل ياشباب .....وبارك الله فيكم
وهذا هو كود الميكرو سي مأخوذ من (موضوع لمشروع الاول التحكم بدرجة الحرارة باستخدام pic16f877A ولغة البرمجة مايكرو سي الإلكترونية)
كود:
int temp_res;
char temp[12];
unsigned int rtemp=10;
char ntemp[10];
void adc()
{
temp_res = ADC_Read(2); // Get 10-bit results of AD conversion
temp_res = (temp_res *5)/10;
IntToStr(temp_res,temp);
}
void print()
{
LCD_INIT(&PORTB);
lcd_out(1,1,"temp Act") ;
lcd_out(2,1,"temp Ref") ;
lcd_cmd(LCD_CURSOR_OFF);
}
void test()
{if(temp_res>rtemp)
{PORTC=0b00000101; //cool
}
if(temp_res<rtemp)
{
PORTC=0b00001010;//hot
}
if(temp_res==rtemp)
{
PORTC=0x00;
}
}
void main()
{
TRISA =0b10;
TRISD =0x11;
TRISC =0x00;
TRISB=0X00;
lcd_init(&portb);
lcd_out(1,1,"Basem Majed") ;
lcd_out(2,3,"temp. Control ") ;
lcd_cmd(LCD_CURSOR_OFF);
delay_ms(2000);
print();
do
{
IntToStr(rtemp,ntemp);
lcd_out(2,10,ntemp);
delay_ms(200);
lcd_out(1,10,temp) ;
delay_ms(200);
test();
if(portd.f1==0 && rtemp>0)
{
rtemp--;
delay_ms(200);
}
if(portd.f0==0&&rtemp<=100)
{
rtemp++;
delay_ms(200);
}
adc();
}
while(1);
return;
}
ولماذا هذا الكود اشتغل بدون مشاكل واعطي نتيجه ممتازه
كود:
int t1,temp;
char *text[6];
void main()
{
adcon1=2;
lcd_init(&portb);
lcd_out(1,1,"Welcome");
lcd_cmd(lcd_cursor_off);
delay_ms(1000);
lcd_out(1,1,"From Qariya.com");
lcd_cmd(lcd_cursor_off);
delay_ms(1000);
lcd_out(1,1,"Temperature is :");
lcd_out(2,8,"'C");
while(1)
{
t1=adc_read(0);
temp=0.245*t1*2; // For Lm35 Sensor 10mv/’c
inttostr(temp,text);
lcd_cmd(lcd_cursor_off);
lcd_out(2,1,text);
delay_ms(100);
}
}
مع تغيير مدخل الانالوج طبعاا الى RA0