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

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

yassinema1992
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 35
نشاط [ yassinema1992 ]
قوة السمعة:0
قديم 09-02-2013, 09:42 PM المشاركة 1   
افتراضي أرجوكم مساعدتي البرنامج لا يعمل في البروتوس ؟ Twitter FaceBook Google+



قمت بعمل برنامج بعد قرائتي لموضوع لتايمر زيرو والكود صحيح جدا لأنني أخدته من هدا الموضوع http://www.qariya.com/vb/showthread.php?t=112315

المهم فكرة البرنامج هو أن ينتضر حتى تكون قيمة 1 في الرجل RA0 ثم يقوم بحساب
زمن بقاء القيمة 1 بالمكرو ثانية ويقارن ان كانت القيمة أكبر من 10000000 أي عشر ثواني يقوم بأخراج PORTB=0b00000011 و أن كانت قيمة أخرى يخرج PORTB=0b00000001
وقوم بهدا مرة واحدة فقط

المشكل هو أنني لم أرى أي رد فهل أو أي جهد في المخارج عند

الكود

صورة البروتوس


كود:
sbit ir_in at RA0_bit;
unsigned char ir_byte,COUNT,bouton;
unsigned int retint;
void interrupt()
{
     count++;
     intcon=0b00100000;
     TMR0=0;
}
unsigned int calcule(){
      TMR0= 0; count=0;
      for(;ir_in==1;){}
      retint=2*(TMR0+(count*256));
      return retint;
}
  void read(){
unsigned int temp_ir;
    while(ir_in == 0);
    temp_ir = calcule();
     if((temp_ir>10000000)) {
        PORTB=0b00000011;
            Delay_ms(1000);
            }
            else  {
           PORTB=0b00000001;
              Delay_ms(1000);
            }
    }

 void main() {
    TRISA=0x0F;
    TRISB=0;
    PORTB=0;
    PORTA=0;
     cmcon=7;
    option_reg=0b10000000; //confuguration
    intcon=0b10100000;    //validation du timer
    TMR0 = 0;

        read();


    }

اعلانات

Tico
:: عضو ذهبي ::
تاريخ التسجيل: May 2012
المشاركات: 1,426
نشاط [ Tico ]
قوة السمعة:114
قديم 10-02-2013, 09:47 AM المشاركة 2   
افتراضي


بداية توصيل المفتاح خاطئ و يتسبب في حدوث قصر صريح بين الموجب و السالب (الارضي) .
التصحيح :

ثانيا .. الافضل رفع ملف المشروع كاملا : ملفات الميكروسي + ملفا بروتوس
مما قد يساعد خبراء الميكروسي على فهم الكود وتصحيحه ..

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

yassinema1992
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 35
نشاط [ yassinema1992 ]
قوة السمعة:0
قديم 10-02-2013, 10:08 AM المشاركة 3   
افتراضي


شكرا لقد قمت بالتوصيلات ولاكن لم يشتغل في انتضار الاخوان


yassinema1992
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 35
نشاط [ yassinema1992 ]
قوة السمعة:0
قديم 10-02-2013, 10:34 AM المشاركة 4   
افتراضي


قمت برفع الملفات
http://arabsh.com/files/0d35424c61fa/test-rar.html

وعدلت الكود الى

كود:
#define ir_in portc.f0
unsigned char ir_byte,COUNT,bouton;
unsigned int retint;
void interrupt()
{
     count++;
     intcon=0b00100000;
     TMR0=0;
}
unsigned int get_mark(){
      TMR0= 0; count=0;
   while(ir_in == 1){ }
      retint=2*(TMR0+(count*256));
      return retint;
}
  void sony_read(){
unsigned int temp_ir;
    while(ir_in == 0){ }
    temp_ir = get_mark();
     if((temp_ir>10000000)) {
        PORTB=0b10001111;
            Delay_ms(1000);
            }
            else  {
            PORTB.F5=1;
              Delay_ms(1000);
            }
    }

 void main() {
    TRISC=0xFF;
    TRISB=0;
    PORTB=0;
    PORTC=0;
     cmcon=7;
    option_reg=0b10000000; //confuguration
    intcon=0b10100000;    //validation du timer
    TMR0 = 0;
    while(1){
        sony_read();
        }
        while(1);
    }


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 13-02-2013, 10:22 AM المشاركة 5   
افتراضي


بسم الله الرحمن الرحيم

اخى اولا معذرة على التاخر

ثانيا هذا الكود الذى تستخدم يعد معقدا هكذا بالنسبة للوظيفة الى انت عايزها

ثالثا التوصيلات خاطئة زى ما قال البشمهندس Tico

رابعا وبدون زعل انت قمت بالنقل فقط حتى بدون العلم ما هو الجزء الخاص بالوظيفة

وللعلم هذا الكود لا يصلح لك الطريقة نعم اما الكود فلا لانك لو كنت قراءت عن التايمر 0 كنت هتعرف
ان التايمر له اعدادات على حسب مدة العمل من 256 ميكرو مثلا الى اكبر
باستخدام معاملات القسمة واواواو الى اخرة

ومش كل الاعدادات واحدة

الفكرة هنا انك تقرء عن التايمر 0 نفسة الاول وبعد كدة بوص على الكود
وانت لوحدك هتعرف لية مش مناسب وسعتها هتقدر تعدل علية

اى الغرض الفهم اولا يا اخى

واعذرنى اذا كان فى كلامى اى حاجة ممكن تزعلك

ناتى الى الجزء العملى

بالنسبة للاستخدام كا عداد وبما ان المدة 10 مللى ثانية
يبقى انا ارجحلك تايمر 1 وليس تايمر 0

ياريت تقراء عنهم وعن اى شرح فيهم

وان شاء الله انا هعملك كود قريب يقيس عرض النبضة بالتايمر 1
يعنى متشلش هم ان شاء الله فقط قم بالاطلاع على شروحات للتيمارت

بالتوفيق ان شاء الله


yassinema1992
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 35
نشاط [ yassinema1992 ]
قوة السمعة:0
قديم 13-02-2013, 10:58 AM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

اخى اولا معذرة على التاخر

ثانيا هذا الكود الذى تستخدم يعد معقدا هكذا بالنسبة للوظيفة الى انت عايزها

ثالثا التوصيلات خاطئة زى ما قال البشمهندس Tico

رابعا وبدون زعل انت قمت بالنقل فقط حتى بدون العلم ما هو الجزء الخاص بالوظيفة

وللعلم هذا الكود لا يصلح لك الطريقة نعم اما الكود فلا لانك لو كنت قراءت عن التايمر 0 كنت هتعرف
ان التايمر له اعدادات على حسب مدة العمل من 256 ميكرو مثلا الى اكبر
باستخدام معاملات القسمة واواواو الى اخرة

ومش كل الاعدادات واحدة

الفكرة هنا انك تقرء عن التايمر 0 نفسة الاول وبعد كدة بوص على الكود
وانت لوحدك هتعرف لية مش مناسب وسعتها هتقدر تعدل علية

اى الغرض الفهم اولا يا اخى

واعذرنى اذا كان فى كلامى اى حاجة ممكن تزعلك

ناتى الى الجزء العملى

بالنسبة للاستخدام كا عداد وبما ان المدة 10 مللى ثانية
يبقى انا ارجحلك تايمر 1 وليس تايمر 0

ياريت تقراء عنهم وعن اى شرح فيهم

وان شاء الله انا هعملك كود قريب يقيس عرض النبضة بالتايمر 1
يعنى متشلش هم ان شاء الله فقط قم بالاطلاع على شروحات للتيمارت

بالتوفيق ان شاء الله

السلام عليكم

أخي بالفعل قد دكرت في الموضوع أنني نقلت الكود ولاكن فهمته جيدا
هدا كود عملته وهو شغال جيدا ولاكن هناك شيئ من عدم الدقة ربما بسبب
زمن تنفيد الكود في الحلقة
كود:
 #define ECHO PORTA.f0
  unsigned long width;
 float distance;
 void interrupt()
{
     width++;
     intcon=0b00100000;
     TMR0=0;
}
void main ()
{
 TRISA=0xFF;
 TRISB=0x00;
 INTCON = 0x00;                        //turn off interrupts
  ADRESH = 0x00;
  ADRESL = 0x00;
  ADCON1 = 0x06;                        //all inputs are digital
  ADCON0 = 0x00;
    ADCON1 = 0x06;                        //all inputs are digital
  ADCON0 = 0x00;
  option_reg=0b10000000; //confuguration
  intcon=0b10100000;    //validation du timer
  TMR0 = 0;
 Loop:
 PORTB=0x00;
 width=0;
 distance=0;
 PORTA=0x00;
 TMR0 = 0;
 while (ECHO==0);  //wait until an echo is received
 TMR0 = 0; width=0;
 while (ECHO==1); //calculate the width of the echo received
 distance=(2*(TMR0+(width*256)))-(width*11)-7   ;
 if (distance<5000000)
 {
 PORTB=0x10;
 delay_ms(1000);
 }
 else if (distance>5000000) {
 PORTB=0xFF;
 delay_ms(1000);
 }
 goto loop;
}
قمت ب حساب زمن 5 ثواني ولاكن أجد أن هناك تأخير يصل لثانية مع العلم أن ما أريده هو دقة بالميكروثانية

هل يمكن أن تقول لي لمدا يجب استعمال التايمر 1 بدل 0 مع العلم أنني قرأت عن mode de capture ccp1 ولاكن لم أفهم كيف أسخدمها ؟


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 13-02-2013, 01:36 PM المشاركة 7   
افتراضي


بسم الله الرحمن الرحيم

عموما حصل خير يا بشمهندس

انتظرنى وان شاء الله احللك المشكلة كلها

والكود واضح انوا لل Ultrasonic

عموما انتظرنى وان شاء الله كل حاجة هتوضح


yassinema1992
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 35
نشاط [ yassinema1992 ]
قوة السمعة:0
قديم 13-02-2013, 03:19 PM المشاركة 8   
افتراضي


نعم أخي العزيز المشروع يخص ultrasonor عن طريق hc-sr04

في الانتضار
شكرا

إضافة رد

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

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

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


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

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