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

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

carsper
:: مهندس ::
تاريخ التسجيل: Feb 2011
المشاركات: 42
نشاط [ carsper ]
قوة السمعة:0
قديم 17-03-2011, 09:44 PM المشاركة 1   
ha النداء الأخير مساعدة في مشروعي PIC16F84A Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاتة
ارجو المساعدة والتفاعل من جميع الأعضاء لإنهاء مشروعي

هذه صورة للمشروع


1- عند الضغط علي الزر يعرف انة علية بدء عد ال Pulse اللي داخلة من RA4

2- عند عد 2000 Pulse دخلت من RA4 يقوم بالأتي:-
* يقوم بقسمة الPulse علي 6 (بمعني كل 6 Pulse داخلة يخرج 1 Pulse) يقوم بعملية القسمة هذه علي الطرفين RA4 و RA3، ولكني استخدمت في العد طرف واحد فقط و هو RA3.
*يقوم باخراج الPulse اللي داخلة من الطرفين RA3 و RA4 بعد عملية قسمة الي الطرفين RB1 وRB2

3- وعندما يصل العد اللي داخل من RA4 الي 20000 Pulse (بدون عملية القسمة) يقوم بإيقاف عملية الخرج من الطرفين RB1 و RB2 .

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

اعلانات

almoflehy
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
الدولة: YEMEN
المشاركات: 252
نشاط [ almoflehy ]
قوة السمعة:0
قديم 17-03-2011, 10:34 PM المشاركة 2   
افتراضي


وعليكم السلام
ارجو توضيح بعض الاشياء لكتابة البرنامج بشكل صحيح
1- عند الضغط علي الزر يعرف انة علية بدء عد ال Pulse اللي داخلة من RA4

2- عند عد 2000 Pulse دخلت من RA4 يقوم بالأتي:-
* يقوم بقسمة الPulse علي 6 (بمعني كل 6 Pulse داخلة(البلس اللي حتدخل جديد وليس ان يقسم ال 2000 بلس التي قد دخلت) يخرج 1 Pulse) يقوم بعملية القسمة هذه علي الطرفين RA4 و RA3، ولكني استخدمت في العد طرف واحد فقط و هو RA3.
*يقوم باخراج الPulse اللي داخلة من الطرفين RA3 و RA4 بعد عملية قسمة الي الطرفين RB1 وRB2 (هل المقصود اخراج 1 بلس من RB1 كلما دخلت 6 بلس من RA3 واخراج 1 بلس من RB2 كلما دخلت 6 بلس من RA4)

3- وعندما يصل العد اللي داخل من RA4 الي 20000 Pulse (بدون عملية القسمة) يقوم بإيقاف عملية الخرج من الطرفين RB1 و RB2 .

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

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

carsper
:: مهندس ::
تاريخ التسجيل: Feb 2011
المشاركات: 42
نشاط [ carsper ]
قوة السمعة:0
قديم 18-03-2011, 02:51 AM المشاركة 3   
ha


اهلا اخي المفلحي
نعم لا يعتمد علي الوقت يا اخي فقط عدد ال Pulses
بالنسبة للتوضيح
*(البلس اللي حتدخل جديد وليس ان يقسم ال 2000 بلس التي قد دخلت)
نعم يا اخي اللي هيدخل جديد

*(يقوم بعملية القسمة هذه علي الطرفين RA4 و RA3، ولكني استخدمت في العد طرف واحد فقط و هو RA3)
اقصد يا اخي اني هعمل الجمل الشرطية علي طرف واحد بحيث اني هقولة لو قمت بعد 2000 من RA4 يخرج من RB1 و اللي داخل من RA3 يخرج من RB2 , بدل ما اقوم بوضع القيد علي الطرفين هذا قصدي.


(هل المقصود اخراج 1 بلس من RB1 كلما دخلت 6 بلس من RA3 واخراج 1 بلس من RB2 كلما دخلت 6 بلس من RA4)

نعم هذا ما اريد

20000 Pulse
شوف يا اخي المفلحي انا قلت لة في الأول لو عديت 2000 Pulse قوم بعملية القسمة واخرج من الطرفين , انا بقي عايزة من بعد ما يخرج يفضل مراقب وبيكمل عد ال Pulse الاصلية اللي دخله بحيث انة اثناء الخرج لو وصل اللي الحد الاقصي اللي هو 20000 متضمنين ال 2000 اللي دخلو في الأول يقوم بإيقاف عملية الخرج من الطرفين ويقوم بعمل ريستارت للبرنامج لتكرار العملية عند الضغط علي الزر

اتمني ان اكون اوضحت لك
ولك جزيل الشكر


carsper
:: مهندس ::
تاريخ التسجيل: Feb 2011
المشاركات: 42
نشاط [ carsper ]
قوة السمعة:0
قديم 18-03-2011, 08:37 AM المشاركة 4   
افتراضي


اخي المفلحي
نسيت ان انبهك في شئ اني اريد بردو عملية القسمة علي الطرفين عند خروج النبضات يعني كل 6 نبضات بتدخل من RA3وRA4 تخرج نبضة من RB1وRB2
وانتظرك


almoflehy
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
الدولة: YEMEN
المشاركات: 252
نشاط [ almoflehy ]
قوة السمعة:0
قديم 19-03-2011, 08:37 PM المشاركة 5   
افتراضي


السلام عليكم اخي carsper
عفوا على التأخير
الحمد لله انتهيت من عمل البرنامج ولكن عملت على تغيير منافذ الانبوت على ضوء ما عملت البرنامج لاستخدام المقاطعات والبرنامج معمول على ضوء هذا التوصيل



استخدم كريستال 4 ميجاهيرتز
وهذا البرنامج
كود:
char n,m;
int x,i,b;

void interrupt()
{
     if(intcon.f1==1)
     {
      x++;
      intcon.f1=0;
     }
}

void main()
{

    trisb=0;
    trisb.f0=1;
    trisa=0xff;
    portb=0;
    intcon=0b10110000;
    option_reg=0b10111000;

    start:
    portb=0;
    i=1;
    b=0;
    n=0;
    m=0;
    if(porta.f0==1)
    { x=0;
      while(x<2000) { }
      x=0;
      tmr0=0;
      while(x<18000)
      {
       if(x==(5*i)+b)
        {portb.f1=portb.f0;  n=1;}
       else {portb.f1=0;
             if(n==1){n=0;i++;b++;}
            }
       if(tmr0==5)
        {portb.f2=porta.f4;  m=1;}
       else {portb.f2=0;
             if(m==1){m=0;tmr0=0;}
            }
      }
    }
    goto start;
}
وهذا ملف به البرنامج مع المحاكاة على البروتس على النحو التالي
http://www.mediafire.com/?mq5uuwe1l722638
1- عند الضغط علي الزر في RA0 يعرف انة علية بدء عد ال Pulse اللي داخلة من RB0

2- عند عد 10 Pulse دخلت من RB0 يقوم بالأتي:-
* يقوم بقسمة الPulse علي 6 (بمعني كل 6 Pulse داخلة يخرج 1 Pulse) يقوم بعملية القسمة هذه علي الطرفين RB0 و RA4، ولكني استخدمت في العد طرف واحد فقط و هو RB0.
*يقوم باخراج الPulse اللي داخلة من الطرفين RB0 و RA4 بعد عملية قسمة الي الطرفين RB1 وRB2

3- وعندما يصل العد اللي داخل من RB0 الي 40 Pulse (بدون عملية القسمة) يقوم بإيقاف عملية الخرج من الطرفين RB1 و RB2 .

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


carsper
:: مهندس ::
تاريخ التسجيل: Feb 2011
المشاركات: 42
نشاط [ carsper ]
قوة السمعة:0
قديم 20-03-2011, 03:17 AM المشاركة 6   
افتراضي


اخي المفلحي
تسلم علي التواصل الدائم من قبلك والإستاجبة السريعة وهذه من عاداتك,
انا جربت البرنامج علي السميوليشن شغال تمام
انما لما بجربة علي البيك عملي مش بيشتغل علم اني عامل في برنامج الميكرو سي في خيارات المشروع WDT_OFF و HS_OSC معلمين بصح
* في معلومة البلسات اللي بتتبعت للميكرو دي سريعة جدا يعني بيعد 1200 بلس ف ثانية
هل دة ممكن يكون من ان البيك مش قادر علي تنفيذ البرنامج بهذه السرعة ولا في غلط ارجو التوضيح وشرح الكود إن امكن
ولك جزيل الشكر


almoflehy
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
الدولة: YEMEN
المشاركات: 252
نشاط [ almoflehy ]
قوة السمعة:0
قديم 20-03-2011, 09:29 AM المشاركة 7   
افتراضي


اخي المفلحي
تسلم علي التواصل الدائم من قبلك والإستاجبة السريعة وهذه من عاداتك,
انا جربت البرنامج علي السميوليشن شغال تمام
انما لما بجربة علي البيك عملي مش بيشتغل علم اني عامل في برنامج الميكرو سي في خيارات المشروع WDT_OFF و HS_OSC معلمين بصح
* في معلومة البلسات اللي بتتبعت للميكرو دي سريعة جدا يعني بيعد 1200 بلس ف ثانية
هل دة ممكن يكون من ان البيك مش قادر علي تنفيذ البرنامج بهذه السرعة ولا في غلط ارجو التوضيح وشرح الكود إن امكن
ولك جزيل الشكر
البيك قادر على العمل على سرعات اكبر من 1200 وهذه ليست المشكلة
اربط مقاومة 10K على مفتاح بدء العد كما بالصورة وان استمرت المشكلة حاول ربط مقاومات 10K على مداخل البلس كما بالصورة



بانتظار الرد.


carsper
:: مهندس ::
تاريخ التسجيل: Feb 2011
المشاركات: 42
نشاط [ carsper ]
قوة السمعة:0
قديم 20-03-2011, 05:53 PM المشاركة 8   
افتراضي


اخي المفلحي لقد قمت بتنفيذ ما قلت لي ولكن للأسف النتيجة واحدة
لم يتم التشغيل

إضافة رد

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

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

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


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

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