طبعا يتم التحكم بعرض النبضه ومنها بزاويه القدح للتراياك عن طريق هذين سويجين
كود:
//Button to decrease the voltage
if(sw_dec) oldstate=1;
if(!sw_dec && oldstate)
{
if(ratio <85) ratio +=1; //
oldstate = 0;
}
//Button to increase the voltage
if(sw_inc) oldstate1=1;
if(!sw_inc && oldstate1)
{
if(ratio>5)ratio -=1;
oldstate1 = 0;
}
حيث عند ضغط على sw_dec سوف يصبح oldstate=1 وبتالي يبقى الشرط
كود:
if(!sw_dec && oldstate)
غير متحقق الى ان يتم رفع يدك من سويج وعندها يتم نقصان متغير الذي اسمه ratio وطبعا هذا متغير كل 1=100us
اي ان زاويه القدح تحسب هكذا
180 *

=ratio*100/10000
حيث 10000 تعني 10ms اي نقسم زمن نبضه على زمن نصف موجه مضروبه في زاويه 180

=ratio*1.8 وهذا يعني كل ratio=1 يعادل درجه تحكم 1.8
ولكي يعمل التراياك فانه يحتاج الى نقطه الصفر وهي عند زاويه 180 و360 درجه اي ان دائره كشف الصفر ترسل النبضه الى RB0 ليحدث الانتربت ويصبح عندها zero_crosing=1
عندها يدخل مايكرو في تنفيذ هذا الكود وهو كود التحكم بزاويه التراياك
كود:
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;
}
حيث صفرنا zero_crosing=0 لكي ينفذ الكود مره واحده فقط لكل نبضه
led_check=1 هنا يضيء ليد
time=0 هنا صفرنا عداد زمن انتظار قبل ارسال نبضه القدح
cont=ratio*100 هنا نحتسب الزمن الذي عنده يتم ارسال النبضه وتلاحظ انه في برنامج وضعت قيمه ratio=50 , وبتالي اول مايعمل البرنامج مصباح يضيء عند نصف الشده تقريبا اي ان 50 تعني 50%
=================================
كود:
while(time<cont)
{
time=128*(tmr0-100);
}
حيث يحسب time من هذه معادله
time=4/F *(tmr0-initial value)*Prescaler
حيث f=4Mhz و Prescaler=128 و initial value=100 (( راجع كود تفعيل تايمر0))
اما في هذا الكود فأنه يدخل في لوب طالما زمن اقل من زمن مطلوب وبالطبع تايمر0 مستمر بالعد وبتالي قيمه time تزداد الى ان تصل الى قيمه اعلى من cont فيخرج من لوب فعندها يطفئ ليد led_check=0 وبتالي هنا ايضا شده اضاءه في هذا ليد تتغير عندما يتم التحكم للدلاله على انه كود التحكم يعمل بشكل الصحيح
اي انه اذا نسبه ratio=5% معناها أضاءه عاليه بنسبه 95% لانه عند ratio=5% يعني زمن 0.5ms وبتالي راح تزداد شده اضاءه
اما ratio=70% تعني زمن يتجاوز 7ms اي اه عند 7ms يتم تشغيل التراياك وبتالي تجد زياده في شده ليد لانه سوف يبقى شغال لمده 7ms ومن ثم ينطفئ فقط 3ms اما نسبه الي يضيئ فيها مصباح هي عند 30% وبتالي ستجده شده ضعيفه
طبعا يمكن التعديل في الكود بحيث تجعل ratio=30% يعني شده اضائه 30% ايضا ولكن لاأجد له داعي لذلك لانه بالنهايه سوف يتم التحكم بشده مصباح