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

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

synchrone
:: مهندس ::
تاريخ التسجيل: Mar 2013
المشاركات: 8
نشاط [ synchrone ]
قوة السمعة:0
قديم 20-11-2013, 08:09 PM المشاركة 1   
افتراضي كود mikro c لا يعمل Twitter FaceBook Google+



السلام عليكم و رحمة الله و بركاته
عندي سينسور ultrasonic HC-SR04
PIC 16F268A
استعملت النابض الدخلي للبيك
لاكنه لايعمل ارجو المساعدة
كود:
 //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;
void main() {
CMCON = 0x07;

TRISa.F0 = 0;
TRISa.F1 = 1;
TRISb=0;

OPTION_REG.T0CS = 0;
OPTION_REG.PSA = 0;
OPTION_REG.PS0 = 1;
OPTION_REG.PS1 = 1;
OPTION_REG.PS2 = 1;

  while(1){

TRIG= 0;
  delay_us(10);
  TRIG = 1;
  delay_us(10);
 TRIG= 0;

  while(ECHO==0);
  TMR0=0;
  while(ECHO==1);
  distance = (double)TMR0 * 4.352;
  Delay_ms(100);
  }
  if(distance < 100) portb=1;
  else portb=0;

}

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 21-11-2013, 02:34 AM المشاركة 2   
افتراضي


السلام عليكم و رحمة الله و بركاته
عندي سينسور ultrasonic HC-SR04
PIC 16F268A
استعملت النابض الدخلي للبيك
لاكنه لايعمل ارجو المساعدة
كود:
 //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;
void main() {
CMCON = 0x07;

TRISa.F0 = 0;
TRISa.F1 = 1;
TRISb=0;

OPTION_REG.T0CS = 0;
OPTION_REG.PSA = 0;
OPTION_REG.PS0 = 1;
OPTION_REG.PS1 = 1;
OPTION_REG.PS2 = 1;

  while(1){

TRIG= 0;
  delay_us(10);
  TRIG = 1;
  delay_us(10);
 TRIG= 0;

  while(ECHO==0);
  TMR0=0;
  while(ECHO==1);
  distance = (double)TMR0 * 4.352;
  Delay_ms(100);
  }
  if(distance < 100) portb=1;
  else portb=0;

}
سلام عليكم
عندك خطأ في الكود بلون الاحمر هو ليس خطأ في كتابه الكود وأنما أنت أخرجت هذه الاوامر خارج while وبتالي مايكرو لن ينفذها لان دخل مايكرو في لوب مستمر يوجد حلين
1- أدخال تلك الاوامر ضمن while أو

2- تعدل على (while(1 وتغيرها الى (while(distance<100
}
portb=1
وتكتب كل الاكواد هنا
{
portb=0

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

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


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

كود:
//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;
void main() {
CMCON = 0x07;

TRISa.F0 = 0;
TRISa.F1 = 1;
TRISb=0x00;

OPTION_REG.T0CS = 0;
OPTION_REG.PSA = 0;
OPTION_REG.PS0 = 1;
OPTION_REG.PS1 = 1;
OPTION_REG.PS2 = 1;

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

 TRIG= 0;

  while(ECHO==0);
  TMR0=0;
  while(ECHO==1);
  distance = (double)TMR0 * 4.352;


  }

    portb=0x00     ;
}


التعديل الأخير تم بواسطة : synchrone بتاريخ 21-11-2013 الساعة 08:10 PM

الصورة الرمزية NOUR P.4
NOUR P.4
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2010
المشاركات: 185
نشاط [ NOUR P.4 ]
قوة السمعة:0
قديم 22-11-2013, 03:38 AM المشاركة 4   
افتراضي


السلام عليكم:
أخي الكريم هل قمت قبل البرمجة بضبط الــــ configuration bit بشكل صحيح بحيث اخترت الكريستال الصحيح و ألغيت عمل الــــ WDT كل هذا يمكن عمله من برنامج المبرمجة ....
ماهي المبرمجة المستخدمة وما هو برنامجها


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


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

كود:
//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;
void main() {
CMCON = 0x07;

TRISa.F0 = 0;
TRISa.F1 = 1;
TRISb=0x00;

OPTION_REG.T0CS = 0;
OPTION_REG.PSA = 0;
OPTION_REG.PS0 = 1;
OPTION_REG.PS1 = 1;
OPTION_REG.PS2 = 1;

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

 TRIG= 0;

  while(ECHO==0);
  TMR0=0;
  while(ECHO==1);
  distance = (double)TMR0 * 4.352;


  }

    portb=0x00     ;
}
سلام عليكم
أخي كريم أنت تقصد لايعمل بأن بورت b دائما =0xff اي شغال أو شنو بالضبط

بعدين أخي كريم أنت ذكرت نوع مايكرو PIC 16F268A لم أجده لا في بروتيس و لا في مايكروسي هل مايكرو صحيح؟


الصورة الرمزية vie.logic
vie.logic
:: مهندس متميز ::
تاريخ التسجيل: Nov 2011
الدولة: المغرب
المشاركات: 367
نشاط [ vie.logic ]
قوة السمعة:0
قديم 22-11-2013, 01:48 PM المشاركة 6   
افتراضي


https://www.dropbox.com/s/o5vrcmwd59...20ULTRASON.rar
جرب هذا


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 22-11-2013, 02:13 PM المشاركة 7   
افتراضي


سلام عليكم
أخي كريم أنت لم تفعل تايمر0 في الكود
أذا أفترضنا ان مايكرو هو 16f628a لابد من كتابه هذا الكود (( لكي تفعل الانتربت))
intcon=0xA0

ملاحظه الثانيه في حساب مسافه هناك نسبه خطأ في قياس المسافه لانك كما تعرف هذه حساس يرجع زمن قليل لذا جعل معامل تقسيم 1/256 يعتبر امر حسب رائي خاطئ لنحسب مسافه معا
distance =time/58 ,حيث time مقاس بالمايكروثانيه لنفترض أن تايمر0 =1
distance =1*256/58=4.4cm وهذا يعني يوجد نسبه خطأ بحدود 4.4cm

تريد نصيحه أستخدم هذا برنامج حدد العائله مايكرو هل هو من عائله 16f أو 18F او....
ثم اكتب تردد كرستاله ثم حدد اي تايمر تسستخدم ثم حدد زمن الانتربت اي عنده يحدث الانتربت بعدين اضغط على calculate
راح يقوم برنامج بكتابه الكود كامل لك (( طبعا خاص بانتربت))
https://www.mediafire.com/?8c8kn7k67i68ypn

وعلى سبيل مثال لو أفترضنا اريد يحدث الانتربت كل 100us ومايكرو هو 16f628a وتردد كرستاله هو 4ميكا اذن الكود المتولد من البرنامج
كود:
//Timer0
//Prescaler 1:1; TMR0 Preload = 155; Actual Interrupt Time : 100 us
 
//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG	 = 0x88;
  TMR0		 = 155;
  INTCON	 = 0xA0;
}
 
void Interrupt(){
  if (TMR0IF_bit){ 
    TMR0IF_bit	 = 0;
    TMR0		 = 155;
    //Enter your code here
  }
}


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


سلام عليكم
شكرا لكم
اخي حسن هادي محمود
pic 16f628a
portb يشتغل في البدايه مرة ثم يابقى منطفئ
لكن لم افهم كيف تغير البرنامج(timer 0)
من فضلك اكتبه كامل
رابط ميديافير لا يعمل
اخي vie.logicا
لقد جربت الكود
للاسف لم يعمل
من فضلكم هل هناك من قام ببرمجة ultrson
بنجاح
سوف اجن

إضافة رد

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

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

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


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

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