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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 24-11-2013, 07:39 PM المشاركة 9   
افتراضي



السلام عليكم
شكرا لك يا اخي
لقد غيرت البرنامج لاكنه لا يعمل
ارجو المساعدة
شكرا

كود:
//Crystal 4MHz
//speed of sound 340m/s
//1 TMR0 cycle = (340/1000000)*256*0.5*100 = 4.352 in cm
#define TRIG PORTA.F0
#define ECHO PORTA.F1

double distance;
unsigned int cont=0;
//Timer0
//Prescaler 1:1; TMR0 Preload = 197; Actual Interrupt Time : 58 us
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x88;
  TMR0		 = 197;
  INTCON	 = 0xA0;
}

void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 197;
    //Enter your code here
cont++;
  }
}


void main() {
CMCON = 0x07;
InitTimer0();
TRISa.F0 = 0;
TRISa.F1 = 1;
TRISb=0x00;


  while(distance<6){
      portb=0xff;
TRIG= 0;
  delay_us(10);
  TRIG = 1;
  delay_us(10);

 TRIG= 0;

  while(ECHO==0);
  TMR0=0;
cont=0;
  while(ECHO==1);
  distance = cont;


  }

    portb=0x00     ;
delay_ms(1000);
distance=0;
}
أخي كريم جرب الكود المقتبس عدلت عليه
للعلم جعلت الانتربت كل 58 وبتالي معادله مسافه = cont * 58/58=cont


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 24-11-2013 الساعة 07:49 PM
اعلانات

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


ملاحظه أخي اضفت تايمر 1 ثانيه عند أطفاء لكي تستطيع رؤيه ذلك
لانه بدون هذا الزمن فأنك سوف ترى داءما بورت b شغال

وايضا اضفت الامر distance=0 لانه بدون تصفير مسافه فمن مستحيل دخول الى قائمه while وبتالي لن يستطيع قراءه مسافه مره أخره أظنه هذا سبب رئيسي خله عندك بورت طافي ولم يشتغل بعد

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


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 24-11-2013 الساعة 07:56 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

synchrone
:: مهندس ::
تاريخ التسجيل: Mar 2013
المشاركات: 8
نشاط [ synchrone ]
قوة السمعة:
قديم 25-11-2013, 10:24 PM المشاركة 11   
افتراضي


باركك الله فيك يا اخي
انا سعيد بهتمامكم بمشكلتي و انشاء الله سوف نجد الحل
المشكل هو
portb =1
في لحظة ثم يبقى منطفئ


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 27-11-2013, 06:45 PM المشاركة 12   
افتراضي


باركك الله فيك يا اخي
انا سعيد بهتمامكم بمشكلتي و انشاء الله سوف نجد الحل
المشكل هو
portb =1
في لحظة ثم يبقى منطفئ
السلام عليكم
عذرا أخي على تاخير
أخي انا لم أفهم ماهي مشكله اذا تكدر تصور لنا فيديو بالتجربه ولكن قبل ذلك جرب هذا الكود
علما اذا كانت مسافه اقل من 6 سنتيمتر سوف يضيئ ليد المربوط على portb.f0 أنتبه مسافه اقل من 6cm
كود:
//Crystal 4MHz //speed of sound 340m/s //1 TMR0 cycle = (340/1000000)*256*0.5*100 = 4.352 in cm 
#define TRIG PORTA.F0 
#define ECHO PORTA.F1 
double distance; 
unsigned int cont=0; 
//Timer0 //Prescaler 1:1; TMR0 Preload = 197; Actual Interrupt Time : 58 us 
//Place/Copy this part in declaration section 
void InitTimer0()
{ OPTION_REG	 = 0x88; 
TMR0	 = 197; 
INTCON	 = 0xA0; 
} 

void Interrupt()
{ 
if (TMR0IF_bit)
             { TMR0IF_bit= 0; 
              TMR0 = 197; 
              //Enter your code here 
              cont++; 
              }
} 

void main() 
{ 
 CMCON = 0x07; 
 InitTimer0(); 
 TRISa.F0 = 0; 
 TRISa.F1 = 1; 
 TRISb=0x00; 
 while(1)
       { 
        TRIG= 0;
        delay_us(10); 
        TRIG = 1; 
        delay_us(10); 
        TRIG= 0; 
        while(ECHO==0); 
        TMR0=0; 
        cont=0; 
        while(ECHO==1); 
        distance = cont;
        if(distance <6) // less from 6cm
                      {
                      portb.f0=1 ;
                       delay_ms(1000);
                       portb=0;
                      }
       }

 }


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 27-11-2013 الساعة 06:50 PM


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