السلام عليكم
اخي تأكد من دائرة البور اولاً فأغلب المشاكل بسبب التغذية لذلك اعتني بها جيداً
قبل الرجوليتر وبعده ضع مكثف 100n
وضع قبل الرجوليتر مكثف 2200uf
وبالقرب من المايكرو ضع مكثف 10uf
ضع مكثف 100n على طرف الــ MCLR مع مقاومة 1K وليس 10K
ولا تستخدم ترانزستور او فوتوكبلر الافضل استخدام متكاملة uln2003 او
Uln2803 فهي افضل بكثير
والاهم ان لا توصل خرج المايكرو مباشرة بالايسي ،، ضع بين الايسي والمايكرو مقاومة ولتكن 10 اوم
كل ايسي تستخدمه ضع على اطراف التغذية مكثف 100n لمنع ارتداد الشد والجذب الذي يسببه الايسي نتيجة الـ switching وما يسببه هذا على مصدر التغذية
كل مدخل تناظري ضع فلتر عليه مكون من مقاومة ومكثف لمنع دخول اشارات خارجية سريعة الى المايكرو
اهم فقرة هي تأريض طبقة الـ GND ولكن انتبه ! لا تجعل التأريض قريب من مصدر جهد 220VAC ولا بين الريليات
ثم احرص دائما على عزل تأريض المنطقة التناظرية عن تأريض المنطقة الرقمية
حاول ان لا تستخدم سوكتات الايسيات وضع الايسي على البوردة مباشرة
اما على صعيد البرنامج فأتبع التالي
كل طرف لا تستخدمه اجعله مخرج بصفر
وفي حالة استخدام مدخل تناظري احرص على وضع مدة تأخير بين كل قراءة ولتكن 2MS
ثم لا تختبر وتنفذ مباشرة ، مثلاً تريد اختبار مدخل تناظري فأذا كان المدخل يساوي 3v شغل الريلاي
هنا اختبر فأن تحقق الشرط انتظر مدة ثم نفذ ، هكذا
كود:
if(sensor==3){delay_ms(20); relay=1;}
وهكذا
ثم عليك ان لا تجعل المايكرو منبع بل مصرف ، مثلا لديك ليد اربط الطرف الانود بالـ vdd والكاثود بالمايكرو بحيث يعمل عند اعطاء نبضة 0v وليس 5v
هذا يساعد على تقليل الضجيج الداخلي للمايكرو حيث يصبح مرشح الى الارضي
وهنالك الكثير من الاجراءات المهمة التي يجب اتباعها في التصميم الصحيح
تحياتي لك