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

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

TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:0
قديم 06-01-2017, 10:30 PM المشاركة 1   
افتراضي زر واحد يتحكم في عده وظائف Twitter FaceBook Google+



اريد ان اتحكم في عده متغيرات عن طريق زر واحد
كل ضغطه زر يكون حركه فلاش ( ليد ) مختلفه عن الاخرى
حاولت ان اعملها ولكن هذه الطريقة هذه بها العديد من المشاكل
هل من كود عملي ( احترافي ) استطيع من خلاله تنفيذ المطلوب من دون مشاكل


اللغه ميكرو سي
المتحكم pic16f716



كود:
        char x=0;
        void main() {

trisb.f4=0;
trisb.f2=1;
portb.f4=0;
 while(1){
 
      if (portb.f2==1)  {  delay_ms(40);  x++;  }
      if (x==4)  {    x=0;         }
      
      
      if (x==1)  {    portb.f4=1; delay_ms(100); portb.f4=0; delay_ms(100); }
      if (x==2)  {    portb.f5=1; delay_ms(300); portb.f5=0; delay_ms(300); }
      if (x==3)  {    portb.f6=1; delay_ms(700); portb.f6=0; delay_ms(700); }


}
}

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

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 07-01-2017, 04:44 AM المشاركة 2   
sun


اخى
كيف وصلت الرجل (portb.f2==1) فى الدائرة .

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

احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 07-01-2017, 06:06 AM المشاركة 3   
افتراضي


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


TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:0
قديم 07-01-2017, 09:09 PM المشاركة 4   
افتراضي


لقد قمت بتوصيل مقاومه رفع من قبل وزدت زمن التاخير دون جدوى

-------------------

هذه الطريقة فيكتابه الكود يرفضها كل المبرمجين ... لايوجد مبرمج يقبلها
لانها بالاساس ليست طريقة عمليه على الاطلاق

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

انا اسال ان كان هناك طريقة افضل من هذه
انا فتحت برنامج الميكرو ووجدت هناك مكتبه اسمها
button library
ولكن مافهمت منها شيء
ياريت امثلها عليها

وامثله من الانتربت
حتى نعمل شيء عملي ومفيد
وشكرا


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 08-01-2017, 12:05 AM المشاركة 5   
sun



اخى العزيز بالنسبة لدالة button :

كود:
if (Button(&PORTB, 0, 40, 1)) {               // Detect logical one       oldstate = 1;                              // Update flag     }
كود:
Button(&portb البورت الذى يحتوى المفتاح,pin number connected to switch, time delay for debounce, 0 or 1 state);
بخصوص العنصر الاخير و هو :
كود:
 0 or 1 state
اذا كان الضغط على المفتاح يدخل 1 على رجل البورت فاكتب 1
و العكس اكتب 0

ملاحظة : فى البرامج الاحترافية لا يستخدم delay كما قلت , ولكن يستخدم دالة millis or micros حيث انهما لا يجعلان الميكرو فى حالة انتظار دون عمل , لانهما يعتمدان على التايمر الداخلى للميكرو .



التعديل الأخير تم بواسطة : مشتاق الله بتاريخ 08-01-2017 الساعة 05:07 AM

TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:0
قديم 09-01-2017, 05:19 AM المشاركة 6   
افتراضي


هل يوجد مثال وكود كامل
وشكرا لك


TIME0
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
المشاركات: 277
نشاط [ TIME0 ]
قوة السمعة:0
قديم 09-01-2017, 06:57 AM المشاركة 7   
افتراضي


if
كود:
 (Button(&PORTB, 0, 40, 1)


ما المقصود ب
1 40 0

وكيف احدد اطراف اخرى كدخل من خلال هذه الارقام

وماذا تفيدني هذه الداله او ما الفرق بينها وبين if portb.f2==1

ممكن شرح اكثر

عندك كود كامل لهذه الكود
وطرق اخرى بدون ديلي كما قلت


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 09-01-2017, 08:38 PM المشاركة 8   
sun


اخى العزيز :

كود:
if (Button(&PORTB, 0, 40, 1)) {               // Detect logical one       oldstate = 1;                              // Update flag     }
ساوضح لك ثانيا بالعربى :

العنصر الاول : PORTB& تحديد البورت لتوصيل المفتاح
العنصر الثانى : 0 رقم الرجل الموصل بالمفتاح ممكن تغيره كما تريد 1 او 2 .....
العنصر الثالث : 40 زمن انتظار الارتداد حتى يستقر المفتاح كما حضرتك و ضعته فى برنامجك و ممكن تغيره كما تريد .
العنصر الرابع : 1 لو الضغط على المفتاح سيدخل 1 و عدم الضغط 0
0 لو الضغط على المفتاح سيدخل 0 و عدم الضغط 1

اما الكود الكامل فستجده فى HELP للبرنامج .
و الفرق بينها و بين برنامجك لا اعرف لانى لم ارى كود هذه الدالة فى المكتبات.

و الله الموفق و المستعان .



إضافة رد

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

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

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


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

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