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

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 06-05-2013, 12:25 PM المشاركة 1   
افتراضي كيف نستطيع حساب الزمن بين موجتين مربعة Twitter FaceBook Google+



استخدمت T0 , T1 ومقاطعة RB0 كلها بتعطي كم عدد النبضات الداخلة انا اريد الزمن بين نبضتين ياليت احد يعطينا مثال

اعلانات

hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 07-05-2013, 10:34 PM المشاركة 2   
افتراضي


السلام عليمك

يمكن ان نستعمل timer لحسابتها مثلا


void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 0;
J++ ;
}
}

void main()
{
INTCON = 0xA0;
OPTION_REG = 80 ;
trisb.F0=1;

while(1)
{
tmr0=0;j=0;
while (portb.F0)
{
}

if(j!=0){
temp =(j*256+TMR0);

}

}
}




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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 08-05-2013, 09:19 PM المشاركة 3   
افتراضي


جزاك الله خير اخي الكريم
هل temp =(j*256+TMR0 يعطي قيمة ونحتاج الي تحويلها الى ثانية!
انا حاولت اعرض القيمة temp على LCD ولكن يعطي قراءات سريعة تظهر وتختفي لان المقاطعة تحدث كل rising وانا ادخلت Clock على RB0 وبالتالي راح تحدث مقاطعة بسرعة . هذا الكود ارجوا مراجعتة شكرا

كود:
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;

 unsigned int j,temp;
 //unsigned int TMR1_value;
char to_LCD[6];

void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 0;
j++ ;
}
}

void main()
{
INTCON = 0xA0;
OPTION_REG = 80 ;
trisb.F0=1;

while(1)
{
tmr0=0;j=0;
lcd_Init();
lcd_Cmd(_LCD_CLEAR);
lcd_Cmd(_LCD_CURSOR_OFF);
while (portb.F0)
{
}

if(j!=0){
temp =(j*256+TMR0);
 WordToStr(temp, to_LCD);
 LCD_Out(2, 1, to_LCD);
  //Tmr0=0;
}

}
}


hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 10-05-2013, 07:30 PM المشاركة 4   
افتراضي


السلام عليكم
نعم اخي المعادلة (temp =2 * ((j*256)+TMR0

تعطينا الزمن بال us
بالنسبة للسرعة ادا كان الزمن تابت او متقارب يمكن ان نقوم بالقياس في المرة الاولى ثم بعد ذلك نقوم بمقارنتها مع الاولى اذا كانت قريبة منها لا يضهرها و هكذا


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 10-05-2013, 07:42 PM المشاركة 5   
افتراضي


استخدمت T0 , T1 ومقاطعة RB0 كلها بتعطي كم عدد النبضات الداخلة انا اريد الزمن بين نبضتين ياليت احد يعطينا مثال
عدد النبضات الداخلة في الثانية تعطينا التردد ...
طيب و كما هو معلوم ان الزمن هو مقلوب التردد فهل جربت هذه الطريقة ؟؟ظ


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


INTCON = 0xA0;
OPTION_REG = 80 ;
اخي hunter27 بارك الله فيك واعتقد ان هناك مشكلة في الريجستر لان القيمة انت واضعها INTCON = 0xA0 وهي تقابل 10100000 بالتالي فان bit 4 بصفر وبالتالي RB0/INT External Interrupt غير مفعل
هل انت بتستخدم مقاطعة على RB0 او فقط مقاطعة T0 !!

عدد النبضات الداخلة في الثانية تعطينا التردد ...
طيب و كما هو معلوم ان الزمن هو مقلوب التردد فهل جربت هذه الطريقة ؟؟ظ
نعم اخي حيدر وهذا نفس الشئ اللي افكر فيه طيب شوف الكود هو بيقرا النبضات الداخلة كعدد اي اذا دخلت الاول يظهر على الشاشة 1 واذا دخلت النبضة الثانية يظهر على الشاشة 2 وهكذا.... لذالك انا احاول استخدم مقاطعة RB0 واشغل التايمر لكن لم اجد حل ياليت تشوف لي حل.

كود:
sbit LCD_RS at RD4_bit; 
sbit LCD_EN at RD5_bit; 
sbit LCD_D4 at RD0_bit; 
sbit LCD_D5 at RD1_bit;
 sbit LCD_D6 at RD2_bit; 
sbit LCD_D7 at RD3_bit; 
sbit LCD_RS_Direction at TRISD4_bit;
 sbit LCD_EN_Direction at TRISD5_bit; 
sbit LCD_D4_Direction at TRISD0_bit;
 sbit LCD_D5_Direction at TRISD1_bit; 
sbit LCD_D6_Direction at TRISD2_bit;
 sbit LCD_D7_Direction at TRISD3_bit;
 int maximum=0;
 unsigned int TMR1_value;
 char to_LCD[6]; 
void main() {
trisa=1;
trisb=0;
portb=0;
trisc.f0=1; 
ADCON1.PCFG3=0; ADCON1.PCFG2=0;ADCON1.PCFG1=0; ADCON1.PCFG0=1; 
T1CON.T1CKPS0=0; T1CON.T1CKPS1=0; T1CON.T1OSCEN=0; T1CON.T1SYNC=1; T1CON.TMR1CS=1; 
TMR1H = TMR1L = 0;
 Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF);
 while(1) { 
while(adc_read(0)> maximum) maximum = adc_read(0);
portb.f0=1; 
T1CON.TMR1ON=1; 
delay_ms(100); 
portb.f0=0;
 TMR1_value = (TMR1H << 8) + TMR1L;
 WordToStr(TMR1_value, to_LCD);
 LCD_Out(2, 1, to_LCD); 
while((adc_read(0)< maximum-1) ){} maximum=0; } }


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


لا اخفي عليك انا ايضا بحاجه الى هذا الكود ...
ان شاء الله سوف نصل الى نتيجة ...


الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,479
نشاط [ lovevb6 ]
قوة السمعة:127
قديم 11-05-2013, 07:20 PM المشاركة 8   
Talking




انا ايظاا اريد هذا الكود ......

إضافة رد

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

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

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


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

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