شكرا اخي العزيز
بخصوص تيمر1 لكي نستغله في ديمر 2 على نفس المتحكم لقد حاولت لكن لم استطع بل سادفني مشكل الشرط
كود:
if(zero_crosing)
{
zero_crosing=0;
led_check=1;
time=0;
cont=ratio*100;
while(time<cont)
{
time=128*(tmr0-100);
}
led_check=0;
trigger=1;
delay_us(100);
trigger=0;
}
if(zero_crosing2)
{
zero_crosing2=0;
time2=0;
cont1=ratio1*100;
while(time2<cont1)
{
time2=128*(tmr2-100);
}
trigger1=1;
delay_us(100);
trigger1=0;
}
|
السلام عليكم
طبعا أخي طريقه خاطئه والسبب في ذلك ان لوب الي يحتسب زمن انتظار الى للتراياك الاول ولوب الثاني الي يحتسب زمن انتظار الى للتراياك الثاني وهنا ستلاحظ ان كلا لوبين سوف يؤثران على الترياك الاول والثاني وبتالي كتابه هذا كود يعتبر خاطئ
لربما يوجد حل وهو لاتستخدم لوب مغلق اي أستخدم IF مثلا قل اذا زمن اصبح أكبر من cont1 اجعل tigger1=1 وهناك شرط تقول اذا tigger1=1 ارسل للنبضه للتراياك الاول
على فكره نقطه الصفر هي لكل
وهكذا تقول اذا زمن اصبح أكبر من cont2 اجعل tigger2=1 وهناك شرط تقول اذا tigger2=1 ارسل للنبضه للتراياك الثاني
وبالطبع لكل واحدا منهما له تايمر خاص به مثلا البك 16f628a له ثلاث تايمرات tmr0 , tmr1 ,tmr2