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

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 31-10-2012, 08:36 PM المشاركة 1   
افتراضي قياس الفرق بين اشارتيين Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاتة

عندي اشارتيين sin wave لها نفس التردد ولنقل 10 هيرتز ولها نفس amplitude ولنقل 2v لكن بينهما phase shift اي هناك فرق بينهما ولنقل 45 او 90 درجة.

اريد ان ادخل الاشارتيين على المتحكم (pic16f877a) وايجاد هذه المسافة بينهما ومن ثم عمل مساوه بينهما او نجعلهم متزامنتين.

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 31-10-2012, 09:30 PM المشاركة 2   
افتراضي


كود:
x=adc_read(0);
y=adc_read(1);
if(x==0)for(i=0;i<1000;i++)
                  {delay_ms(1);
if(y==0)breake;}
time=i;
ندخل الاشارة الاولى على المنفذ الاول و الثانية على المنفذ الثاني
اذا اصبحت الاشارة الاولى بصفر ابدأ بتشغيل عداد من صفر الى 1000 و بفارق زمني 1 ملي ثانية ...
اذا اصبحت الاشارة الثانية بصفر اوقف العداد
وبذلك ستكون قيمة العداد هي الفارق الزمني بين الاشارتين ...

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 31-10-2012, 09:45 PM المشاركة 3   
Thumbs up


بارك الله فيك اخي الكريم ياليت توضح اشوي الفكرة وكيف نظهر الفرق واي timer نستخدم. ياليت ملف محاكاة اذا امكن الله يوفقك
هناك شخص اقترح لكن لاادري انه نستخدم 2 comparators وهو موجود في pic16f877a بحيث ندخل كل اشارة على comparator ونضع رفرنس داخلي مثلا 2v وبالتالي اذا الاشارة الاولى اصبحت اكبر من 2 راح يعطي high على مخرج المقارن ونستخدم المقاطعة PIR2.CMIF تبع المقارن ونشغل timer , والاشارة الثانية لازالت تحت 2 وعندما تصل او تتعدى 2 يكون مخرج المقارن الثاني high وفي هذه اللحظة نوقف timer وبالتالي نحصل على الفرق. هل هذه الطريقة تنفع.
بارك الله فيك اخي الكريم


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 01-11-2012, 10:47 AM المشاركة 4   
افتراضي


انا استخدمت نفس الاسلوب لكن بعمل مقارنة من خلال الكود و ليس بالضرورة استخدام المقارن الداخلي ..
الكود الذي كتبته يحسب الفرق بين الاشارتين و اسميته time ....
و لك ان توضفه كما تريد ...


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 01-11-2012, 11:26 AM المشاركة 5   
افتراضي


بارك الله فيك اخي انا عملت سيميلوشن على البروتيس لكن في كل مرة يعطي نفس الناتج يعني اعمل شفت لااحدى الاشارتين بقيم مختلفة ٣٠,٤٥,٩٠,١٨٠ لكن الناتج ثابت على البورت B

الكود استخدمت pic16f877a

كود:
int i;
int time;
unsigned int x;
unsigned int y;

void main(){
TRISA=1;
TRISB=0;
PORTB=0;
while(1){
x=adc_read(0);
y=adc_read(1);
if(x==0)for(i=0;i<1000;i++)
                  {delay_ms(1);
if(y==0)break;}
time=i;
portb=time;}


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 01-11-2012, 02:35 PM المشاركة 6   
افتراضي


ما هي القيمة التي ظهرت عندك ؟؟؟
لاحظ ان الموجة تمر بمرحلتين تكون فيهما ذات قيمة صفرية و بينهما فرق طور 180 درجة . اي نصف الوقت ...
فلابد من اضافة شرط اخرى يحدد الموقع المقصود للموجة ....
ارفع الملفات من فضلك ؟


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 01-11-2012, 07:24 PM المشاركة 7   
افتراضي


عندي فكرة اخرى وهي استخدام timer1 وهي نفس فكرتك تقريبا بحيث اذا الاشارة الاولى ساوت صفر يشتغل التايمر واذا الاشارة الثانية ساوت الصفر يتوقف التايمر وبالتالي الوقت المحسوب يكون الفرق بين الاشارتيين لكن يظهر على البورت الموصلة قراءات سريعة اي الليدات تضئ وتطفئ بسرعة !!!

الكود
كود:
int i;
int phase;
unsigned int x;
unsigned int y;

void main() {
 TRISA=1;
 TRISB=0;
 PORTB=0;
 TRISD=0;
 PORTD=0;
 TRISC=0;
 PORTC=0;
   T1CON.T1CKPS1=0;
        T1CON.T1CKPS0=0;
        T1CON=0;
  while(1){
  
 x=ADC_Read(0);
 y=ADC_Read(1);
 if(x==0) 
 T1CON.TMR1ON=1;
 if(y==0);
  T1CON.TMR1ON=0;

  PORTC=TMR1L;
  PORTD=TMR1H;
 
  }
}
الدائرة



الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 02-11-2012, 04:05 PM المشاركة 8   
افتراضي


الفكرة صحيحة و لكن لا يكفي ان تستخدم شرط واحد ...
الموجة الجيبية تكون صفرا في حالتين ( الزاوية =0 , و الزاوية = 180 )
و هكذا فان الشرط سوف يتحقق مرتين مع كل ذبذبة .
فلا بد من استخدام شرط اخر يحدد اي الصفرين هو المقصود

إضافة رد

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

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

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


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

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