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

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

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:105
قديم 11-12-2009, 04:01 PM المشاركة 9   
افتراضي



أخي لم أجد ضالتي ....
ففي الموضوع الذي تفضلت و أدللتني علية .. لم يناقش كيفية إعلام حدوث إكتمال الـWatchDog و بداية العد من جديد...
بمعنى ... أنني أعلم كيف أستنتج حدوث إنتهاء في العد للـTimer0 (( و ذلك عن طريق Interrupt Flag الخاص بة , إذا ظهر سأعلم أن العد انتهى و قلب للعد مرة أخرى ))
و لكن كيف لي أن أعلم أن الـWatchDog إنتهى و سيبدأ العد مرة أخرى (((دون أن أضطر أن أدخل في الوضع الخاملSleepMode))) مع جزيل الشكر,,,
اخى الكريم هذه هى وظيفة ال wdt . لا اعتقد انه يمكن تعديل هذه الوظيفة
لكن اخى احمد ما الذى تود فعله ولماذا تريد استخدام ال WDT .
انا اظن انك تريد ان تقيس التردد اذا كان الامر كذلك فانا بحاجة الى PIC يحتوى على 2 تايمر مثلا البيك المعروف 16f877a يحتوى على 3 تايمر 0و1و2 . فما عليك الا تستخدم تايمر0 كعداد وتايمر1 كمؤقت.

اعلانات

الصورة الرمزية MYM
MYM
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
الدولة: مصر
المشاركات: 337
نشاط [ MYM ]
قوة السمعة:0
قديم 11-12-2009, 04:08 PM المشاركة 10   
ha


اخى الكريم هذه هى وظيفة ال wdt . لا اعتقد انه يمكن تعديل هذه الوظيفة
لكن اخى احمد ما الذى تود فعله ولماذا تريد استخدام ال WDT .
انا اظن انك تريد ان تقيس التردد اذا كان الامر كذلك فانا بحاجة الى PIC يحتوى على 2 تايمر مثلا البيك المعروف 16f877a يحتوى على 3 تايمر 0و1و2 . فما عليك الا تستخدم تايمر0 كعداد وتايمر1 كمؤقت.
نعم .... و لكن الورطة الحقيقية هي أن الجهاز تم تصنيعة بالفعل و توصيلة وهو يعمل بالـPIC 16F84A و للأسف ملزم بتعديل البرنامج على البيك ذاتة ....

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

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:105
قديم 11-12-2009, 05:34 PM المشاركة 11   
افتراضي


اذن استخدم تايمر0 كعداد counter واستخدم الا يعاز
كود:
delay_ms(1000);
وفقك الله


الصورة الرمزية MYM
MYM
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
الدولة: مصر
المشاركات: 337
نشاط [ MYM ]
قوة السمعة:0
قديم 11-12-2009, 06:45 PM المشاركة 12   
افتراضي


اذن استخدم تايمر0 كعداد counter واستخدم الا يعاز
كود:
delay_ms(1000);
وفقك الله
حسنا ... ولكن تبقى مشكلة ... هي أنني لو إستخدمت التأخير لمدة واحد ثانية هل سيتحمل

الـTimer0 عد كل النبضات دون أن يقلب (( لأنة إذا قلب العداد فستكون القيمة التي بداخلة ليست هي الحقيقية.. أي عدد النبضات في الثانية))
أي أن هذا الحل يمكننا من قياس الترددات حتى 255 نبضة في الثانية فقط لا أكثر


لا لا لا لا تصدق ممكن ...
ممكن نجعل الـتأخير لمدة ربع ثانية و نضرب ما بالـTimer0 في 4 .. بمعنى أننا لو إنتظرنا ربع ثانية و كانت القراءة في الـTimer0 هي 255 إذن الأشارة الداخلة تكون 255*4=1020 فيكون أقصى قياس هو 1020
إذن الموضوع ممكن نتحكم بة من خلال مدة التأخير لا بسعة التايمر.
على العموم .... كل هذا كلام نظري .... و سأجرب عمليا و أفيدك ..
ولك جزيل الشكر و العرفان على وقوفك بجانبي ....
بارك الله فيك


robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:105
قديم 12-12-2009, 03:49 AM المشاركة 13   
افتراضي


حسنا ... ولكن تبقى مشكلة ... هي أنني لو إستخدمت التأخير لمدة واحد ثانية هل سيتحمل
هذه ليست مشكلة ويمكن حلها من خلال ال void الخاصة ب interrupt وهو الحيز من البرنامج الذى يقوم المعالج عندما يقلب العداد وتكتب يالشكل التالى
كود:
void interrupt ()
{ 
    )if intcon.f2==1(
      {
       f=f+1;
       intcon.f2=0;
      }
{
وفى الحيز الرئيسى main
كود:
:::::::::::::::::::::::::::::
delay_ms(1000);
frequancy=tmr0+f*255;
طبعا هذا بافتراض ان ال prescaller =000 و ان التايمر سيبدأ من الصفر
والافضل تعريف المتغيرين كالاتى
كود:
long f=0;frequancy=0;
وفقك الله


الصورة الرمزية MYM
MYM
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
الدولة: مصر
المشاركات: 337
نشاط [ MYM ]
قوة السمعة:0
قديم 12-12-2009, 08:37 AM المشاركة 14   
yel


بسم الله ماشاء الله عليك ... ربنا يبارك فيك ...
صحيح ... بقولك
وأنا بكتب للعرض على LCD بكتب الأمر التالي
كود:
LCD_CUSTOM_CONFIG(&PORTB,3,2,1,0,&PORTA1,0,2);
LCD_CUSTOM_CMD(LCD_CUROR_OFF);
..
LONG FREQUENCY=0;
..
FREQUENCY=TMR0+(F*255);
.......
LCD_CUSTOM_OUT(1,1,FREQUENCY); المشكلة هنا .... في أمر العرض
ألاقية عرض قيمة الرقم اللي في الـــASCII CODE... يعني لو الـFREQUENCY تساوي 75 سيعرض على الشاشة حرف K ... و هكذا
أكتبها "FREQUENCY" تطلع الكلمة نفسها ....
أكتبها &FREQUENCY مفيش فايدة نفس الموضوع بتاع الـASCII
زمانك بتضحك علية دلوقتي ....ههههههههههههههههههه


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:100
قديم 12-12-2009, 10:43 AM المشاركة 15   
Thumbs up


بسم الله ماشاء الله عليك ... ربنا يبارك فيك ...
صحيح ... بقولك
وأنا بكتب للعرض على LCD بكتب الأمر التالي
كود:
LCD_CUSTOM_CONFIG(&PORTB,3,2,1,0,&PORTA1,0,2);
LCD_CUSTOM_CMD(LCD_CUROR_OFF);
..
LONG FREQUENCY=0;
..
FREQUENCY=TMR0+(F*255);
.......
LCD_CUSTOM_OUT(1,1,FREQUENCY); المشكلة هنا .... في أمر العرض
ألاقية عرض قيمة الرقم اللي في الـــASCII CODE... يعني لو الـFREQUENCY تساوي 75 سيعرض على الشاشة حرف K ... و هكذا
أكتبها "FREQUENCY" تطلع الكلمة نفسها ....
أكتبها &FREQUENCY مفيش فايدة نفس الموضوع بتاع الـASCII
زمانك بتضحك علية دلوقتي ....ههههههههههههههههههه

الا مر فى غاية السهولة


كود:
LCD_CUSTOM_OUT(1,1,48+FREQUENCY)

مع خالص الامنيات بالتوفيق

مهندس

احمد الشيمى


الصورة الرمزية MYM
MYM
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
الدولة: مصر
المشاركات: 337
نشاط [ MYM ]
قوة السمعة:0
قديم 12-12-2009, 11:47 AM المشاركة 16   
افتراضي



إنت فين يا بشمهندس شيمي .... و الله ليك وحشة ....
أنا جربت موضوع الـ48 و لكن منفعش ...
شكلي كدة عامل حاجة غلط في الكود
هذا هو الكود
كود:
void main()
{
lcd_custom_config(&portb,3,2,1,0,&porta,1,0,2) ;   // LCD Preparation
lcd_custom_cmd(lcd_cursor_off);
option_reg=0B00111111;  
trisb=0;
trisa=1;
int x=0;
float flow=0;
while(1)
{
x=tmr0;
tmr0=0;
flow=x*3.6;
lcd_custom_out_cp(48+flow) ;
delay_ms(1000);
}
}
لو أنا غلطان ... ودة هو الأكيد .... صححلي
و بعدين إبقى بص علينا دايما كدة ... متبقاش زي القمر ...من الشهر للشهر ههههههههههه

صحيح ... إية الفرق بين لما أقول
كود:
char x;
و أقول
كود:
char *x;


التعديل الأخير تم بواسطة : MYM بتاريخ 12-12-2009 الساعة 12:18 PM
إضافة رد

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

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

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


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

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