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

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

عبدالله فقيدة
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
المشاركات: 78
نشاط [ عبدالله فقيدة ]
قوة السمعة:0
قديم 24-05-2011, 06:09 PM المشاركة 1   
افتراضي طريقة ذكية لضبط زمن واحد ثانية لأي ميكروكنترولر ولأي كرستالة ولأي فترة زمنية اخرى Twitter FaceBook Google+



هذه الطريقة تستخدم فكرة خوارزمية بريزنهام في رسم الخطوط
نحن هنا سنستخدمها في ضبط زمن واحد ثانية كمثال:
فرضاً لدينا كرستالة ذات تردد 4 ميقاهيرتز، هذا يعطي زمن دورة 1 ميقا هيرتز ولدينا 256 دورة(الزمن الذي يأخذه تايمر زيرو لكي يحدث اوفر فلو)ـ
ولدينا بريسكيلر (prescaler)بتقسيم 64 اذن كل طفح للتايمر زيرو يمثل: 256*64=16384 microseconds
نحن نبدأ العد باستخدام متغير يأخذ مثلا قيمة 1,000,000 (ميكرو ثانية أي 1 ثانية)ـ
هذا العدد بفرض اننا اخترنا ان تكون الفترة واحد ثانية
فعندما يحدث انتربت للتايمر زيرو اوفرفلو interrupt of timer0 overflow عندما تحدث هذه المقاطعة نقوم بطرح 16384 من الرقم الثابت وهنا هو 1,000,000 فإذا اصبح العداد بقيمة سالبة نحدث الزمن اي نضيف واحد ثانية للرقم المظهر دلالة على مرور واحد ثانية ، ثم نضيف 1,000,000 مرة اخرى.
بالتأكيد الثانية الأولى كان بها خطأ وهو الذي يظهر بقيمة سالبة في العداد، لكن عندما نضيف الرقم 1,000,000 فإن الخطأ في الثانية السابقة يطرح من الثانية التالية لها، وينعدم الخطأ تماماً في دورة ثانيتين.(متوسط ا لخطأ =0).

هذه الطريقة تعطي زمن دقيق 100% كما يمكن تطبيقها على اي نوع من الميكرو كنترولات وكل انواع الكريستالة مهما كان ترددها ، كما يمكن ان نحدد الفترة الزمنية اي زمن اقل او اكثر من واحد ثانية.

للأمانة هذه الفكرة منقولة من بوست بلغة اجنبية من الموقع وأرجو من ذوي الخبرة وضع كود كامل يعطي واحد ثانية فقط وسيكون باقي الأضافة عليه سهلة http://www.massmind.org/techref/post...Black&tgt=post

Read more: http://www.qariya.com/vb/newthread.p...#ixzz1NIJK6yWE


التعديل الأخير تم بواسطة : عبدالله فقيدة بتاريخ 24-05-2011 الساعة 06:16 PM
اعلانات

goldfinger2
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2006
الدولة: egypt
المشاركات: 188
نشاط [ goldfinger2 ]
قوة السمعة:0
قديم 24-05-2011, 07:59 PM المشاركة 2   
افتراضي


احسنت اخ عبد الله وربنا يبارك فى علمك

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

عبدالله فقيدة
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
المشاركات: 78
نشاط [ عبدالله فقيدة ]
قوة السمعة:0
قديم 25-05-2011, 04:28 PM المشاركة 3   
افتراضي


اشكرك على هذه الكلمة الطيبة ، ربنا يكرمك ويحسن اليك، ويتولاك برعايته


عبدالله فقيدة
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
المشاركات: 78
نشاط [ عبدالله فقيدة ]
قوة السمعة:0
قديم 10-09-2011, 05:52 PM المشاركة 4   
افتراضي


لقد قمت بإختصار الشرح ،حيث اني ارى انه مفهوم لكل من لديه خبرة قليلة سابقة في موضوع الزمن بالنسبة للميكروكنترولر.
ان كان الشرح غير كافي و كان هنالك شخص لم يستطع ان يستوعب هذا الشرح فارجو منه ألا يتردد في سؤالي عن ذلك وانا على استعداد للتوضيح الكامل والشرح المفصل.

علماً بأنني قد صنعت ساعة رقمية بهذه الطريقة وكانت دقتها 100%


hade ali
:: مهندس ::
تاريخ التسجيل: Sep 2011
المشاركات: 1
نشاط [ hade ali ]
قوة السمعة:0
قديم 14-09-2011, 09:19 PM المشاركة 5   
افتراضي


طريقة جميلة جزاك الله خيرا


الصورة الرمزية أبو زكووور
أبو زكووور
:: عضو فضي ::
تاريخ التسجيل: Mar 2009
الدولة: سوريا العروبة
المشاركات: 436
نشاط [ أبو زكووور ]
قوة السمعة:82
قديم 14-09-2011, 10:20 PM المشاركة 6   
attension


بارك الله فيك
موضوع في غاية الأهمية
خصوصاً في مشاريع التوقيت و العدَّادات الزمنية
شكراً لك .


الصورة الرمزية mohatvnet
mohatvnet
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
الدولة: https://t.me/pump_upp
المشاركات: 961
نشاط [ mohatvnet ]
قوة السمعة:0
قديم 15-09-2011, 11:25 AM المشاركة 7   
افتراضي


شكرا جزيلا لك استاد عبدالله فقيدة
ولك لي طلب هل ممكن ان تضع لنا برنامج بالميكروسي فيه ما شرحت ولو برنامج بسيط والله لم افهم جيدا


هدف
:: مهندس ::
تاريخ التسجيل: Feb 2006
المشاركات: 38
نشاط [ هدف ]
قوة السمعة:0
قديم 15-09-2011, 12:39 PM المشاركة 8   
افتراضي


أرجو تعديل برنامجي هذا ليطبق هذه الفكرة

كود:
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB2_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
char text[2];
char scand ;
char ment ;
char hure ;
char var ;
unsigned var2 ;
char var3 ;

void main() {

trisb.f1=0; trisb.f3=0;
portb.f1=0; portb.f3=0;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
scand=0 ;
ment =0;
hure=1 ;
var =0 ;
var3=0;
a:
 delay_ms(160);
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Out(1,3,"hu");
 Lcd_Out(1,6,"me");
 Lcd_Out(1,9,"sc");
 if(scand==59){
    scand=0;
    ment++;
   }
 if(ment==59 & scand==59){
    ment=0;
    hure++;
   }
 if(hure==12 & ment==59 & scand==59){
    hure=1;
   }
 scand++;
 bytetostr( hure,text ) ;
 Lcd_Out(2,2,text);
 bytetostr( ment,text ) ;
 Lcd_Out(2,5,text);
 bytetostr( scand,text ) ;
 Lcd_Out(2,8,text);
 goto a;
}

إضافة رد

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

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

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


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

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