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

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

abo karem
:: مهندس ::
تاريخ التسجيل: May 2009
المشاركات: 46
نشاط [ abo karem ]
قوة السمعة:0
قديم 19-07-2020, 11:31 AM المشاركة 1   
افتراضي مساعدة من اهل الخبرة في مشروع عداد بسيط Twitter FaceBook Google+



اريد عمل مشروع عداد تصاعدي من 0 الي 9 مكون من 7segment واحدة و pic16f877a بحث اقوم بضبطه علي خمسه مثلا يعد لحد خمسه ثم يشغل ريلاي وتصفير للعداد
اشكركم جزيلا

اعلانات

abo karem
:: مهندس ::
تاريخ التسجيل: May 2009
المشاركات: 46
نشاط [ abo karem ]
قوة السمعة:0
قديم 11-08-2020, 04:09 PM المشاركة 2   
افتراضي


شكرا للمساعدة

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

الصورة الرمزية احمدمعاطى
احمدمعاطى
:: مهندس جيد ::
تاريخ التسجيل: Apr 2009
الدولة: مدينة الاسكندريه
المشاركات: 271
نشاط [ احمدمعاطى ]
قوة السمعة:0
قديم 11-08-2020, 09:14 PM المشاركة 3   
افتراضي


تفضل اخى
https://www.4shared.com/rar/UFEcel1wiq/__online.html?


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


اريد عمل مشروع عداد تصاعدي من 0 الي 9 مكون من 7segment واحدة و pic16f877a بحث اقوم بضبطه علي خمسه مثلا يعد لحد خمسه ثم يشغل ريلاي وتصفير للعداد
اشكركم جزيلا
السلام عليكم

تفضل اخي





كود:
  

  //  ENG/Adalla Hygazy  //
  // 7SEGMENT  Counter  //
  //     PIC16F877A     //
  //    KH 8M         //
  // DATA 2020/8/12   //
 unsigned short mask(unsigned short num);
 unsigned int  SEMENT=0,m1=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(PORTD.F5==0){  PORTB=mask(SEMENT); }

    if(PORTD.F5==1){  PORTB=mask(m1);     }
    
    
    
     if(PORTD.F3==1){ SEMENT=0; PORTC.F0=0; }
    
    
  }
}


        void main(){
        InitTimer0();
        TRISB=0;   PORTB=0;
        TRISC=0;   PORTC=0;
        TRISD=248; PORTD=0;

        while(1){


       if(PORTD.F5==1)
       {  
       
        if(PORTD.F7==1){m1++; delay_ms(250); }
        if(PORTD.F6==1){m1--; delay_ms(250); }
        
        if( m1>9 ){  m1=0;  }
        if( m1<0 ){  m1=9;  }
       }

       if( m1 >0 && SEMENT == m1){PORTC.F0=1; }

      if(PORTD.F4==1){delay_ms(10); while(PORTD.F4==1){  }  SEMENT++;   }

}
}
unsigned short mask(unsigned short num){
switch (num){

case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;

}
}


تحميل المشروع https://drive.google.com/drive/folde...Im?usp=sharing

استمر بالضغط علي مفتاح SET + UP لضبط واختيار رقم العداد
استمر بالضغط علي مفتاح SET + DOWEN لضبط واختيار رقم العداد
مفتاح ++ TEST كل ضغطه ليبدأ تشغيل العداد
مفتاح REST لتصفير العداد



بالتوفيق


.


Nour light
:: مهندس ::
تاريخ التسجيل: Apr 2019
المشاركات: 15
نشاط [ Nour light ]
قوة السمعة:0
قديم 12-08-2020, 01:29 PM المشاركة 5   
افتراضي


ممكن نفس العداد ولكن يعمل من ١الى ٩٩٩٩


abo karem
:: مهندس ::
تاريخ التسجيل: May 2009
المشاركات: 46
نشاط [ abo karem ]
قوة السمعة:0
قديم 14-08-2020, 01:33 PM المشاركة 6   
افتراضي


شكرا استاذي الكريم


abo karem
:: مهندس ::
تاريخ التسجيل: May 2009
المشاركات: 46
نشاط [ abo karem ]
قوة السمعة:0
قديم 14-08-2020, 01:45 PM المشاركة 7   
افتراضي


توقعت من المهندس الكبير عبد الله حجازي المساعدة نظرا لانه ساعدني كثير فى السابق
الف شكر لحضرتك

بس ممكن تعديل بسيط لو امكن

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

ومعلش هل ممكن لما العداد يوصل للرقم اللي انا ضابطه يرجع للصفر تاني

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً salah56bachir ( شكر العضو على هذه المشاركة )

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


توقعت من المهندس الكبير عبد الله حجازي المساعدة نظرا لانه ساعدني كثير فى السابق
الف شكر لحضرتك

بس ممكن تعديل بسيط لو امكن

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

ومعلش هل ممكن لما العداد يوصل للرقم اللي انا ضابطه يرجع للصفر تاني

تفضل أخي
تم تعديل واضافة ما طلبته

لاحظ الصور مع الشرح




أخي توجد خطوات لضبط العداد لكي يعمل بشكل صحيح
حضرتك طلبت أن العداد يبدأ في العد بشكل مستمر عند قفل المفتاح TEST اللذي اصبح
اسمه بعد التعديل START
وهنا لازم نحدد للعداد وقت العد يعني مثلا هيذيد العدد بواحد كل سانيه ؟

وهنا موجود مفتاح لضبط سرعة العداد تبدأ بواحد سانيه الي 9 سواني ..

انظر الصورة اعلاة تجد مفتاح اسمه TEMR_SET استمر بالضغط
علي هذا المفتاح + مفتاح UP أو DOWEN
لأختيار وضبط سرعة تبديل العدد
ولاحظ عند الضغط علي مفتاح TEMR_SET يضوي ليد اسمة Time ليخبرك أنك تختار وقت التبديل
أو سرعة العداد

بعد أختيار سرعة تبديل العداد حرر مفتاح TEMR_SET
وانتقل الي مفتاح SET_counter واستمر بالضغط + مفتاح UP أو DOWEN لضبط رقم العدد

ثم حرر مفتاح SET_counter واضغط علي مفتاح START ليبدأ العداد في العد

صورة توضح اختيار العدد



صورة توضح وصول العداد للرقم المختار




البرنامج الجديد
كود:
  

  //  ENG/Adalla Hygazy  //
  // 7SEGMENT  Counter  //
  //     PIC16F877A     //
  //    KH 8M         //
  // DATA 2020/8/12   //
 unsigned short mask(unsigned short num);
 unsigned int  SEMENT,Time,counter,X1,X2;
 
//----------------------------------------------------------------------------------//
//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(PORTD.F5==0 && X2==0){  PORTB=mask(SEMENT);     }

    if(PORTD.F5==1 && X2==0){ PORTB=mask(counter);   PORTC.F6=1; }
     else PORTC.F6=0;
     
    if(PORTD.F2==1         ){ PORTB=mask(Time);X2=1; PORTC.F7=1; }
     else PORTC.F7=0;
     
    if(PORTD.F2==0         ){  X2=0;}
    
    
  }
}


        void TEMER()
      {

       for(X1=0; X1<Time; X1++){ delay_ms(1000); }

      }
       
       
       
        void main(){
        InitTimer0();
        TRISB=0;   PORTB=0;
        TRISC=0;   PORTC=0;
        TRISD=252; PORTD=0;

        while(1){


       if(PORTD.F2==1)
       {  
       
        if(PORTD.F7==1){Time++; delay_ms(250); }
        if(PORTD.F6==1){Time--; delay_ms(250); }
        
        if( Time>9 ){  Time=0;  }
        if( Time<0 ){  Time=9;  }
       }
       
       
        if(PORTD.F4==1 && counter>0 && PORTD.F5==0 && PORTD.F2==0 ){  TEMER();SEMENT++;                   }
        if( counter >0 && SEMENT == counter){PORTC.F0=1;delay_ms(2000); PORTC.F0=0; SEMENT=0;}



        if(PORTD.F5==1)
     {

        if(PORTD.F7==1){counter++; delay_ms(250); }
        if(PORTD.F6==1){counter--; delay_ms(250); }

        if( counter>9 ){  counter=0;  }
        if( counter<0 ){  counter=9;  }
        
       
     }



}
}
unsigned short mask(unsigned short num){
switch (num){

case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;

}
}




تحميل المشروع https://drive.google.com/drive/folde...S-?usp=sharing

بالتوفيق


..


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 15-08-2020 الساعة 05:02 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً salah56bachir ( شكر العضو على هذه المشاركة )
إضافة رد

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

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

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


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

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