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

   

الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,679
نشاط [ مسلم11 ]
قوة السمعة:
قديم 30-12-2019, 06:54 PM المشاركة 73   
افتراضي




السلام عليكم ورحمة الله وبركاته
اخى الكريم مسلم
اليك رابط به ملف للمحاكاه بدون كود ِ


https://up.top4top.net/downloadf-14588qk1g1-rar.html
وعليكم السلام ورحمة الله وبركاته
جاري التحميل ياجميل والعودة اليك .
ساقوم على بناء مجسم صغير للخزان لاختباره عمليا .
شكرا لك
تحياتي للجميع

اعلانات

الصورة الرمزية عريبى محمود
عريبى محمود
:: ( رحمه الله عليه ) ::
تاريخ التسجيل: Feb 2009
الدولة: لا تسأل الطغاه لماذا طغو بل اسأل العبيد لماذا انحنو
المشاركات: 3,126
نشاط [ عريبى محمود ]
قوة السمعة:
قديم 30-12-2019, 09:10 PM المشاركة 74   
x4


بارك الله فيك أستاذنا الفاضل.
لي طلب لو سمحت :
اريد أن تقوم بمشروع عمل جهاز مستقبل إشارة RF بقناتين عن طريق البيك 16f84a باستعمال ريموت سنترلوك أبواب السيارة حيث تتم العملية كما يلي:
عند الضغط على سويتش الريموت يشتغل الريلي رقم 1 ،عند الضغط على السويتش مرة أخرى الريلي رقم 1 يفصل ، عند الضغط على السويتش مرة أخرى يشتغل الريلي رقم 2 وعند الضغط مرة أخرى على السويتش يفصل الريلي رقم 2 وهكذا باستمرار.


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


اولا الكود


كود:
int  X=0;

  void main()


              {
                     TRISB=0;
                     PORTB=0;

                     TRISA=1;

                     while(1)

                    {

                    if( PORTA.F0==1 ){X++; delay_ms(250);}

                      if(X==1){ PORTB.F0=1;}
                      if(X==2){ PORTB.F0=0;}
                      if(X==3){ PORTB.F1=1;}
                      if(X==4){ PORTB.F1=0; X=0;  }
                  }

المحاكاه







.

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 31-12-2019, 02:11 AM المشاركة 75   
افتراضي


بارك الله بك والله شيء رائع
لكن لا اريد شاشة عرض يكفي ليدات فقط كما رايت فكما اخبرتك لقد عرضت عليهم ذلك ولم يوافقوني .
اعجبني جدا التنبيه الصوتي ممتاز تفكير متقدم وعقل متاقلم .
اخي الكريم القاشط مرحلة مستقلة عن مرحلة تحضير الماء المعالج .
و ايضا لاحظت مفتاحان للتشغيل التلقائي .
ان المفتاح الذي ساستخدمه هو مفتاح دوار بثلاث وضعيات spdt يدوي واطفاء وتلقائي .
بالنسبة لجهاز قياس القلوية ايضا مستقل ولكن يقوم على تشغيل برنامج التحضير يدويا عند كل ساعة ان كانت حموضة الماء مرتفعة .
اي يتدخل بتشغيل البرنامج دورة واحدة فقط تلقائيا وهنا يقوم العمل عل وضعه تلقائيا ان كانت الحموضة اقل من ٦ .
بالنسبة لمفاتيح الضبط و المعايرة والتاكيد لماذا تم وضعها هنا .
ان كان من اجل الوقت ارجوك اجعل التحكم بالوقت اما عن طريق مقاومة متغيرة او طرف اوصل عليه ريليه زمنية .
الاسماء صحيحة وكل شيء تمام ان شاء الله .
بالنسبة للتنبيه الصوتي متى يعمل حقيقة يوجد بالغرفة جرس كبير يفيق الميت من موته من شدة صوته لقد ارعبني كثيرا عندما شغلوه .
قالوا من اجل ان يصحي النيام وقلت لهم اعتقد انكم تتقاتلوب كثيرا مع زوجاتكم مساء قالوا لما اجبت لانه لايوجد لدى نساءكم مثل هذا الجرس لاداء الواجب .😂😂😂😂😁😁😁.
شكرا لك

وبارك فيك أخي الكريم

لاعليك سوف اقوم بألغاء الشاشه..

بالنسبة للتنبية الصوتي يمكننا استخدامة في أكثر من مكان يمكن استخدامة في حالة طفحان الخزان أو في حالة نسبة الحموضه عالية.. وهكذا ..

سوف اقوم بتعديل البرنامج

تحياتي


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 31-12-2019, 04:43 AM المشاركة 76   
افتراضي السلام عليكم ورحمة الله


السلام عليكم ورحمة الله

أخي الكريم لقد تم تعديل البرنامج والغاء الشاشة..







كود:
      
      
     // ENG / ABDALLA HEGAZY **
    // DATA / 2019/12/30     **
    // controller            **


  #define  MOTOR_vibrator_M11     PORTC.F7
  #define  MOTOR_Mixing_M62      PORTC.F6
  #define  Helical_motor_M61      PORTC.F5
  #define  MOTOR_Y33              PORTC.F4
  #define  MOTOR_Water_valve_Y32  PORTA.F5
  #define SENSOR_LEVEL_1  PORTD.F2
  #define SENSOR_LEVEL_2  PORTD.F3
  #define SENSOR_LEVEL_3  PORTD.F4
  #define SENSOR_LEVEL_4  PORTD.F5
  #define SENSOR_LEVEL_5  PORTD.F6
  #define SENSOR_LEVEL_6  PORTD.F7
  #define END_ALL   Helical_motor_M61 =0;  MOTOR_Y33 =0; MOTOR_Mixing_M62 =0; MOTOR_vibrator_M11=0; MOTOR_Water_valve_Y32 =0;
  #define BEZR  PORTD.F1=1; delay_ms(350); PORTD.F1=0; delay_ms(200);
  #define BEZRR  PORTD.F1=1; delay_ms(270); PORTD.F1=0; delay_ms(50);  PORTD.F1=1; delay_ms(270); PORTD.F1=0; delay_ms(1500);
  #define END_OFF  PORTD.F1=1; delay_ms(3000); PORTD.F1=0; delay_ms(50);
   unsigned X1=0,X2=0,X3=0,M=0,A=0;
   unsigned DATA_SHOW=0,DATA_SHOW2=0;
   unsigned W1=0,W2=0,W3=0,W4=0,W5=0;
   //===================================//
     //Timer0
    //Prescaler 1:8; TMR0 Preload = 6; Actual Interrupt Time : 1 ms

    //Place/Copy this part in declaration section
    void InitTimer0(){
    OPTION_REG	 = 0x82;
    TMR0	 = 6;
    INTCON	 = 0xA0;
  }

    void Interrupt(){
    if (TMR0IF_bit){
    TMR0IF_bit	 = 0;
    TMR0	 = 6;
    //Enter your code here
    
       if ( W2==1 ){ W3++; }
       if ( W3==250 ){PORTE.F0=1; }
       if ( W3==550 ){PORTE.F0=0; W3=0; }
       
       if ( W4==1 ){ W5++; }
       if ( W5==250 ){PORTB.F7=1; }
       if ( W5==550 ){PORTB.F7=0; W5=0; }
    
  }
}

 //===================================//
   
   
       void AUTO() {


       W1=0;   W2=1;
       while(X1==0){
      if (Button(&PORTE, 1, 10, 0)){END_ALL END_OFF X1=1;  }  //END PROGRAM //
       while(X1==0)
   {
      if(W1==0 ){
      MOTOR_vibrator_M11=1; MOTOR_Water_valve_Y32 =1; W1=1; }
     if (Button(&PORTE, 1, 10, 0)){END_ALL  X1=1;  }  //END PROGRAM //
     if( SENSOR_LEVEL_1 ==1  ){ MOTOR_Mixing_M62 =1; }
     if( SENSOR_LEVEL_2 ==1 ){ Helical_motor_M61 =1; }
     if( SENSOR_LEVEL_3 ==1 ){ MOTOR_vibrator_M11=0; }
     if( SENSOR_LEVEL_4 ==1 )
    {
  MOTOR_Water_valve_Y32 =0; for(X3=0; X3<M; X3++){ delay_ms(60000); }
  MOTOR_Y33 =1;
     X1=1;
   }
   
   }
     X1=0;
      while( X1==0 )
    {
       if (Button(&PORTE, 1, 10, 0)){END_ALL END_OFF X1=1;  }  //END PROGRAM //
      if( SENSOR_LEVEL_1 ==0){
      for(X3=0; X3<M; X3++){ delay_ms(60000); }
      END_ALL
      X1 =1;
      }
   }
     delay_ms(1000);
    if (Button(&PORTE, 1, 10, 1)){ delay_ms(50); X1=0; }
     X1=1;  W2=0; PORTE.F0=0;
 }
 
}
  //====================================//
  //************************************//
        void MANUAL() {

         W1=0;   W4=1;
       while(X1==0){

       while(X1==0)
   {

      if(W1==0 ){
      MOTOR_vibrator_M11=1; MOTOR_Water_valve_Y32 =1; W1=1; }

     if( SENSOR_LEVEL_1 ==1  ){ MOTOR_Mixing_M62 =1; }
     if( SENSOR_LEVEL_2 ==1 ){ Helical_motor_M61 =1; }
     if( SENSOR_LEVEL_3 ==1 ){ MOTOR_vibrator_M11=0; }
     if( SENSOR_LEVEL_4 ==1 )
    {
  MOTOR_Water_valve_Y32 =0; for(X3=0; X3<M; X3++){ delay_ms(60000); }
  MOTOR_Y33 =1;
     X1=1;
   }

   }
     X1=0;
      while( X1==0 )
    {

      if( SENSOR_LEVEL_1 ==0){
      for(X3=0; X3<M; X3++){ delay_ms(60000); }
     END_ALL
      X1 =1;
      }
   }
     X1=0; delay_ms(1000);
    if (Button(&PORTE, 1, 10, 1)){END_ALL END_OFF X1=1; W4=0; PORTB.F7=0; }
 }
  W4=0;
}
   //===========================================//
      void SET_PROGRAM() {
     PORTB.F0=1;
     PORTD.F1=1; delay_ms(800);  PORTD.F1=0; delay_ms(500);
     PORTD.F1=1; delay_ms(800);  PORTD.F1=0; delay_ms(500);
      X2=0;

       while(X2==0)
    {
       PORTB.F1=1;
      if(PORTC.F1==1){BEZR M ++;  }
      if(PORTC.F2==1){BEZR M =0;  }
      if(PORTC.F3==1){BEZR  X2=1;  }
      if( M > 20 ){ M =0;  }

    }  EEPROM_Write(0, M);  delay_ms(10);


      X2=0;  PORTB.F2=1;  PORTB.F1=0;
      while(X2==0)
    {
      if(PORTC.F1==1){BEZR A ++;  }
      if(PORTC.F2==1){BEZR A =0;  }
      if(PORTC.F3==1){BEZR  X2=1;  }
       if( A > 20 ){ A =0;  }
    }   
       PORTB.F0=0;  PORTB.F2=0;
        X2=0;  EEPROM_Write(1, A);  delay_ms(10);
    }

 //===========================================//
  //************************************//
         void main() {
        TRISB=0;   PORTB=0;
        TRISD=252; PORTD=0;
        TRISC=15; PORTC=0;
        TRISA=1;   PORTA=0;
        TRISE=6;   PORTE=0;
        ADC_Init();  // Initialize ADC module with default settings  //
        adcon1=0x07;
        InitTimer0();
       BEZRR BEZRR  BEZRR delay_ms(250);


       M = EEPROM_Read(0);
       A = EEPROM_Read(1);

       /*EEPROM_Write(0, 0);
        EEPROM_Write(1, 0);
        EEPROM_Write(2, 0);
        EEPROM_Write(3, 0);*/


     //====================//

       while(1){
       PORTE.F0=0;
       PORTB.F7=0;
     if (Button(&PORTC, 0, 10, 1)) {BEZR delay_ms(350); SET_PROGRAM();} // SET //
   
     if (Button(&PORTE, 1, 10, 1)) 
     {
       delay_ms(5000);
       if (Button(&PORTE, 1, 10, 1)){ X1=0;  BEZR  AUTO(); }
     }
     
     if (Button(&PORTE, 2, 10, 1)) 
     {
        delay_ms(5000);
        if (Button(&PORTE, 2, 10, 1)){ X1=0;  BEZR  MANUAL(); }

     }
   
   
    }
   }



شرح البرنامج وطريقة تشغيلة


أولا في بداية توصيل التيار للدائرة تصدر 3 اصوات جرس لتخبرك أن البرنامج جاهز للعمل ..

هنا يجب ضبط واختيار وقت البرنامج الأول والثاني .. أضغط علي مفتاح ( الضبط ). وأرفع صابعك من علي المفتاح عند سماع صوت البازر ..
بعد ذالك تجد ذالك تجد ثلاث صفارات بازر متتالية وتلاحظ ليد TEMER قد اشتعل لخبرك بأنك الأن في قائمة الضبط وبعد ذالك تجد الليد . TEM_1. قد اشتعل لخبرك أنك تختار وتضبط وقت البرنامج الأول بعد ذالك اضغط علي مفتاح. DOWN لتصفير التايمر وبعد ذالك اضغط علي مفتاح . UP ضغطة سريعة وسوف تلاحظ اصدار صوت بازر وهنا أنت اخترت واحد دقيقة وعند الضغط علي مفتاح. . UP مرة اخرة يصدر صوت بازر وهنا اصبح الوقت دقيقتان وهكذا كل ضغطة تزود دقيقة .. بعد اختيار عدد الدقائق للتايمر الأول .. أضغط علي مفتاح. OK لحفظ الحالة وسوف تلاحظ ان الليد TEM_1 قد انطفأ والليد TEM_2 اشتعل وعند اشتعال الليد. TEM_2 هنا يخبرك بأنك في قائمة ضبط التايمر الثاني .. وبنفس الشرح أضغط علي مفتاح. DOWN لتصفير التايمر وبعد ذالك ضغط علي مفتاح . UP ضغطة سريعة لذيادة عدد الدقائق اللتي تريدها. وبعد ذالك اضغط علي مفتاح OK هنا البرنامج قد تم ضبط الأوقات وجاهز للتشغيل دورة واحدة أ تشغيل تلقائي ...

وباقي خطوات البرنامج انت تعرفها حيث سوف يتفاعل البرنامج مع الحساسات ..

بالنسبة لمفتاحان تشغيل دورة واحدة أو تلقائي ..
هنا لو تم لف مفتاح الثلاث تكات ووقفت مثلا علي التكة الثانية سوف ينتظر البرنامج 5 سواني لو مازلت واقف علي التكة الثانية سوف يدخل البرنامج في تشغيل دورة واحدة .. وهنا البرنامج يعطي للمستخدم 5 سواني عند تحريك مفتاح التشغيل ليري أين وقفت وعندها ينفذ أمر التشغيل علي حسب مكان المفتاح ...



التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 31-12-2019 الساعة 05:21 AM

فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:
قديم 31-12-2019, 05:03 PM المشاركة 77   
افتراضي


استاذ عبدالله ما معنى التعليمه
for(x3=0;x3<m;x++){delay_ms(60000);}


الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,679
نشاط [ مسلم11 ]
قوة السمعة:
قديم 31-12-2019, 11:34 PM المشاركة 78   
افتراضي


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


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 01-01-2020, 03:52 AM المشاركة 79   
افتراضي


[QUOTE=فيصل الريامي;1190542]استاذ عبدالله ما معنى التعليمه[QUOTE
كود:
for(x3=0;x3<m;x++){delay_ms(60000);}

السلام عليكم ورحمه الله

أخي الكريم هذة التعليمة نستخدمها لتكرار أمر معين عدد من المرات وتكون هكذا

كود:
for(x3=0;x3<10;x++){delay_ms(1000);}
لاحظ في هذا الأمر x3=0 وهنا يذيد x3 كل دورة الي ان يصل الي اكبر من 10 لأن حددنا له أن يستمر داخل هذة الحلقة لحين وصول x3 الي 10 ورقم 10 هذا يمكننا تغيرة كما نشاء ..

بالنسبة هذة التعليمه
كود:
for(x3=0;x3<m;x++){delay_ms(60000);}
. هنا لو تلاحظ تم استبدال الرقم 10 بمتغير اسمة m
تم تحديدة بالأزرق وهنا سوف يكون تكرار هذة الحلقة بقيمة المتغير m. وهنا نستخدم هذا الأمر في البرنامج لكي نستفيد منه ونظبط وقتة كما نشاء (60000) وهذا الرقم = انتظار واحد دقيقة وهنا لو المستخدم جعل قيمة m مثلا = 3 فهنا ستكون هذة التعليمة أمر انتظار 3 دقائق والفائدة منها اننا يمكننا في اختيار زمن انتظار وتعديلة في أي وقت بدون ان نطر الي برمجة الميكرو عند كل مرة نغير فيها الوقت

تحياتي


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 01-01-2020 الساعة 04:39 AM

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 01-01-2020, 04:13 AM المشاركة 80   
افتراضي


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

الحمد لله أن نفذت ما طلبك ..

أخي الكريم في الحقيقه يمكننا استخدام مقومات متغيرة مع الميكرو لتحديد الوقت ... وعند التفكير في المقاومات سيكون هناك أمر محير لأن كل مرة هيتم ضبط الوقت فيها سوف تحتاج لتحريك المقاومه قليلا وتنظر الي النتيجه او زمن الإنتظار .. وهنا فضلت أن استخدم أمر التحكم في الوقت بستخدام الأرقام لسهولة التعامل والدقة ..والسرعة في الضبط ..

بالنسبة هذة الحالة

اخي الكريم اريد التحكم بالوقت لمرة واحدة فقط
انا عامل حسابي في البرنامج أن يحتفظ البرنامج بالوقت المدخل حتي لو تم قطع التيار عن الدائرة .. عند عودة التيار سوف يتذكر كل الإعدادات ولا يحتاج الي ضبط الوقت ثاني ..

لاحظ كلامي هذا ذكرت لك أن البرنامج يحفظ القيم المدخلة من المستخدم

وعند الضغط علي مفتاح. . UP مرة اخرة يصدر صوت بازر وهنا اصبح الوقت دقيقتان وهكذا كل ضغطة تزود دقيقة .. بعد اختيار عدد الدقائق للتايمر الأول .أضغط علي مفتاح. OK لحفظ الحالة

استخدمت الذاكرة الدائمة EEPROM. هذة الذاكرة يتم حفظ وقت الإنتظار للبرنامج وهكذ يتم ضبط الوقت مرة واحد فقط ..
ويمكنك تعديل الوقت كما تشاء


انتظر معلومات اكثر عن القاشط حساس القلويات لأقوم بأضافتة في البرنامج

ادعوك أن تختبر البرنامج علي الواقع لنري النتائج ونضيف ونعدل ما نشاء

تحياتي لك وبالتوفيق


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 01-01-2020 الساعة 04:24 AM


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