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

   

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 20-07-2018, 09:33 AM المشاركة 81   
افتراضي



أشكركم أخوتى الكرام

اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 20-07-2018, 09:37 AM المشاركة 82   
افتراضي



الغسالة باستخدام PIC18F و لغة C:
يمكننا للسهولة نسخ البرنامج السابق فى مشروع جديد للمتحكم الجديد و ننسخه ، سنحتاج لتعديلات طفيفة مثل TMR0 سيضاف لها حرف L كبير أو صغير و Option_Reg سيتغير إلى INTCON2 و تعدل الأرقام كما فى المثال السابق فيصبح هكذا
كود:
   

 // program WM18       Declarations section

 char Switches  at PORTB ;
 char Leds at Portc ;
 char Relays  at Portd ;

  sbit Fullled at Rc0_bit ;
  sbit Halfled at rc1_bit ;
  sbit Smallled at rc2_bit ;
  sbit Hotled at rc3_bit ;
  sbit Mildled at rc4_bit ;
  sbit Coldled at rc5_bit ;
  sbit Wateron at rc6_bit ;
  sbit Drainon at rc7_bit ;

  sbit HitemP at rd0_bit ;
  sbit MidtemP at rd1_bit ;
  sbit Waterfull at rd2_bit ;
  sbit Waterempty at rd3_bit ;
  sbit Run_nspin at rd5_bit ;
  sbit Motoron at rd6_bit ;
  sbit Heateron at rd7_bit ;

 sbit Dooropen at rb0_bit ;
 sbit Run at rb1_bit ;
 sbit Cold at rb2_bit ;
 sbit Mild at rb3_bit ;
 sbit Hot at rb4_bit ;
 sbit SmallLoad at rb5_bit ;
 sbit Half at rb6_bit ;
 sbit Full at rb7_bit ;

 bit Jobpending ;

// VARIABLES
  unsigned int Runtime ;
  char Rinse , Cntr ;

void Timer0_int()  iv 0x0018 ics ICS_AUTO {
   if (INTCON.TMR0IF =1 ) {
       //  dec (Runtime) 
         if (--Runtime = 0 ) {
            Jobpending = 0   ;
            INTCON.TMR0IF =0  ;        // ClearBit(INTCON, TMR0IF) ;   // Clear flag
            INTCON.TMR0Ie = 0 ;       //  ClearBit(INTCON, TMR0Ie)      // Disable timer
            }                         // End If
     INTCON.TMR0IF =0  ;   
	// ClearBit(INTCON, TMR0IF)  //  clear Interrupt Timer0 to receive another  
  }
}

void main() {                                     //   Main program
    INTCON2 =  0 ;     // setting RB Pull up clearing bit RBPU all rising edge.
    INTCON = 0B10100000 ; 
		 // 7Interrupt Control GIE All,6Peie disabledg, 5Timer0 OV Enable
      // External disable , RBIF port changeenable, Timr0Flag,Exter Flag, PB change flag
    TRISB = 255 ;
    TRISC = 0   ;                  //  out
    Leds = 0b00100100  ;           //small Cold
    TRISD = 0b00011111  ;          // some in and some out
    Relays = 0b00001111 ;
    Heateron = 0  ;
    Motoron = 0  ;
    Run_nspin =  0 ;
    INTCON.TMR0IF =0  ;   // ClearBit(INTCON, TMR0IF) // Interrupt Timer0 Flag
    INTCON.TMR0IE =0  ;   // ClearBit(INTCON, TMR0IE) // Stop Interrupt Timer0

    while (Run = 1 )          //   Bitwait Run , Set
              {}          // wend          // Run button release
  while (1) {       //  Loopagain:
     do {
        if (Full = 0)      {                //  Then
           Leds = Leds | 0B00000111 ;       // Leds OR 00000111
           Fullled  = 0  ; }
        else if ( Half = 0) {                 // Then
           Leds = Leds | 0b00000111  ;   // Leds = Leds Or %00000111
           Halfled = 0 ;    }
        else  if ( SmallLoad = 0 ){      //  Then
           Leds = Leds | 0b00000111 ;    //Leds = Leds Or %00000111
           Smallled = 0  ;         }     // end if

        if ( Hot = 0)   {                // Then
           Leds = Leds | 0B00111000   ;  //Leds = Leds Or %00111000
           Hotled = 0 ;  }
        else if (Mild = 0)  {            //  Then
           Leds = Leds | 0b00111000 ;    //Leds = Leds Or 0b00111000
           Mildled = 0 ;     }
        else if (Cold = 0)               //  Then
              {  Leds = Leds | 0b00111000 ;
                 Coldled = 0 ;
               }                         // end if
      } while (Run = 1) ;                // loop until run = 0 // Wait Run Press

    while ( DoorOpen = 1 ) ;     // Bitwait Dooropen , Reset // Wait Door to close
    WaterOn = 1  ;                     // Set Wateron  Open Water Valve
    while (Waterfull = 1 ) ;      // Bitwait Waterfull , Reset  // Wait full Tank
    WaterOn = 0   ;                  // ReSet Wateron     // Close water Valve

   if (Coldled = 1)                   // Then  // not Cold then
     { Heateron  = 1 ;              // Heater on
         if (Mildled = 0)        
             {
             while ( Midtemp = 1 );             // Bitwait Midtemp , Reset
             }                      // wend
           else
             { while  (Hitemp = 1 ) ;         //  Bitwait Hitemp , Reset
             }                                               //end if
         HeaterOn =  0 ;             // reSet Heateron     // Turn off heater
      }                              // End if   // Now Start Washing

 if (Fullled = 0)                    // Then
     Runtime = 20 * 60 ;
 else if (Halfled = 0)          // Elseif Halfled = 0 Then
        { Runtime = 480  ; }
 else
        { Runtime = 300 ; }      // end if

     // Runmotor:
   Jobpending = 1  ;          // Set Jobpending   // Timing flag
   Motoron   = 1  ;                    // Motoron   = 0    // Start Motor
   TMR0l = 205     ;                  // Load Tomer0
   INTCON.TMR0IE = 1  ;           // enable Timer0
   INTCON.TMR0IF = 1  ;            // Interrupt Timer0 Flag
   while (jobPending = 1)  ;          // Bitwait Jobpending , Reset    // Wait to Finish
   motorOn = 0;               // Set Motoron                   // stop motor

   for (Cntr =0; Cntr < Rinse; Cntr++)      //    for Cntr = 1 To Rinse
    {   Drainon = 1  ;            // Reset Drainon // Open Drain
        while (Waterempty = 1) ;    // Bitwait Waterempty , Reset // Wait Drain
                               //  wend
        DrainOn =  0  ;                    // Set Drainon // Close Drain
        WaterOn = 1   ;          	 // Reset Wateron // Fill again
        while (WaterFull = 1) ;      // Bitwait Waterfull , Reset
                           //  wend
        WaterOn = 0   ;           // Set Wateron    // Close Water
        Runtime = 300  ;                           // Rinse Time
        TMR0l = 205  ;
        Jobpending = 1   ;                   // Set Jobpending
        Motoron =1 ;                            // Reset Motoron  // Start Rinse
        INTCON.TMR0IE = 1  ;            // SetBit(INTCON, TMR0IE)// enable Timer0
        INTCON.TMR0IF = 1 ;             // setBit(INTCON, TMR0IF)   // Interrupt Timer0 Flag
        while (Jobpending = 1) ;       // Bitwait Jobpending , Reset // Wait to Finish
        Motoron = 0    ;                        // Set Motoron     // Stop Rinse
     }            // Next  cntr

    MotorOn = 0  ;                           // Set Motoron     // Stop Rinse
    DrainOn = 1   ;                           // Reset Drainon   // Open Drain second cycle
    while  (Waterempty = 1 );        // Bitwait Waterempty , Reset     // Wait Drain
    Runtime = 180  ;                                       // SPIN
    JobPending = 1 ;                        // Set Jobpending
    motorOn = 1  ;                             // Reset Motoron       // Start Spin
    Run_nSpin = 1  ;                         // Reset Run_nspin    // SPIN
    TMR0L = 205    ;
    Jobpending = 1  ;
    INTCON.TMR0IE = 1  ;              // SetBit(INTCON, TMR0IE)// enable Timer0
    INTCON.TMR0IF = 1 ;              // setBit(INTCON, TMR0IF)   // Interrupt Timer0 Flag
    while (JobPending = 1) ;          // Bitwait Jobpending , Reset     // Wait to Finish
    Relays = 0b00001111 ;                                // ALL OFF, INITIAL State
 }              //  Goto Loopagain
}
فى الأمثلة السابقة فصلنا كثيرا لتوضيح الفروق بين اللفات و المترجمات لذا أرى أنه من الأفضل فيما يلى أن نعتمد الأسيمبلى لعائلة C51 و البيزك / باسكوم لعائلة AVR و لغة C من ميكروإلكترونيكا للبيك اختصارا للوقت و أصبح لدينا القدرة للترجمة حسبما تقود الحاجة.

المرة القادمة إن شاء الله سنتحدث عن برنامج ميكروويف منزلى ثم برنامج آخر لمعالجة ADC و ربما PWM

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

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 21-07-2018, 01:11 PM المشاركة 83   
افتراضي برنامج ميكروويف



برنامج ميكروويف

التركيب الداخلى:
ألميكروويف يحتوى على ماجنيترون وهو صمام إلكترونى يحتوى فتيلة لتسخين المصعد "كاثود" فيشع إلكترونات يجذبها المصعد "أنود" بجهد عالى يبدأ حسب الطراز من 3000 فولت مستمر لتوليد موجات ذات تردد عالى جدا فى نطاق ألميكروويف و التى توجه للحيز داخله فيمتصها الجسم الموجود فيسخن. الفتيلة قد تحتاج لخمس ثوانى لتسخن ومن ثم التحكم به عن طريق قطع التغذية العالية . قطع و توصيل جهود عالية هكذا ليس ميسورا لذا تقطع تغذية دائرة توليد الجهد العالى ، كما أن الإشعاع ضار بالأشخاص لذا تتخذ احتياطات كافية لمنع تسربه نهائيا للخارج من خلال شبكة معدنية وراء زجاج الباب تتيح ألرؤية للداخل و تمنع الإشعاع من التسرب ، لذا يوجد مفتاح switch على الباب لو لم يغلق جيدا يمنع الجهاز من العمل.
معظم الأجهزة تعمل بأزرار كنموذج الغسالة و للتغيير فقط سنستخدم لوحة الأرقام :Key Pad مع 4 مبينات 7 شرائح 7 segment display و لدينا حساس الباب مفتوح و حساس للجهد ألعالى حيث لو انخفض عن حد معين سيتوقف الماجنيترون. ستقول يمكن وضع مثبت فولت لكن أى مثبت له مدى يؤدى وظيفته فيه ولو خرج عنه لا يستجيب.
سته مخارج الأول للفتيلة و الثانى للجهد ألعالى و الثالث لمروحة التبريد و الرابع للإضاءة و الخامس للزمور و السادس لموتور التقليب
منفذ كامل 8 طرف للوحة الأرقام Key Pad و المدخل الأول لحساس الباب و الثانى الجهد ألعالى
بقى كيف نتحكم فى مبينات الشرائح السبعة.
السبع شرائح و الحل – ليس ضائع:
ما هو مبين 7 شرائح؟
بدأ منذ عهد ألصمامات الإلكترونية للحاجة لبناء أجهزة قياس تردد أو قياسات أخرى و عرضها بصورة رقمية لكونها أكثر دقة و أسرع استيعابا من المؤشر ألتقليدى ، و ظهرت عدة صور منها و كانت صورة سبعة شرائح على أركان رقم 8 العربى هى التى لاقت نجاحا كبيرا كما فى الصورة التالية الجزء الأيسر ، و لاحقا ظهرت الحاجة لكتابة أحرف فأضيف لها عدة أقسام أخرى لتكمل كتابة الأحرف اللاتينية كما فى الجزء الأوسط من الصورة .

لاحقا استخدمت للشاشات الكبيرة شرائح معدنية ملونة لتكوين الشاشات الكبيرة كما فى المطارات و مواقف القطارات و السيارات الخ وكانت تحرك بملف مغناطيسى كما تحرك تلامسات الريلاى ثم صممت مصفوفة النقاط كما فى الشكل الأيمن لتتيح رسم الحروف كافة اللغات و بعض الرسوم البسيطة مثل الأسهم و الدوائر و المثلثات و غيرها.و توجد أيضا وحدات ليد كبيرة الحجم تعمل على فولت أعلى 12 فولت , اكثر كما توجد أيضا وحدات غازية تعمل بجهود أعلى و لونها برتقالى أنسب للاستخدام الخارجى كما فى محطات الوقود الخ.
فى مشروعنا هذا سنستخدم النوع التقليدى كما بالشكل الأيسر و باستخدام المتحكم فلدينا طريقان لا ثالث لهما، الأول استخدام محلل أكواد مثل 7447,7448,7449,CD4511 - أو أرقام مثل DM9368 DM9370 و المعروفة باسم Hex to 7Seg وهى تعطى الأرقام العربية العشرة و أيضا CA3161- التى تستطيع كتابة الأحرف HELP أو استخدام المتحكم كمحلل كود.
استخدام المتحكم توفر مال بعدم استخدام متكاملات إضافية على حساب عدد الأطراف المستخدمة حيث تضع 7 أطراف للشرائح و طرف لكل مبين وفى مثالنا هذا نحتاج 13 طرف و قد نحتاج آخر للعلامة العشرية و قد تثبت فلا تحتاج لطرف. هذا قرابة 2 منفذ وهذا كثير. لو لديك تطبيق يتطلب مبينات أكثر كميزان مثلا فلن تجد أطراف تكفى .
لذا نأخذ فكرة عن كل نوع مما سبق فإن تطلب الأمر ستكون لديك فكرة أن هذا متاح.
الأرقام 7447,7448,7449 هى الأكثر شيوعا و بعضها يناسب الشاشة ذات الكاثود المشترك (عمومى متصل بالأرض) Common Cathode CC و منها ذات الأنود المشترك (عمومى متصل بالموجب) Common Anode CA و فيما عدا ذلك فلا فرق. لإضاءة الأولى تحتاج جهد موجب يمرر تيار مناسب حوالى 5 إلى 10 مللى أمبير للطرف المعنى بينما الثانية تحتاج توصيل الطرف المعنى بالأرض (طبعا من خلال مقاومة) ليسحب هذه القيمة من التيار. أيضا هذه القيمة تخص الليدات العادية أما الوحدات الكبيرة و غيرها فيرجع للداتاشيت لمعرفة الفولت و التيار المناسبين.
طالما التيار يمر فالطرف مضاء لذا لتوصيل مجموعة معا ستحتاج لوضع ترانزستور سويتش أو مفتاح على الطرف العمومي لتفعيل هذا المبين دون سواه ثم توصيل أطراف الأحرف لكتابة ما تريد. لهذا نرى المشكلة وهى ضرورة تتابع العرض حتى لا يتوقف ظهور الأرقام و يبدو غير لائق. لحل هذه المشكلة حينما نحتاج قدرة المتحكم لمهام أهم من تحديث المبينات، يمكننا أولا أن نستخدم المقاطعة ولكن هذا يسبب لنا مشكلة الحاجة للمؤقت أن يعمل على زمن عرض الرقم و زمن التحديث بعد اكتمال المبينات كلها لذا و لتحرير المتحكم كليا، يمكن وضع مساكة Latch (كورس الدوائر المنطقية) حيث يحتفظ بالرقم المراد عرضه لحين الحاجة لتعديله .

كما بالرسم يمكن استخدام المساكة ذات 8 بت Latch رقم 74373 ذات القدح بالمستوى (=1) أو 74374 ذات القدح بالحافة الصاعدة بين خرج المتكاملة المحلل للشفرة و العارض ، ولكن هذا يحتاج أن تحفظ الأرقام كلها (هنا اربع أرقام) أى تحتاج لبايت لحفظهم أما لو أضفت محلل من 4 إلى 16 ستحفظ 16 رقم و تحتاج 5 متكاملات كما بالرسم الأيسر.
أو تضع المساكة بين الميكرو و محلل الأكواد وهنا تستطيع كتابة رقمين معا و لكن ستحتاج متكاملات أكثر.
يبدو أن الحل الأيسر أفضل لكن لو لا تحتاج لكتابة حروف مع الأرقام فلدينا حل أفضل باستخدام CD4511 فهى محلل كود و معه مساكة Latch ولا أدرى لماذا لا يستغلها أحد، وهكذا تكون الدائرة ، أربعة خطوط للرقم و خط لكل شاشة

لو احتاجنا لعدد كبير مثل الموازين مثلا فقد تحتاج محلل شفرة 4:16 لتتعامل مع 16 شاشة و البعض استخدم محلل 4 إلى 16 مثل 4514 أو 4017 4022 من 4 إلى 10 أو 74138 أو 74154 كلها تتحكم فى حتى 16 مبين من 4 أطراف فقط أى لم نضيف شيئ.
المشكلة هنا أنك تحتاج فى البرنامج أن تكرر إضاءة كل المبينات على الأقل 10 مرات كل ثانية و تبقى كل منها مضاء لفترة تكفى لتراه العين وهذا يشكل عبئ كبير على البرنامج

البعض استخدم التسلسلى الشهير 74595 و لكنك ستحتاج واحد لكل مبين أى 16 متكاملة و لكن شركة صينية قدمت حلا عبقريا بمتكاملة رقمها TM1640 تتحكم فى 16 مبين 16 display من خلال خطين تسلسليين فقط وهى فى أغلب الموازين لدى البقالة . حيث تجد شاشة أمامك للوزن و أخرى أمامه ليضع الأشياء على الميزان و ثالثة تعرض السعر أو أشياء أخرى بمجموع 16 مبين

شرح مفيد لكن كان به خطأ واحد ربما غير مقصود، تقول الأرقام العربية و لعلك تقصد الإنجليزية..
معذرة و ما هى الأرقام الإنجليزية؟ لا شيء بهذا الاسم هناك أرقام لاتينية مثلا I II III IV V VI VII IIX IX X وهى من 1 إلى عشرة و كانت لا تصلح للحساب ولا تعبر عن الصفر و الأرقام الهندية التى اعتادنا عليها جميعا بمسمى خاطئ "(عربية)” و لكن نذكر أنه عالم عربى من اخترع الصفر.
إذا ماذا فى الصفر ليخترع؟
الأرقام العربية كانت تعد الزوايا و طبقا لما فى الصورة

فالشكل باللون الأسود شكل الرقم العربى و عدد الزوايا وضعت بها نقط حمراء للتوضيح.
و بقى الصفر كيف يجدون له شكل بدون زوايا ، فاقترح عالم عربى الدائرة فهى شكل بدون زوايا أى صفر.

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


المرة القادمة إن شاء الله نضع رسم الجهاز


ayam
:: مهندس جيد ::
تاريخ التسجيل: Dec 2005
المشاركات: 287
نشاط [ ayam ]
قوة السمعة:
قديم 21-07-2018, 02:05 PM المشاركة 84   
افتراضي


احسنت , احسن الله اليك , استاذي العزيز انا احاول انزل البرنامج Great Cow BASIC ولكني لم اوفق الى الان فالموقع يقف صامتا ولا ينزل شئ , هل اجد الحل عندك ؟؟


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 22-07-2018, 08:47 AM المشاركة 85   
افتراضي


جرب هذا الرابط
https://sourceforge.net/projects/gcb...8.exe/download

وهنا المزيد
https://www.google.com/search?client...UTF-8&oe=UTF-8
فإن لم تتمكن سأرفعه لك على 4SHARED


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 22-07-2018, 08:53 AM المشاركة 86   
افتراضي دائرة جهاز الميكرو ويف



دائرة جهاز الميكرو ويف
سنبدأ كما تعودنا بالمتحكم AT89x52 و لغة الآلة أو الأسيمبلى .
وضعنا مفتاح الباب على طرف INT0 و الأعلى أولوية و لأهمية إيقاف الماجنيترون سنرفع أولويته أيضا عن سواه حتى يستجاب له أثناء تنفيذ أى مقاطعة أخرى أو يمكنك ذلك بإتاحة المقاطعة فى كود باقى المقاطعات.
استخدمنا ذات الطريقة لحساب الزمن و بالتالى لدينا مقاطعة كل ثانية و ذات الطريقة مع الريلايات لتجنب لحظة التفعيل أثناء البدء.
بالنسبة للزمور فمنه نوعان أحدهما ميكانيكى فقط و يحتاج لدائرة مهتز لينتج صوت وآخر شامل دائرته وهو الأفضل وهو ما نستخدمه ، أما لو تنوى استخدام نغمات متعددة فيمكنك استخدام دائرة مكبر مثل LM386 و سماعة مناسبة.
بالنسبة للعارض ، فسنستخدم أربعة متكاملات CD4511 واحد لكل مبين . المتكاملة لها 4 طرف دخول للعدد من صفر إلى 9 و طرف دخول LT اختصارLamp Test وهى فى كل المحللات لاختبار المبين فتضاء كل أجزاءه، و طرف دخول باسم BI وهى اختصار Blanking Input وهى لإطغاء الشاشة وهذه تستخدم لتوفير طاقة البطارية عند عدم الحاجة أو تعديل شدة الإضاءة بتعديل عرض النبضة . و أخيرا LE اختصار Latch Enable وهى عندما = صفر يحلل الدخل و يظهر على المبين و عندما = 1 يحتفظ المبين بآخر قيمة عرضها و بهذا نضع الثوانى على الحافلة ثم نفعل طرف LE الثوانى بنبضة سالبة ثم نضع الدقائق و نفعل طرف LE الدقائق بنبضة أخرى.
بقى لوحة المفاتيح وهى بضع أزرار مرصوصة فى صفوف و أعمدة وفى الوحدة ذات 16 زرار تكون أربعة صفوف و أربعة أعمدة كما يلى

فى الصورة على اليسار تركيب الأزرار كما بالداخل حيث لدينا صف 1 أى R1 و صف 2 و صف 3 و صف 4 و أيضا عامود 1 أى Column 1 و اختصارا C1 و C2 و C3 و C4 . الطرف رقم 1 باللون القرمزى (الرسم الأيمن) متصل بالأحرف A,B,C,D و عندما تضع +5 فولت عليه لن يظهر فى أى مكان حتى تضغط على أحد الأزرار السابقة فإن كان A سيظهر على الخط الأحمر العلوى و الخارج من طرف 8 و إن كان B سيخرج من الأزرق رقم 7 و هكذا، الآن نبدل الفولت +5 من الطرف 1 إلى 2 ولا معنى إطلاقا لإبقاؤه على أكثر من عامود ، الآن سيستجيب للضغط على الأرقام 3،6،9،علامة الشباك # و هكذا
إذن علينا أن نضع جهد على طرف من الأعمدة ثم نفحص من أى صف خرج أو العكس نضعه على صف و نبحث من أى عامود قد خرج.

بقى أن نحدد هل الجهد ألعالى مسموح به أم انخفض عن المسموح ،أعلم أن الكثير قد أكمله بالمكبر LM741 و اختبره على محاكى ووصل لتمام الأمور، لكن للأسف واقعيا LM741 لا يعمل بتغذية أقل من 9 فولت كما أن خرجه يعلو عن جهد VEE بقيمة 2 فولت و يقل عن Vcc بقيمة 2 فولت أخرى أى لم يبقى – بفرض أنه سيعمل – سوى واحد فولت فقط وهذا لا يناسب دوائر المنطق عموما العاملة على 5 فولت . البعض ذهب خطوة أخرى أفضل باستخدام LM358 وهذا موفق من جهتين أنه يعمل من 3 فولت فصاعدا و يصل لجهد الأرضى أو على أقصى تقدير 0.2 فولت لكن مشكلة Vcc ما زالت قائمة و 3 فولت مع تباين درجات الحرارة الخ غير مأمونة النتائج لذا نستخدم مقارن LM393 و هو يعالج هذه الخاصية لآنه فى وضع خرج = 1 يكون مفتوح Open Collector و يترك للدائرة أن تحدد قيمها، و بوضع مقاومة جذب لأعلى يمكنك أن ترفع الخرج حتى 30 فولت لو شئت و ما زلت كما أنت تستخدم تغذية +5 فولت و تقارن جهود أقل من 5 فولت.

الجهد المقوم بفرض أنه من مصدر 9 فولت سيكون قرابة 13 فولت و نحتاج منه قيمة أقل من +5 فولت لذا سنأخذ ثلثها أو ربعها من خلال مقاومتى R3,R4 على الطرف الموجب الغير عاكس و على الطرف السالب بمجزئ جهد نضع جزء من 5 فولت. طالما 220 فولت بخير سيكون الطرف الغير عاكس أعلى من العاكس و الخرج = 1 بسبب المقاومة R7 و لو هبط الجهد 220 نستطيع أن نحدد أى قيمة نضبط عليها المقاومة المتغيرة POT فيهبط الخرج إلى صفر
المقاومةR5 لمنع الاهتزاز حول نقطة الانقلاب ، و ندخل هذا على المقاطعة INT1 لأهميتها أيضا فلو انخفض الجهد ألعالى لن تتولد موجات الميكرو ويف و من ثم تظل الطاقة تفقد داخله تيار × فولت دون سحب منها للخارج و من ثم ترتفع حرارته وقد يتلف. نظرا لأن المتكاملة بها 2 مقارن فيمكن توصيل الثانى كحساس للحرارة كما بالدائرة و نظرا لعدم توافر مدخل مقاطعة ثالث فيمكن جمعه مع حساس الفولت وهذه ميزة المقارن أنه لا يحتاج دايودات كمكبرات العمليات ، و يبقى هذا الأمر جدلا علميا فقط لأن واقعيا يوضع حساس كهروميكانيكى على الماجنيترون يقطع التيار عند ارتفاع الحرارة مثل ألذى فى مكوى الملابس و أجهزة مسخنات الهواء و تجفيف الشعر الخ كما أن الفولت يجب تثبيته بمثبت لو يتغير بمدى أوسع من المسموح له فتوقف العمل فى منتصف التسوية غالبا ما يفسد مذاق الطعام ، لذا لا جدوى منه عمليا.

الآن لدينا الدائرة هكذا و نبدأ التفكير فى هيكل البرنامج و حتى المرة القادمة إن شاء الله حيث نبدأ البرمجة.



ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 23-07-2018, 09:43 AM المشاركة 87   
افتراضي هيكل برنامج الميكرو ويف



هيكل برنامج الميكرو ويف
بعد تهيئة المنافذ و المقاطعات و المتغيرات، نحدث المبينات ثم نقضى الوقت فى قراءة لوحة المفاتيح ، إن كان هناك رد ، نستجيب له و إلا نكرر العمل ، حسنا هيا نبدأ.

حسنا الآن عندما يحدث INT0 الخاص بالباب سنوقف الماجنيترون. و المؤقت لكننا نريد أن نراقب الباب أيضا حتى يغلق فنعيد الأمور كما كانت. نعلم انه سيكون 1 و عند فتح الباب يصبح صفر بفعل السويتش
حسنا هناك قاعدة فى الصناعة تقول انزع التحكم يجب أن تستقر الأمور ولو نزعنا السويتش سيمكن فتح الباب و تعريض المستخدم للخطر. لا أقول نزع المفتاح حرفيا ولكن لو قطع السلك الذاهب إليه مثلا... إذن ما الحل؟ علاج هذا الموقف صعب و غير آمن فمن المعلومات الأولية عن أى حاسب أنه "يهنج" وهى مشتقة من كلمة Hang بمعنى "يعلق" لأنه يدخل فى دورة لانهائية .
البعض سيقول مؤقت الحماية Watch Dog Timer أو مؤقت كلب الحراسة، حسنا رغم أنه غير مدعوم بهذا الطراز إلا أنه يمكن إضافته خارجيا بعداد CD4060 لكن ماذا يحدث لو لم يستجيب؟
لذا و رغم أن كل الأجهزة فى السوق تعتمد ميكرو إلا أنها تستخدم مفتاح لقطع التغذية عن الماجنيترون طالما الباب مفتوح.
هذه دائرته من مواقع على النت

كما سبق أن ذكرنا فالماجنيترون هو صمام ثنائى معدل فهو له فتيلة تسخن المهبط حيث تخرج منه الإلكترونات بتأثير الحرارة و يجذبها المصعد إليه لذا وجب أن يكون جهده عاليا و كلما زاد الجهد ارتفعت الطاقة الناتجة.
لا جدوى من انتقال الإلكترونات من هذا لذاك لذا يوضع متعامدا على مسارها مغناطيس قوى فبدلا من التوجه مباشرة من المهبط للمصعد، تدور حول المهبط أثناء حركتها أى يكون مسارها لولبيا.
المصعد Anode مكون من عدد من الفجوات الرنانة و كما هو مشروح فى كورس "خطوط نقل القدرة و مقدمة عن الهوائيات" فهذه الفجوات هى دوائر رنين و بتغذيتها بهذا السيل من الإلكترونات تهتز و تتكون فيها طاقة بتردد الرنين و من ثم يمكن سحبها للخارج من خلال العروة المرسومة أسفله لتوجه لما يراد بعد ذلك.
الآن تصادم الإلكترونات بالمصعد يولد حرارة يجب تسريبها لذا يجب ربط المصعد بمبرد كبير كافى.
المصعد سيكون عليه بضع الآف من الفولتات فكيف ستعزل هذه الكتلة؟ و كيف تسهل الصيانة أيضا؟ يجب أن يفكر المصمم فى كل الأمور المتاحة و ليس فقط كيف يحل المشكلة!!
الحل أن نجعل المهبط هو السالب بالنسبة للمصعد و بذلك يمكننا أن نربط المصعد الكبير الكتلة و الحجم بدون خوف بالأرضى أى الشاسيه و نضع عليه مروحة أيضا و كل ما نحتاجه فقط هو عزل الفتيلة بالمهبط (أو الفتيلة فقط باعتبار صنعها كمهبط بدون مهبط منفصل كما بالرسم السابق ) و هذا سهل لكونها تغذى من محول. عادة يولد الجهد ألعالى جدا بمرحلة مضاعف فولتية كما بالصورة.
الآن هذه هى الدائرة حيث يستخدم محول لتوفير الجهود المطلوبة و مجموعة من المفاتيح و السويتشات التى تقطع التغذية عن المحول حال فتح الباب . غنى عن الذكر أن الإلكترونيات تغذى من محول آخر منفصل متصل دوما بالمصدر فالبعض مزود بساعة و جدول تشغيل.

الآن تحكم الميكرو سيكون للتوقيت فقط فعندما ينتهى الوقت سيفصل المتحكم الماجنيترون و أيضا الموتور مرتبط بالإضاءة و المروحة فلا جدوى من تحكم منفصل لكل منهم . الآن المخارج ثلاثة فقط واحد للزمور و واحد للتشغيل/إيقاف و ثالث لقطع الجهد العالى للتحكم فى نسبة التسخين فلا يمكن تغيير جهد الماجنيترون لهذا الغرض و الدخول للباب و قياس الزمن وحتى حساس الفولت و الحرارة يمكن الاستغناء عنهما لوجود بدائل وتصبح الدائرة هكذا

التهيئة:
سنحتاج لتهيئة البرنامج ليتواءم مع هذه الطلبات و هكذا تصبح التهيئة كما يلى
سنوقف كل المخارج. وتهيئه المقاطعة كما فى الجهاز السابق فقط نعدل خطوة هى رفع أولوية INT0 بجعل IP=1 ونعدل TCON ليجعل قدح بالحافة أيضا
كود:
MOV	TCON,#3		; Clear All interrupts, 	SETB	IT0 IT1  Edge triggered
بهذا تصبح التهيئة
;INCLUDE 89s52.mc
;=====================================
; DEFINITIONS
;=====================================
Relays		EQU	P0
Displays	Equ	P1
KeyPad		EQU	P2
Controls	EQU	P3
HIv_Off		Equ	Relays.0
Off_Non		EQU	Relays.1
Buzzer		EQU	Relays.2

Col4		EQU	KeyPad.0
Col3		EQU	KeyPad.1
COl2		Equ	KeyPad.2
Col1		Equ	KeyPad.3
Row4		EQU	KeyPad.4
Row3		EQU	KeyPad.5
Row2		Equ	KeyPad.6
Row1		Equ	KeyPad.7

SecLatch	Equ	Controls.0
MinLatch	Equ	Controls.1
DoorOpen	Equ	Controls.2

;=====================================
; VARIABLES
;=====================================
SecLeft		EQU	10
MinLeft		EQU	11
PowerSel	Equ	12
CurrPwr		Equ	13
LowHeat		Equ	PSW.1
JobPending	Equ	F0
KeyValue	EQU	B
NoKey		Equ	B.7

كما سبق مسميات المنافذ و الأطراف و لاحظ هنا أننا أعطينا P1 اسم Displays فهو سيعطى البيانات لكل رقمين معا أى الثوانى آحاد و عشرات فى مرة ثم الدقائق فى مرة. الآحاد فى البت من صفر إلى 3 و العشرات من 4 إلى 7. و أيضا لوحة الأزرار KeyPad و أعطينا كل طرف اسم من واقع تركيبه صف Row أو عامود Col و رقمناهم 1،2،3،4 و استخدمنا كثير من الخيارات السابقة للتايمر و الزمن مستمر أم منتهى. يلى ذلك خانة للثوانى و أخرى للدقائق كما سبق و حددنا المراكم B فيه قيمة الزر ألذى ضغط عليه و نريد أن نعلم هل تم ذلك أم لا فوضعنا البت NoKey و سيلى ذلك تفصيلا إن شاء الله فى شرح برنامج الأزرار. عرفنا أيضا ثلاث أطراف واحد Off_Non وهو =1 لقفل الجهاز و صفر للتشغيل وهو من الرسم يوثر على الريلاى الرئيسى ألذى يوقف كل شيئ و الثانى Hiv_Off لقطع الجهد العالى بينما باقى الجهاز يعمل .
المرة القادمة إن شاء الله نكمل



ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 24-07-2018, 07:27 AM المشاركة 88   
افتراضي



فى خانة صفر وهى الريست انتقال لبدء البرنامج Startit أى Start-It فكما سبق كلمة start محجوزة. و أيضا متغير لنعلم كم نسبة تخفيض الطاقة PowerSel و حساب الطاقة الحالية فى CurrPwr و لو تم اختيار هذا النسق من عدمه الراية LowHeat فى مسجل حالة البرنامج البت 1 أى PSW.1
كود:
;=====================================
; RESET and INTERRUPT VECTORS
;=====================================   
org  000h			  	; Reset Vector
	SJMP   Startit
org	003h 				; Address of INT0 (IE0)Emergency  	
	SETB	Off_Non 		; stop Outs and motors etc 
	CLR	TR0			; Stop counter
	JB	doorOpen, $
	AJMP	EmrgSub
	
org	00Bh				; Address of Interrupt Timer 0 (TF0)		
	MOV	A,SecLeft		; sec
	JZ	DEC_Min		; if zero then correct
	ADD	A,#99h			; Dec jump if not zero
	DA	A
	MOV	SecLeft,A
	SJMP	TOUT
			
   DEC_Min:
   	MOV	A,MinLeft		
   	JZ	AllDone				; Sec =0 and Min = 0
   	ADD	A,#99h
	DA	A			; decrement min
	MOV	MinLeft,A
	MOV	SecLeft,#59h
		
TOUT:
	JNB	LowHeat,ShowAndRet
	INC	CurrPwr
	MOV	A,CurrPwr
	CJNE	A,#11,NotYet
	Mov	CurrPwr,#0
  NotYet:	
	MOV	A,PowerSel
	SUBB	A,CurrPwr	
	Mov	HIv_Off,C
	SJMP	ShowAndRet
  AllDone:
      	CLR	Jobpending
	CLR	TR0		; Stop counter
	Clr	LowHeat		; Clear if selected
	Setb	Off_Non		; Power Off		
	SETB	HIv_Off		; Turn Off HI Voltage
	Clr	Buzzer
	Mov	R7,#0
	Loop1:
		Mov	R6,#0
	Loop2:	nop
		nop
		DJNZ	R6,Loop2
	DJNZ	R7,Loop1
	SETB	Buzzer   		
ShowAndRet:	
	ACALL	ShowTime	; display New Time
	RETI

;=====================================
; CODE SEGMENT
;=====================================

Startit:	
يلى ذلك الخانة 3 وهى INT0 (IE0)Emergency حال فتح الباب ، قلنا أن كل شيء سيتوقف بالمفاتيح لكن نحتاج إيقاف التايمر ثم نراقب غلق الباب (كما سبق فى الغسالة) ثم نعيد التشغيل. لو لاحظنا أن هذه الخطوات أكثر من 8 خانات لذا نحتاج لأمر قفز لأى مكان لاستكمال الكود بتشغيل التايمر و تشغيل الموتور ثم ننهيه RETI أى العودة من المقاطعة. هذا الكود الإضافى يمكن وضعه فى أى مكان فى الذاكرة لذا وضعناه مثلا بعد كل البرنامج حيث نضع باقى الوظائف أو حيثما شئت
كود:
EmrgSub:
	CLR	TR0		; Start counter
	CLR	Off_Non	; Restart All 
	RETI
نلاحظ هنا أن الانتقال من الجزء الأول للثانى لا يعنى شيئ للمقاطعة – فقط أمر آخر للتنفيذ و يظل فى نمط المقاطعة حتى يجد أمر RETI ولا يهم أين. يلى ذلك فى الخانة11 أى هيكسا B مقاطعة التايمر صفر وهى عد الوقت، و نذكر أننا فى المرة الماضية لم نتمكن من عد آخر 59 ثانية لتبسيط الكود لذا سنجرى تعديلات لنصحح الوضع.

سنبدأ أولا باختبار الثوانى فإن لم تكن = صفر إذن هناك وقت ما للتشغيل ، فننقص الثوانى بواحد ثم نختبر إن كان يعمل بطاقة مخفضة فننفذها كما سيلى لاحقا و أخيرا ننتقل لعرض الزمن و العودة.
فإن كانت الثوانى = الصفر ، سننتقل للعنوان DEC_Min اختصار Decrement Minutes حيث سنختبر الدقائق ، لو أيضا = صفر إذن انتهى الوقت و ننتقل للعنوان All Done حيث نعيد الأمور لبدايتها و نغلق الطاقة و نطلق الزمور ثم ندخل فى دورة داخل أخرى للحصول على زمن طويل ثم نوقف الزمور و نعود. أما لو الدقائق لا تساوى صفر إذن سننقصها بواحد و نعيد الثوانى 59 ثانية ثم نعرض الوقت و نعود.
الآن كيف نقلل الطاقة للفرن؟؟ مما سبق علمنا أن الماجنيترون لا يقبل تغير فى الجهد العالى و لا يقبل تعديل تسخين الفتيلة لذا لم يعد لدينا سوى تقطيع الجهد العالى. ستفكر فورا فى عرض النبضة PWM وهو أمر منطقى إلا أن المشكلة كيف فى جهد بضع الآف من الفولت و إبقاء السعر مناسب للاستخدام المنزلى ؟؟
لحسن الحظ أن انتقال الحرارة بطيء جدا فى الطعام و ظهور أثره يحتاج بعض الوقت و من المشاهدات العملية نجد أن البعض يرفع الإناء ثم يعيده ، حسنا هذا ما نفعله بالضبط. نطلق الطاقة ثوانى و نغلقها ثوانى فالثواني تناسب وحدة التقويم ذات الجهد العالى لتكتمل طاقتها فى جزء من الثانية و تفرغ أيضا عند قطعها فى جزء من الثانية، لذا سنختار وحدة زمنية و لتكن 10 ثوانى و نطلق الطاقة ثانية و نوقفها 9 ثوانى لطاقة 10% أو نطلقها ثانيتين و نغلقها 8 وهكذا.
لهذا وضعنا متغير باسم PowerSel و فيه نختار كم ثانية نطلق الطاقة و آخر لنعد كم من هذه الثوانى العشرة قد انقضى. أظن الفكرة أصبحت واضحة الآن ، مع كل ثانية تحدث مقاطعة و بعد تعديل الزمن المتبقى ، سنذهب عند عنوان TOUT وهو فقط للتذكرة فإن كانت راية الطاقة المخفضة مرفوعة LowHeat سنزيد CurrPwr بواحد بالأمر INC CrurPwr ولاحظ أنه أمر مباشر على الذاكرة ولا يمر بالمراكم (لا مثيل له فى ميكروتشيب) ثم نضع الناتج فى A ونرى هل =11 أى عددنا الثوانى العشرة بالأمر CJNE A,#11,NotYet فإن كان =11 نجعله = صفر (لآحظ هنا أننا نغير ما فى الذاكرة و ليس المراكم وبهذا سنوفر أوامر الحفظ للذاكرة مرة أخرى) ثم نكمل فنأخذ القيمة المختارة PowerSel للمراكم A و نطرح منها القيمة الحالية و بالتالى سيكون C = 1 أو = صفر طبقا لما إن كان الوقت قد انتهى فننسخه مباشرة لطرف الخاص بتفعيل الجهد العالى بالأمر Mov Hiv_Off,C

الآن كيف سننقص واحد من متغير الثوانى أو الدقائق؟
هل هذا سؤال؟ نطرح واحد أو الأفضل أيضا Dec اختصار Decrement..مهلا نريد معرفة أمر أو إثنين بخصوص الأرقام بالكود العشرى BCD اختصار Binary Coded Decimal
الأرقام بالكود العشرى BCD :
تحفظ هذه الأرقام كما العادية فى بايت أو أكثر لكن كل بايت تحفظ فى النظام الثنائى من صفر إلى 255 لكن فى هذا النظام من صفر إلى 99 ولا يوجد أحرف فيه و يماثل النظام العشرى العادى المعتاد و هو وضع لتسهيل التعامل مع المبينات و الطباعة الخ. أى محاولة طباعة لرقم فسواء علمت بهذا أم استخدمت أمر لغة عالية تخفى عنك الخطوات، سيتم تحويله إلى أرقام BCD أولا ثم كل رقم مثلا 61 فى بايت واحدة و تريد طباعته من اليسار لليمين ستأخذ العشرات أولا بحذف الآحاد = 60 ثم تبدله فيتحول إلى 06 ثم تضيف إليه 030h ثلاثون هيكسا ليتحول من عدد لحرف آسكى ASCII Code تفهمه الطابعة أو شاشة LCD أو أى جهاز آخر.
مشكلة هذا العد أن تنفيذه سيكون بعدادات ثنائية أصلا فيها بعد 9 يوجد A ثم B إلى F و هو لا يجوز فى هذا النظام فيجب أن تعلم ما إن كان العد أكبر من 9 تصححه ، أيضا المشكلة الثانية أن من الآحاد للعشرات فالمحمول = 16 بينما يجب أن يساوى 10
فى الميكرو بروسيسور به مجموعة من الأعلام مخصصة لهذا الحساب و من ثم بعد الجمع أو الطرح كانت هذه الأعلام تفيد لتصحيح الناتج بتعليمه واحدة هى DAA اختصار Decimal Adjust Accumulator .
هل تذكر بداية الحوار حول المتحكم و ذكرنا أنه RISC ؟ حسنا من ضمن هذه الأمور التى اختصرت فى تركيبه عملية الطرح و بذلك أصبح ليس لدينا سوى الجمع ADD أو الجمع بالمحمول ADDC اختصار Add with Carry
الآن أصبح إنقاص واحد ينفذ بإضافة 99 هيكسا لأن مثلا 49 + 99 = 148 بينما الواحد سيكون فى خانة Carry و الباقى 48 فى المراكم A أى 48 أقل من 49 بواحد. ولا ننسى أن نضيف الأمر DA A للتصحيح بعد الجمع،

هنا نقطة يجب أن نفهمها وهى ما بقى من كود فى هذه المقاطعة. فنحن أضفنا 99 هيكسا للثوانى ثم صححنا ثم حفظنا و قفزنا لو لم يصل للصفر بعد لننهى بالعرض أما لو كان بصفر فلن يحدث الانتقال و
كود عرض الوقت
لكى نعرض الوقت نحتاج لعمل Subroutine لأننا سنطلبه كثيرا لذا نكتبه و نضعه فى أى مكان ولكن عادة ما تكون هذه صغيرة و تحتاج مراجعة و تأكد من سلامتها ثم ننساها لذا لو وضعت فى البدء لن تكون ذات تأثير على سير الأمور لكن ستهتم بكتابة باقى الكود ألذى يودى الوظيفة الرئيسية و من ثم ستظل أغلب الوقت تعبر هذه الأكواد التى تمت ولا حاجة لها أن تكون فى الطريق لذا من الأفضل دوما وضعها فى آخر البرنامج و الكود ألرئيسى فى الأول. لذا سنعرضه الآن لكن مكانه فى البرنامج فى آخره.
لنكتب على الشاشات و طبقا للداتاشيت نحتاج وضع البيانات على المداخل ، و لو كان طرف LE اختصار Latch Enable = صفر ، ستظهر البيانات محلله على الشاشات و تتبع تغيرات الدخول و عندما تصير = 1 ستبقى آخر قيمة ظاهرة ولا تتغير بتغير الدخول. لذا نضع الثوانى على الحافلة ثم نخفض الطرف seconds للصفر ثم نعيده فتظهر الثوانى و تثبت ثم نضع الدقائق و نكرر و بديهى أن الترتيب لا يفرق. و سنجده لاحقا و الكود هكذا
كود:
ShowTime:		; ======== Display Time ========
	MOV 	Displays,Minutes
	CLR	MinLatch
	nop
	Setb	MinLatch
	MOV	Displays,Seconds
	CLR	SecLatch
	nop
	SETB	SecLatch
	RET

أول أمر ضع الدقائق على الحافلة ثم الأمر الثانى ضع صفر على MinLatch وهو من الرسم المتصل بطرف LE لوحدتى الدقائق و الأمر الثالث NOP اختصار No Operation أى فقط يستهلك بعض من الوقت حتى تثبت الدوائر الخارجية ثم نضع عليه واحد مرة أخرى حتى لا يقبل أى تعديلات. ثم بعد ذلك نضع الثوانى و نكرر مع SecLatch لتظهر الثوانى و تثبت ثم الأمر RET وهو للعودة من Subroutine .

ولو أنت من عشاق استخدام الميكرو لفك الشفرة فيمكنك استبدال محللات الشفرة CD4511 و استخدام مسجلات إزاحة 74HC595 و بذلك تحتاج لأقل عدد من الأطراف ثلاثة فقط و هنا يمكننى أن اقدم AT89S4051 وهو متحكم من ذات العائلة ولكنه صغير الحجم و يمكنه أن يكون أسرع من الأخريات لأن به خاصية X2 التى تمكنه من العمل على نصف تردد الكريستال بدلا من 1/12 كما أنه يعمل من 2.7 فولت و حتى 5 فولت و به ريست مع انخفاض التغذية و من ثم لا حاجة لعمل دائرة لها و به 3 عدادات 16 بت و مقارن تماثلى يسبب مقاطعة عند عدة أحوال يفاضل بينها بتعديل فى مسجل خاص منها أن يعالج تأثير الأزرار. و من عدد الأطراف نجد لدينا طرف واحد أقل من المطلوب و يمكن أن نستغنى عن كاشف انخفاض الجهد ألعالى أو الإبقاء عليه و الاستغناء عن دائرة حساب الزمن من 50 ذ/ث و تستخدم العدادات الداخلية للحساب باستخدام تايمر2 فى وضع 16 بت ذاتى التحميل. و باستخدام الكريستال سيكون أدق من 50 ذ/ث . المتحكم أيضا به PWM يعمل بدقة 8 بت. و له 6 مصادر للمقاطعة مع 4 مستويات للأولوية بدلا من مستويين و به ذاكرة برنامج 4 ك.
باستخدامه تصبح الدائرة هكذا

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

كل الدوائر السابقة لم تختلف فى جزئية لوحة المفاتيح Keypad فهى غالبا غير متباينة و نادرا ما تتفاقم الأمور للحد ألذى يجعلنا نفكر كيف نستخدم محللات شفرة Decoders لتخفيض الأطراف من 8 لأربعة أطراف فقط ولكن للضرورة أحكام لذا سيكون من المفيد أن نعلم كيفية قراءتها و بالأسيمبلى أولا و هو ما يسهل تقليده بأى من اللغات العالية وهذا موضوعنا القادم إن شاء الله.



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