بسم الله الرحمن الرحيم
اخى اولا معذرة على التاخر
ثانيا هذا الكود الذى تستخدم يعد معقدا هكذا بالنسبة للوظيفة الى انت عايزها
ثالثا التوصيلات خاطئة زى ما قال البشمهندس Tico
رابعا وبدون زعل انت قمت بالنقل فقط حتى بدون العلم ما هو الجزء الخاص بالوظيفة
وللعلم هذا الكود لا يصلح لك الطريقة نعم اما الكود فلا لانك لو كنت قراءت عن التايمر 0 كنت هتعرف
ان التايمر له اعدادات على حسب مدة العمل من 256 ميكرو مثلا الى اكبر
باستخدام معاملات القسمة واواواو الى اخرة
ومش كل الاعدادات واحدة
الفكرة هنا انك تقرء عن التايمر 0 نفسة الاول وبعد كدة بوص على الكود
وانت لوحدك هتعرف لية مش مناسب وسعتها هتقدر تعدل علية
اى الغرض الفهم اولا يا اخى
واعذرنى اذا كان فى كلامى اى حاجة ممكن تزعلك
ناتى الى الجزء العملى
بالنسبة للاستخدام كا عداد وبما ان المدة 10 مللى ثانية
يبقى انا ارجحلك تايمر 1 وليس تايمر 0
ياريت تقراء عنهم وعن اى شرح فيهم
وان شاء الله انا هعملك كود قريب يقيس عرض النبضة بالتايمر 1
يعنى متشلش هم ان شاء الله فقط قم بالاطلاع على شروحات للتيمارت
بالتوفيق ان شاء الله
|
السلام عليكم
أخي بالفعل قد دكرت في الموضوع أنني نقلت الكود ولاكن فهمته جيدا
هدا كود عملته وهو شغال جيدا ولاكن هناك شيئ من عدم الدقة ربما بسبب
زمن تنفيد الكود في الحلقة
كود:
#define ECHO PORTA.f0
unsigned long width;
float distance;
void interrupt()
{
width++;
intcon=0b00100000;
TMR0=0;
}
void main ()
{
TRISA=0xFF;
TRISB=0x00;
INTCON = 0x00; //turn off interrupts
ADRESH = 0x00;
ADRESL = 0x00;
ADCON1 = 0x06; //all inputs are digital
ADCON0 = 0x00;
ADCON1 = 0x06; //all inputs are digital
ADCON0 = 0x00;
option_reg=0b10000000; //confuguration
intcon=0b10100000; //validation du timer
TMR0 = 0;
Loop:
PORTB=0x00;
width=0;
distance=0;
PORTA=0x00;
TMR0 = 0;
while (ECHO==0); //wait until an echo is received
TMR0 = 0; width=0;
while (ECHO==1); //calculate the width of the echo received
distance=(2*(TMR0+(width*256)))-(width*11)-7 ;
if (distance<5000000)
{
PORTB=0x10;
delay_ms(1000);
}
else if (distance>5000000) {
PORTB=0xFF;
delay_ms(1000);
}
goto loop;
}
قمت ب حساب زمن 5 ثواني ولاكن أجد أن هناك تأخير يصل لثانية مع العلم أن ما أريده هو دقة بالميكروثانية
هل يمكن أن تقول لي لمدا يجب استعمال التايمر 1 بدل 0 مع العلم أنني قرأت عن mode de capture ccp1 ولاكن لم أفهم كيف أسخدمها ؟