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

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

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



اخي العزيز
لقد ازلت التيمر 0 وهي شغالة على ارض الواقع
تفضل الكود اخي
كود:
bit oldstate, oldstate1;
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;

char zero_crosing=0, ratio=8,ratio1=2;
unsigned int x=0,x1=0 ;
void interrupt()
{
 if(INTCON.INTF)
                {
                 INTCON.INTF=0;
                 zero_crosing=1;;
                }
}
void main()
{
  sw_dec_dir=sw_dec_dir2=1; // input
  sw_inc_dir=sw_inc_dir3=1; // input
  trigger_dir=0;//output
  oldstate=0;
  oldstate1=0;
  intcon=0xb0;
while(1)
         {
          if(zero_crosing)
                       {
                         zero_crosing=0;
                         while(x<ratio)
                                {
                                 x++;
                                 delay_ms(1);
                                 if(x==10) x=0;
                                }
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                         x=0;
                        }
        //Button to decrease the voltage
        if(sw_dec)  oldstate = 1;
        if(!sw_dec && oldstate)
                     {delay_us(100);
                      if(ratio <9) ratio +=1; //
                      oldstate = 0;
                     }
       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {delay_us(100);
                     if(ratio>1)ratio -=1;
                     oldstate1 = 0;
                    }

     }

}

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 21-09-2014, 02:44 AM المشاركة 146   
افتراضي


اخي العزيز
لقد ازلت التيمر 0 وهي شغالة على ارض الواقع
تفضل الكود اخي
كود:
bit oldstate, oldstate1;
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;

char zero_crosing=0, ratio=8,ratio1=2;
unsigned int x=0,x1=0 ;
void interrupt()
{
 if(INTCON.INTF)
                {
                 INTCON.INTF=0;
                 zero_crosing=1;;
                }
}
void main()
{
  sw_dec_dir=sw_dec_dir2=1; // input
  sw_inc_dir=sw_inc_dir3=1; // input
  trigger_dir=0;//output
  oldstate=0;
  oldstate1=0;
  intcon=0xb0;
while(1)
         {
          if(zero_crosing)
                       {
                         zero_crosing=0;
                         while(x<ratio)
                                {
                                 x++;
                                 delay_ms(1);
                                 if(x==10) x=0;
                                }
                          trigger=1;
                         delay_us(100);
                         trigger=0;
                         x=0;
                        }
        //Button to decrease the voltage
        if(sw_dec)  oldstate = 1;
        if(!sw_dec && oldstate)
                     {delay_us(100);
                      if(ratio <9) ratio +=1; //
                      oldstate = 0;
                     }
       //Button to increase the voltage
       if(sw_inc)  oldstate1=1;
       if(!sw_inc && oldstate1)
                    {delay_us(100);
                     if(ratio>1)ratio -=1;
                     oldstate1 = 0;
                    }

     }

}
السلام عليكم
أيضا أخي أستخدمت فتره تأخيريه
كود:
 while(x<ratio)
                                {
                                 x++;
                                 delay_ms(1);
                                 if(x==10) x=0;
                                }
وبالطبع لايمكن أضافه ديمر أخر لكون مايكرو مشغول في فتره زمنيه لديمر1
تحياتي

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 21-09-2014, 02:53 AM المشاركة 147   
افتراضي


اخي الفاضل
لم افهم جيدا اخي
itime=128*(tmr0-100)
بمان تيمر0 تزداد قيمته 1 ميكروتانية
وان قيمة البدئية لي tmr0 هي 100
مثلا اخي انا وضعت في ratio=50 يعني cont=5000 تساوي 5ميلي تانية
هل tmr0 يزيد قيمته على 100 تصبح 101 الى ان يصل الى153
itime=6784. اي 6 ميكرو تانية
ثم يخرج من لوب ليتم قدح الترياك

يعني تايمره 0 يبدأ العد ولكن من قيمه ابتدائيه وهي 100 ومن ثم يبدأ بزياده 101 ثم 102 ثم 103 و...... بشكل مستقل عن مايكرو وعندما يصل الى 256 يرجع الى قيمه اوليه وهي 100 ولكن يصبح عامل الطفحان=1 اي يحدث انتربت
وبالطبع لما يصل نتيجه عمليه time اكبر من قيمه cont سوف يخرج من لوب لعدم تحقق الشرط داخل while
ومن ثم يخرج النبضه بعد ذلك

بعض روبط الي تفيدك
http://www.qariya.info/vb/showthread...A%C7%ED%E3%D10

http://www.qariya.info/vb/showthread...A%C7%ED%E3%D10


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


وبالطبع لايمكن أضافه ديمر أخر لكون مايكرو مشغول في فتره زمنيه لديمر1
اخي العزيز
هل لا يمكن ادافة ديمر تاني على نفس البيك
ادا استعملت 16f877a هل يصلح لوضع 2 ديمر


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


اخي العزيز
هل لا يمكن ادافة ديمر تاني على نفس البيك
ادا استعملت 16f877a هل يصلح لوضع 2 ديمر
السلام عليكم
تم تصحيح الكود وان شالله يعمل (( صراحه لم أجربه ولكن حسب بروتيس دائره تعمل ))
كود:
bit oldstate, oldstate1;
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 trigger1 at RB3_bit;
sbit trigger1_dir at TRISB3_bit;

sbit trigger2 at RB5_bit;
sbit trigger2_dir at TRISB5_bit;

sbit led_check at RB4_bit;
sbit led_check_dir at TRISB4_bit;

char zero_crosing=0 ,x , state ,kk=0;

unsigned int time=0 ,ratio1=5000 ,ratio2=2500 ;

//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 interrupt()
{
 if(INTCON.INTF)
                {
                 INTCON.INTF=0;
                 tmr0=100;
                 zero_crosing=1;
                 kk=0;
                }
  if (TMR0IF_bit){
    TMR0IF_bit         = 0;
    TMR0                 = 100;
    //Enter your code here
  }

}

void main()
{
  sw_dec_dir=1; // input
  sw_inc_dir=1; // input
  led_check_dir=0; //output
  trigger1_dir=0;//output
  trigger2_dir=0;//output
  led_check=0;//led off
  oldstate=0;
  oldstate1=0;
  intcon=0xB0;
  InitTimer0();
  for( x=0;x<6;x++) {led_check=~led_check; delay_ms(500); }
while(1)
         {
          if(zero_crosing)
                       {

                         led_check=1;
                         time=0;
                         
                         if(ratio1>=ratio2 && kk==0)state=2;
                         else if(kk==0) state=1;
                         if(state==1)
                                     {
                                      kk++;
                                      state=2;
                                      while(time<ratio1) time=128*(tmr0-100);
                                       led_check=0;
                                       trigger1=1;
                                       delay_us(100);
                                       trigger1=0;
                                     }
                         else if(state==2)
                                     {
                                      kk++;
                                      state=1;
                                      while(time<ratio2)  time=128*(tmr0-100);
                                      led_check=0;
                                      trigger2=1;
                                      delay_us(100);
                                      trigger2=0;

                                     }
                          if(kk==2)zero_crosing=0;
                       }


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

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

     }

}
طبعا انا خليت دايمر1 و2 بنفس سويج فقط للفحص انت بالامكان عزلهما فيما بعد

أنتبه مخرج النبضه لديمر 2 على RB5

تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 21-09-2014 الساعة 05:27 PM

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


شكرا اخي العزيز
ساجرب واتيك بالنتيجة


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


اخي العزيز
لم يشتغل في المرحلة رغم تغيري لابتوكبلر وتغير موضع المصباح
ولكن قدر الله ماشاء اشتغلة ولكن لم اجرب زرين اخرين لكي اتحكم في المصباح
شكرا اخي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 24-09-2014, 01:42 AM المشاركة 152   
افتراضي


اخي العزيز
لم يشتغل في المرحلة رغم تغيري لابتوكبلر وتغير موضع المصباح
ولكن قدر الله ماشاء اشتغلة ولكن لم اجرب زرين اخرين لكي اتحكم في المصباح
شكرا اخي
سحاول وضع الكود لثلاثه مصابيح ونجرب ذلك

إضافة رد

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

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

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


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

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