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

   

besho_basha
:: مهندس ::
تاريخ التسجيل: Jul 2015
المشاركات: 6
نشاط [ besho_basha ]
قوة السمعة:
قديم 05-07-2015, 02:12 PM المشاركة 9   
افتراضي شكر... وعرفان



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

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 05-07-2015, 03:25 PM المشاركة 10   
افتراضي


السلام عليكم

اخي العزيز تفضل هذا كود يعمل

قمت بتعريف كل بت على حدا وهذا أفضل بكثير خصوصا عندما تتعامل مع مداخل ىنك لو عرفت الاطراف كمداخل ومن ثم لم تستخدمها في مشروع يعني لم يتم ربط معها مقاومه للحصول على Logic 0 or logic 1 فأن ذلك سيسبب لك تشويش كبير على البيك ولن يعمل مشروع لذا عليك أنتباه لهذه النقطه

لذا أقترح عليك حل هذه مشكله بتباع التعريف الاطراف الي انت تستخدمها وهذه تنفعك ب
1- سهوله تغير اي طرف البيك دون تغير الكود فكل ماعليك تغير في كود تعريف فقط
2- يحول لك ايعاز او كلمه البرمجيه الى كلمه مناسبه للحدث اوكلمه انت تعرفها وبتالي يكون فهم البرنامج أفضل

كود:
sbit sw1 at RA0_bit;
sbit sw1_dir at TRISA0_bit;
sbit sw2 at RA1_bit;
sbit sw2_dir at TRISA1_bit;
sbit sw3 at RA2_bit;
sbit sw3_dir at TRISA2_bit;
sbit sw4 at RA3_bit;
sbit sw4_dir at TRISA3_bit;
sbit sw5 at RA4_bit;
sbit sw5_dir at TRISA4_bit;
sbit sw6 at RA5_bit;
sbit sw6_dir at TRISA5_bit;

sbit output1 at RE0_bit;
sbit output1_dir at TRISE0_bit;
sbit output2 at RE1_bit;
sbit output2_dir at TRISE1_bit;
sbit output3 at RE2_bit;
sbit output3_dir at TRISE2_bit;
sbit output4 at RB0_bit;
sbit output4_dir at TRISB0_bit;
sbit output5 at RB1_bit;
sbit output5_dir at TRISB1_bit;

char output_flag=0;
void main()
{
 adcon1=6;
 /// define switches are input
 sw1_dir=1;  sw2_dir=1;  sw3_dir=1;
 sw4_dir=1;  sw5_dir=1;  sw6_dir=1;

  // off all output
 output1=0; output2=0; output3=0;
 output4=0; output5=0;
 
 /// define outputs are output
  output1_dir=0; output2_dir=0; output3_dir=0;
 output4_dir=0; output5_dir=0;

   while(1)
      {
       if(sw1==1 && output_flag.f0==0)
           {
            output1=1;
            output4=1;
            output_flag.f0=1;
            delay_ms(250);
           }
        if(sw2==1 && output_flag.f1==0)
           {
            output2=1;
            output4=1;
            output_flag.f1=1;
            delay_ms(250);
           }
           
        if(sw3==1 && output_flag.f2==0)
           {
            output3=1;
            output4=1;
            output_flag.f2=1;
            delay_ms(250);
           }
           
        if(sw4==1 && output_flag.f3==0)
           {
            output1=1;
            output5=1;
            output_flag.f3=1;
            delay_ms(250);
           }
           
           if(sw5==1 && output_flag.f4==0)
           {
            output2=1;
            output5=1;
            output_flag.f4=1;
            delay_ms(250);
           }
           
           if(sw6==1 && output_flag.f5==0)
           {
            output3=1;
            output5=1;
            output_flag.f5=1;
            delay_ms(250);
           }
           

         if(sw1==0 && output_flag.f0==1)
           {
            output1=0;
            output4=0;
            output_flag.f0=0;
           }
        if(sw2==0 && output_flag.f1==1)
           {
            output2=0;
            output4=0;
            output_flag.f1=0;
           }

        if(sw3==0 && output_flag.f2==1)
           {
            output3=0;
            output4=0;
            output_flag.f2=0;
           }

        if(sw4==0 && output_flag.f3==1)
           {
            output1=0;
            output5=0;
            output_flag.f3=0;
           }

           if(sw5==0 && output_flag.f4==1)
           {
            output2=0;
            output5=0;
            output_flag.f4=0;
           }

           if(sw6==0 && output_flag.f5==1)
           {
            output3=0;
            output5=0;
            output_flag.f5=0;
           }

      }

 
}
http://up.top4top.net/downloadf-top4...dd331-rar.html


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 05-07-2015 الساعة 03:32 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

besho_basha
:: مهندس ::
تاريخ التسجيل: Jul 2015
المشاركات: 6
نشاط [ besho_basha ]
قوة السمعة:
قديم 05-07-2015, 10:44 PM المشاركة 11   
افتراضي جاري تجربة كود التعريف المستقل


شكرا جزيلا للاهتمام من الجميع -- الذي لا نستحقه -- لانني جديد في المنتدى ولانني هاوي غير متمرس
_____________
اولا : في الاكوات التي كتبت لي جربتها وعملت جيدا
وبخصوص ملف بروتس الي رفعه لي الاستاذ المشرف فتح الله
والاختصار من قبل الاستاذ
ناصراحمد2
وقد عملت بشكل ممتاز
ثم
قمت بتعديل الكود لكي يطفئ الانوار الليدات بعد انتهاء الضغط
وهذا هو الكود المعدل :

void main() {


ADCON1=0x07 ;
TRISA=0B00111111;
TRISB=0 ;
TRISE=0 ;
PORTB=0;
PORTE=0;
while(1)
{


//-----1
if(PORTA.B0==1){
PORTB=0; PORTE=0;
PORTE.B0=1;PORTB.B0=1;
delay_ms(500);
PORTE.B0=0;PORTB.B0=0;

}
//------2
if(PORTA.B1==1){
PORTB=0; PORTE=0;
PORTE.B1=1;PORTB.B0=1;
delay_ms(500);
PORTE.B1=0;PORTB.B0=0;
}

//------3
if(PORTA.B2==1){
PORTB=0; PORTE=0;
PORTE.B2=1;PORTB.B0=1;
delay_ms(500);
PORTE.B2=0;PORTB.B0=0;
}

//------4
if(PORTA.B3==1){
PORTB=0; PORTE=0;
PORTE.B0=1;PORTB.B1=1;
delay_ms(500);
PORTE.B0=0;PORTB.B1=0;
}


//------5
if(PORTA.B4==1){
PORTB=0; PORTE=0;
PORTE.B1=1;PORTB.B1=1;
delay_ms(500);
PORTE.B1=0;PORTB.B1=0;
}

//------6
if(PORTA.B5==1){
PORTB=0; PORTE=0;
PORTE.B2=1;PORTB.B1=1;
delay_ms(500);
PORTE.B2=0;PORTB.B1=0;
}


} // خاصة بالحلقة while
} // ختام الكود


وكان يعمل جيدا بشكل ممتاز وكما تمنيت تماما ....

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

وكان الشكل النهائي هكذا



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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 06-07-2015, 12:04 AM المشاركة 12   
افتراضي


أخى الكريم
كنت اتمنى أن تتمتع بإمكانيات المترجم ولغة السى وتستغل العوامل المنطقية المتوفرة فى المترجم ولغة السى ، لكن إذا أردت استخدام جملة if فإليك عينة من التصحيح اللازم عمله والتى بدونها لن تحصل على فصل للخرج مطلقا بعد تشغيله وهذا هو المقصود بالمنطق فانت تقول للمترجم :

إذا تحقق الشرط افعل كذا ولم تذكر على الإطلاق إذا لم يتحقق الشرط أفعل كذا ، المترجم ينفذ ما تأمره به تماما :



كود:
//-----1
        if(PORTA.B0==1)
        {
                       //PORTB=0; PORTE=0;
                       PORTE.B0=1;
                       PORTB.B0=1;
                       delay_ms(500);
        }
        else
        {

        PORTE.B0=0;
        PORTB.B0=0;

        }

//------2
if(PORTA.B1==1)
{
//PORTB=0; PORTE=0;
PORTE.B1=1;PORTB.B0=1;
delay_ms(500);
}
else
{
PORTE.B1=0;PORTB.B0=0;
}


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 06-07-2015 الساعة 12:09 AM

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 696
نشاط [ hamzazayyad ]
قوة السمعة:
قديم 06-07-2015, 12:32 AM المشاركة 13   
افتراضي


شكرا جزيلا للاهتمام من الجميع -- الذي لا نستحقه -- لانني جديد في المنتدى ولانني هاوي غير متمرس
_____________
اولا : في الاكوات التي كتبت لي جربتها وعملت جيدا
وبخصوص ملف بروتس الي رفعه لي الاستاذ المشرف فتح الله
والاختصار من قبل الاستاذ
ناصراحمد2
وقد عملت بشكل ممتاز
ثم
قمت بتعديل الكود لكي يطفئ الانوار الليدات بعد انتهاء الضغط
وهذا هو الكود المعدل :

void main() {


ADCON1=0x07 ;
TRISA=0B00111111;
TRISB=0 ;
TRISE=0 ;
PORTB=0;
PORTE=0;
while(1)
{


//-----1
if(PORTA.B0==1){
PORTB=0; PORTE=0;
PORTE.B0=1;PORTB.B0=1;
delay_ms(500);
PORTE.B0=0;PORTB.B0=0;

}
//------2
if(PORTA.B1==1){
PORTB=0; PORTE=0;
PORTE.B1=1;PORTB.B0=1;
delay_ms(500);
PORTE.B1=0;PORTB.B0=0;
}

//------3
if(PORTA.B2==1){
PORTB=0; PORTE=0;
PORTE.B2=1;PORTB.B0=1;
delay_ms(500);
PORTE.B2=0;PORTB.B0=0;
}

//------4
if(PORTA.B3==1){
PORTB=0; PORTE=0;
PORTE.B0=1;PORTB.B1=1;
delay_ms(500);
PORTE.B0=0;PORTB.B1=0;
}


//------5
if(PORTA.B4==1){
PORTB=0; PORTE=0;
PORTE.B1=1;PORTB.B1=1;
delay_ms(500);
PORTE.B1=0;PORTB.B1=0;
}

//------6
if(PORTA.B5==1){
PORTB=0; PORTE=0;
PORTE.B2=1;PORTB.B1=1;
delay_ms(500);
PORTE.B2=0;PORTB.B1=0;
}


} // خاصة بالحلقة while
} // ختام الكود


وكان يعمل جيدا بشكل ممتاز وكما تمنيت تماما ....

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

وكان الشكل النهائي هكذا



انا اذكر هذا لكي اتعلم لا اكثر فالهدف النهائي هو التعليم
=================
ثانيا : شكرا لك يا بش مهندس
حسن هادي
انا هاخد الكود الخاص بالتعريفات المستقلة لكل مخرج وسأجربها
بس يا ريت افهم هو ليه برنامج بروتس اتغير تصرفه بعد اضافة زر سويتش ؟؟؟
شكر للجميع
اخي besho_basha بالنسبه للمفاتيح يوجد توصيلتين مع المقاومات
الاولى تسمى pull up resistor (تعني ان توصل المقاومه للاعلى على 5 فولت)
التانيه تسمى pull down resistor(تعني ان توصل المقاومه للاسفل على gnd
رابط لتوضيح التوصيل
http://www.resistorguide.com/pull-up...down-resistor/

العاده جريت ان نستخدم طريقه pull up

اعد توصيل المفتاح ببروتوس بطريقه pull up

بالتوفيق اخي


besho_basha
:: مهندس ::
تاريخ التسجيل: Jul 2015
المشاركات: 6
نشاط [ besho_basha ]
قوة السمعة:
قديم 06-07-2015, 02:29 AM المشاركة 14   
افتراضي


شكرا للنصيحة
بخصوص توصيل المفتاح ببروتوس بطريقه pull up
وجدتها تعطي كهرباء دائما للبن وعند الضغط على المفتاح يتم فصل الكهرباء عن البن
لكن هل هذه الطريقة لا داعي لها ؟؟؟ فاذا كان البيك سيعمل 5 ساعات فيستلم البيك كهرباء لمدة 5 ساعات بدون داعي ؟؟!!!
وايضا هذا يحتاج الى عكس المنطق في اكواد البرمجة لتنير الليدات عن انقطاع الكهرباء عن البن !! (وليس العكس)
هل انا كده فاهم صح ؟؟
=========
جربت طريقة pull-down وجدتها شغالة كويس على البروتس
وغالبا هي اللي هعمل بيها ما لم يتم نصحي بعدم افضليتها
... اتسائل ايضا في الطريقة pull-down لخمس بنات هل يجب ان اعمل خمسة ارضي وخمس مقاومات لكل بن .. هل يمكن اختصار التوصيلات اذا قمت بطريقة pull-down ؟؟


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,315
نشاط [ ناصراحمد2 ]
قوة السمعة:
قديم 06-07-2015, 02:58 AM المشاركة 15   
angry


السلام عليكم ورحمة الله وبركاتة
الاخ الفاضل /besho_basha
حاليا سبب المشكلة هو انت شخصيا هههههههه
فلم تحدد الهدف من مشروعك او مهمتة ؟؟؟؟
مشروعك حاليا بالنسبة لنا يحمل اكثر من وجه
اولا :
فى حال تريد التحكم فى اجهزة مثلا فسوف تحتاج الى كود
يضىء ماتريد بشكل دائم كمثال ماكتبتة لك
وفى هذة الحالة استخدم الكود الذى كتبتة لك من قبل كما هو
واضف فقط اضافة مهندسنا واستاذنا مهندس /فتح الله عبد العزيز

else
{

PORTE.B0=0;
PORTB.B0=0;

}

ثانيا :
يمكن ان يكون مشروعك يحتاج لاضائة ماتريد طالما ضاغط على الزر (السوتش)
وفى هذة الحالة
استخدم نفس الكود مع كامل اضافات مهندس/فتح الله .
وهذة النقطة تنقسم الى جزئين
الاول هل تريد اطفاء ماتم اضائتة من قبل ؟؟
فى هذة الحالة لابد من ترك التصفير كما قمت بوضعة لك فى بداية شرط ال if
والحالة الثانية تريد اضائة ماتريد مع ابقاء ماتم اضائتة
فى هذة الحالة قم بالغاء التصفير فى بداية اوامر شرط ال if >

ثالثا :
ممكن مشروعك يحتاج اضائة ماتريد وابقائة مضاء حتى تقوم انت باغلاق الكل
فى هذة الحالة يمكنك اضافة زر اضافى يقوم (بتصفير) البورتات المستخدمة .
او وضعهم فى حالة (صفر) فى نهاية جملة اللوب ( while(1) )
و و و و

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


besho_basha
:: مهندس ::
تاريخ التسجيل: Jul 2015
المشاركات: 6
نشاط [ besho_basha ]
قوة السمعة:
قديم 07-07-2015, 12:29 PM المشاركة 16   
افتراضي


الحمد لله المشكلة اتحلت

انا قمت بضبط الليدات تطفي بعد 100 مللي ثانية بعد الضعط
_______________
اما الهدف من المشروع واضح وبسيط وهو تشغيل بعض الليدات بمجرد الضغط على مجموعة ازرار

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



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