قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 16-09-2014, 12:57 PM المشاركة 129   
افتراضي



شكرا اخي العزيز
بخصوص تيمر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

اعلانات

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 16-09-2014, 01:20 PM المشاركة 130   
افتراضي


السلام عليكم
طبعا أخي طريقه خاطئه والسبب في ذلك ان لوب الي يحتسب زمن انتظار الى للتراياك الاول ولوب الثاني الي يحتسب زمن انتظار الى للتراياك الثاني وهنا ستلاحظ ان كلا لوبين سوف يؤثران على الترياك الاول والثاني وبتالي كتابه هذا كود يعتبر خاطئ
لربما يوجد حل وهو لاتستخدم لوب مغلق اي أستخدم IF مثلا قل اذا زمن اصبح أكبر من cont1 اجعل tigger1=1 وهناك شرط تقول اذا tigger1=1 ارسل للنبضه للتراياك الاول
على فكره نقطه الصفر هي لكل
وهكذا تقول اذا زمن اصبح أكبر من cont2 اجعل tigger2=1 وهناك شرط تقول اذا tigger2=1 ارسل للنبضه للتراياك الثاني
وبالطبع لكل واحدا منهما له تايمر خاص به مثلا البك 16f628a له ثلاث تايمرات tmr0 , tmr1 ,tmr2

شكرا اخي ساحاول تصحيح الكود

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 16-09-2014, 11:39 PM المشاركة 131   
افتراضي


أخي العزيز
لقد حاولت ولم استطع
كود:
bit oldstate, oldstate1,oldstate2, oldstate3;
sbit sw_inc at RB1_bit;
sbit sw_inc_dir at TRISB1_bit;

sbit sw_dec at RB2_bit;
sbit sw_dec_dir at TRISB2_bit;

sbit sw_inc3 at RB6_bit;
sbit sw_inc_dir3 at TRISB6_bit;

sbit sw_dec2 at RB7_bit;
sbit sw_dec_dir2 at TRISB7_bit;

sbit trigger at RB3_bit;
sbit trigger_dir at TRISB3_bit;

sbit trigger1 at RB5_bit;
sbit trigger1_dir at TRISB5_bit;

sbit led_check at RB4_bit;
sbit led_check_dir at TRISB4_bit;

char zero_crosing=0, ratio=50,zero_crosing1=0, ratio1=50 ,x;

unsigned int time=0 , cont=0,time1=0 , cont1=0;

//Timer0
//Prescaler 1:128; TMR0 Preload = 100; Actual Interrupt Time : 19.968 ms

//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG         = 0x86;
  TMR0                 = 100;
}
void InitTimer1(){
  T1CON         = 0x01;
  TMR1IF_bit         = 0;
  TMR1H         = 0xB1;
  TMR1L         = 0xE0;
  TMR1IE_bit         = 1;
  INTCON         = 0xC0;
}

void interrupt()
{
 if(INTCON.INTF)
                {
                 INTCON.INTF=0;
                 tmr0=100;
                 tmr2=100;
                 zero_crosing=zero_crosing1=1;;
                }
  if (TMR0IF_bit){
    TMR0IF_bit         = 0;
    TMR0                 = 100;
    //Enter your code here
  }
 if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H         = 0xB1;
    TMR1L         = 0xE0;
    //Enter your code here
  }
}

void main()
{
  sw_dec_dir=sw_dec_dir2=1; // input
  sw_inc_dir=sw_inc_dir3=1; // input
  led_check_dir=0; //output
  trigger_dir=0;//output
  trigger1_dir=0;//output
  led_check=0;//led off
  oldstate=oldstate2=0;
  oldstate1=oldstate3=0;
  intcon=0xF0;
  InitTimer0();
  InitTimer1();
  for( x=0;x<6;x++) {led_check=~led_check; delay_ms(500); }
while(1)
         {
          if(zero_crosing)
                       {
                         zero_crosing=zero_crosing1=0;
                         led_check=1;
                         time=time1=0;
                         cont=ratio*100;
                         cont1=ratio1*100;
                         if(time<cont){
                         while(time<cont)
                                {
                                 time=128*(tmr0-100);
                                }
                         led_check=0;
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                       }
                      if(time1<cont1){
                         while(time1<cont1)
                                {
                                 time1=128*(tmr2-100);
                                }

                          trigger1=1;
                         delay_us(100);
                         trigger1=0;
                        }
                       
                       
                       }


        //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;
                    }
      //Button to decrease the voltage
        if(sw_dec2)  oldstate2=1;
        if(!sw_dec2 && oldstate2)
                     {
                      if(ratio1 <85) ratio1 +=1; //
                      oldstate2 = 0;
                     }

       //Button to increase the voltage
       if(sw_inc3)  oldstate3=1;
       if(!sw_inc3 && oldstate3)
                    {
                     if(ratio1>5)ratio1 -=1;
                     oldstate3 = 0;
                    }
     }

}
فارجوا ان تساعدني اخي الفاضل


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 17-09-2014, 03:14 PM المشاركة 132   
افتراضي


اخي العزيز
اردت ان اجرب اني ادا بقيت ضاغطا على الزر تتغير شدة الاضاءة
كود:
  //Button to decrease the voltage
        if(sw_dec)  
        
                     {
                      if(ratio <85) ratio +=1; //
                   
                     }
اي ان المصباح يصبح اما on/off
ثم وضعت المدة دقيقة واحدة ارى ان المصباح شدته متوسطة عندما اضغط على الزر ينطفئ ثم يرجع الى حالته البدئية وهي شدة المتوسطة


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 17-09-2014, 03:25 PM المشاركة 133   
افتراضي


حاولت ان اجرب تحويل زاوية القدح والعداد لو يتغير المصباح
كود:
 if(zero_crosing)
                       {
                         zero_crosing=0;
                         led_check=1;
                         time=0;

                         while(time<ratio)
                                {
                                 time=128*(tmr0-100);
                                }
                         led_check=0;
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                       }


        //Button to decrease the voltage
        if(sw_dec)  oldstate=1;
        if(!sw_dec && oldstate)
                     {
                      if(ratio <8500) ratio +=100; //
                      oldstate = 0;
                     }

       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {
                     if(ratio>500)ratio -=100;
                     oldstate1 = 0;
                    }


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 17-09-2014, 03:26 PM المشاركة 134   
افتراضي


char zero_crosing=0, ratio=0 ,x;


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 17-09-2014, 03:41 PM المشاركة 135   
افتراضي


حاولت ان اجرب تحويل زاوية القدح والعداد لو يتغير المصباح
كود:
 if(zero_crosing)
                       {
                         zero_crosing=0;
                         led_check=1;
                         time=0;

                         while(time<ratio)
                                {
                                 time=128*(tmr0-100);
                                }
                         led_check=0;
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                       }


        //Button to decrease the voltage
        if(sw_dec)  oldstate=1;
        if(!sw_dec && oldstate)
                     {
                      if(ratio <8500) ratio +=100; //
                      oldstate = 0;
                     }

       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {
                     if(ratio>500)ratio -=100;
                     oldstate1 = 0;
                    }
عفوا لم أفهم ماذا تقصد؟


abdewidad
:: مهندس متميز ::
تاريخ التسجيل: Dec 2013
الدولة: casablanca
المشاركات: 712
نشاط [ abdewidad ]
قوة السمعة:0
قديم 17-09-2014, 04:14 PM المشاركة 136   
افتراضي


اولت ان ارى نتيجة وضع متغير مكان االاخر
بمان قيمة زاية القدح تزداد بمقدار واحد ثم هدا الحاصل نضربه في 100 لكي نحصل
على قيمة في العداد حسب العلاقة cont=ratio*100;
اني ازلت cont وعودتها ب ratio ووضعت في الشرط if(ratio <8500) ratio +=100;
وكدلك داخل لوب كما ني قمت بوضع قيمة البدئية while(time< ratio
ratio=0
لم يعمل هدا اخي سوى احتمال لكي ارى النتيجة
شكرا على المتابعة
اخي بخصوص المؤقت 1 اخي حاول تصحح لي الكود
وشكرا

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:07 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025