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

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

بحر السكون
:: مهندس ::
تاريخ التسجيل: Nov 2011
المشاركات: 37
نشاط [ بحر السكون ]
قوة السمعة:0
قديم 24-07-2013, 03:26 AM المشاركة 1   
افتراضي حساس التراسونيك hc-sr04 ولغة المايكروسي Twitter FaceBook Google+



السلام عليكم

اسال الله ان يبرم لهذه الامة امر رشد


ياخوان لدي حساس الترا سونيك ذو الاربع اطراف hc-sr04 لكن لم يعمل معي بلغة mikroc -pic16f628a
لا اعلم اين المشكلة



كود:
  #define echo PORTa.F0
  #define trig PORTb.F2
void main ()
{
int width;
 int range;
cmcon=0x07;
trisa.f0=1;
 TRISB=0;

 loop:
  portb=0x00;

 width=0;
 range=0;

 trig=1;    //send pulse with a 20us width
 delay_us(10);
 trig=0;
 delay_us(10);

  while (echo==0){  //wait until an echo is received

  }
 while (echo==1) //calculate the width of the echo received
   {
 delay_us(10);
 width+1;
    }
 range= (width*10)/58; //calculate range
 if (range<100)      //if range less than 100m turn on LED
      delay_ms(250);
 PORTB.f0=1;
 delay_ms(500);
  PORTB.f0=0;
 delay_ms(100);
 goto loop;
}


التعديل الأخير تم بواسطة : بحر السكون بتاريخ 24-07-2013 الساعة 08:41 AM
اعلانات

عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:0
قديم 24-07-2013, 03:47 AM المشاركة 2   
افتراضي


السلام عليكم

اخي المشكلة عندك في الكود حيث انه في البداية سيرسل نبضة واحدة فقط
وان لم يجد حاجز ليرتد الصدي البرنامج كله سيعلق في حلقة
while echo=0
فالصح على ما اعتقد ان تجعل طالما الصدى بصفر ارسل الموجات


while (echo==0);{ trig=1; //send pulse with a 20us width delay_us(10); trig=0; delay_us(10);
}
هكذا والله اعلم

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

Eng/Mohammed ad
:: مهندس ::
تاريخ التسجيل: Mar 2011
المشاركات: 34
نشاط [ Eng/Mohammed ad ]
قوة السمعة:0
قديم 24-07-2013, 05:01 AM المشاركة 3   
افتراضي


المشكلة فى الكود


بحر السكون
:: مهندس ::
تاريخ التسجيل: Nov 2011
المشاركات: 37
نشاط [ بحر السكون ]
قوة السمعة:0
قديم 24-07-2013, 11:59 AM المشاركة 4   
افتراضي


اخر تعديل ولم يعمل

هنا الملف الاصلي للكود والفيديو

http://www.4shared.com/file/BV68KsQ7/

كود:
  #define echo PORTa.F0
  #define trig PORTb.F2
void main ()
{
int width;
 int range;

trisa=1;
 TRISB=0;

 while (1){
  portb=0x00;
  porta=0x00;
 width=0;
 range=0;
  while(1){
  trig=1;    //send pulse with a 20us width
 delay_us(20);
 trig=0;
 delay_us(30);

  while (echo==0){  //wait until an echo is received
    trig=1;    //send pulse with a 20us width
 delay_us(20);
 trig=0;
 delay_us(30);
  }
 while (echo==1) //calculate the width of the echo received
   {
 delay_us(10);
 width++;
    }
 range= (width*10)/58; //calculate range   range<100
 if (range<100){      //if range less than 100m turn on LED
  delay_ms(100);
 PORTB.f0=1;
 delay_ms(500); }
 PORTB.f0=0;
 delay_ms(100);

}}}


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 640
نشاط [ المظلوم ]
قوة السمعة:0
قديم 25-07-2013, 08:38 PM المشاركة 5   
افتراضي


اهلا اخي الكريم ،،


انا حاليا اعمل على نفس الموديول ،، وللآن لم يعمل معي بالشكل الصحيح ،


الخطأ في الكود السابق انك لم تقم بالغاء الكمبراتور ،،

اكتب هذا السطر في الكود ،،

cmcon=0x07

واعتقد انه سيعمل معك ،،


السبب انك تتعامل مع بورت A وللتعامل معه لابد ان تطفيء الcomparator ،


عموما ،، قم بكتابة هذا السطر واخبرني ،،



على فكرة هذا الكود يعمل كــ Motion detector ،، ولكن لا اعلم ما هي المسافة التي يعمل عليها !! ،،

تأكد ان الليد موصل على الطرف الصحيح ،،


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 640
نشاط [ المظلوم ]
قوة السمعة:0
قديم 25-07-2013, 08:47 PM المشاركة 6   
افتراضي


اخي ،ــ

انتبهت إلى انك في المرة الاولى قمت بالغاء الكمبراتور ،، اسف لم انتبه ،


عموما جرب هذا الكود ،،



كود:
void main ()
{
/*while(1){
TRISB=0x00;
PORTB=0x10;
delay_ms(1000);
PORTB=0x00;
delay_ms(1000);
}
*/
 int width;
 int range;
 TRISA=0x08;
 TRISB=0x00;
 Loop:
 PORTB=0x00;
 width=0;
 range=0;
 cmcon=0x07;
 PORTA=0x04;    //send pulse with a 20us width
 delay_us(20);
 PORTA=0x00;
 while (PORTA.F3==0)  //wait until an echo is received
 {
 }
 while (PORTA.F3==1) //calculate the width of the echo received
 {
 delay_us(10);
 width++;
 }
 range=(width*10)/58; //calculate range
 if (range<100)      //if range less than 100m turn on LED
 {
 PORTB=0x10;
 delay_ms(500);
 }
 PORTB=0x00;
 delay_ms(100);
 goto Loop;

}


مع ملاحظة ان الليد يجب توصيله على الطرف ،، رقم 10 من البك ،، وهو البن RB4 ،،

والطرف ،، الخاص بال TRIG يتم توصيله بالطرف رقم 1 ،، RA2
الطرف ECHO ،، يتم توصيله بالطرف رقم 2 ،، RA3 ،،


انا عمل لدي الكود ،، ولكن لم استطع تحديد المسافة التي يعمل عليها السنسور ،، هل يستطيع احد افادتنا في هذا الموضوع ؟


guhdar
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2013
الدولة: العراق/دهوك
المشاركات: 61
نشاط [ guhdar ]
قوة السمعة:0
قديم 25-07-2013, 09:41 PM المشاركة 7   
افتراضي


أخي الكريم
ممكن تنزيل الدائرة ؟


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 640
نشاط [ المظلوم ]
قوة السمعة:0
قديم 25-07-2013, 10:52 PM المشاركة 8   
افتراضي


اهلا

هذه هي صورة الدائرة


http://upload.qariya.info/images/qar...82a57fc61b.jpg



تمنياتي

إضافة رد

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

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

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


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

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