ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17
  1. #1
    2010/04/13
    184
    3

    اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    تایمر های pic18f452 یا بصورت 8 بیتی کار میکنند یا 16 بیتی . ولی من میخواهم زمان صفر تا یک ثانیه را با دقت یک میکرو بسازم . یعنی اینکه بتوانم تاخیر تولید شده را با دقت یک میکرو ثانیه از صفر تا یک ثانیه بسازم . برای اینکار اگر بخواهم از تایمر استفاده کنم ، تایمر من باید 20 بیت داشته باشد . چون یک میلیون حالت میشود و یک میلیون در مبنای دو ، بیست بیت دارد . برای همین با یک تایمر 16 بیتی نمیتوانم کار کنم . به نظر شما استفاده از دستور delay_us معقول است ؟ چون شنیدم که این دستورها خیلی قابل اطمینان نیستند و ممکن است زمانشان دقیق نباشد و هی تغییر کند . میشه delay_us را با یک متغیر بکار برد ؟ مثلا عدد 956384 را در یک متغیر بریزیم و به دستور delay_us بگیم که به اندازه این متغیر صبر کن ؟ غیر از دستور delay و تایمر کسی راه دیگه ای میتونه به این حقیر ؟ :cry2: :cry2: :cry2:پیشنهاد کنه
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ*مشتري نيست
    گروهــــي آن گروهي اين پســـندند
  2. #2
    2010/04/13
    184
    3

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    یک کم بیشتر توضیح بدم :من در واقع میخوام یک تاخیر به اندازه 0 تا یک ثانیه داشته باشم ، به طوریکه این قدرت را داشته باشم که میکرو ثانیه میکرو ثانیه ، اون را کم و زیاد کنم ... اگر من تا تاخیر 65536 میکرو ثانیه هم میخواستم ، میتوانستم از تایمر ها استفاده کنم ... چون که رجیستر تایمر ها 16 بیت جا دارند ... اما تا یک میلیون میکرو ثانیه (یا همون یک ثانیه) نمیتونم تاخیر ایجاد کنم ... برای همین گیر کردم.
    هیچکس نیست لطف کنه کمکم کنه؟ :cry2:
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ*مشتري نيست
    گروهــــي آن گروهي اين پســـندند
  3. #3
    2008/07/08
    بابلسر
    3,746
    57

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    مي توني دايي جان
    بايد يك رجيستر ديگه تعريف كني كه بعنوان بايت سوم تايمر ميشه. مثلا timerbyte3
    هر بار كه تايمر 16 بيتي به 65535 رسيد ( اول برنامه اينتراپت آورفلو تايمر رو فعال كن) مي توني داخل اينتراپت روتين مقدار timerbyte3 را يكي اضافه كني.
    اين جوري يه تايمر 24 بيتي داري
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
  4. #4
    2008/08/05
    275
    4

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    میتونی از overflow تایمر استفاده کنی
    و مقدار تایمر تا بینهایت( بزرگترین متغییر از لحاظ بیتی)رو داشته باشی
    time=ovf_counter*65535+counter
    www.tehranelec.com
  5. #5
    2008/09/29
    6,000
    417

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    اگر تاخير دقيق ميخاين:
    بايد يه كريستال ساعت هم بگيري كه فركانسش 32768 هرتز هست . به پايه T1CKI و T1OSI وصلش كني( در اين مورد به ديتا شيت مراجعه كن)

    اين كريستال به ازاي هر 2 پانيه 1 بار تايمرو سر ريز ميكنه كه باي اينكه اين موضوع برطرف بشه بايد به اضاي هر Oweflow مقدار 32768 رو روي رجيستر هاي تايمرت كه همون TMR1H و TMR1L هستن بنويسي كه اينطوري هر 1 ثانيه سرريزي رخ ميده

    ولي توي پست دومي ديدم كه دقتش هم برات مهمه !

    خوب اين كارو سخت كرد! پس يه كار كن شما به يا اسيلاتور 1MHz احتياج داري!

    با اي سي 555 يه اسيلاتور 1000000 هرتز دقيق بساز و بده به تايمر 0 اينطوري به اضاي هر تانيه 3906 بار overflow داري
    عد از هر 3906 بار سر ريز شدن شما 3970 تا بايد با تايمرت اضافه كني چون باقيمونده زمان شما تا 1Mhz كسر نياد و تايمرت دقيق كار كنه با يه محاصبه ساده ميتوني با دقت ميكرو ثانيه تاخير ايجاد كني...

    حالا برامون بگو اين پروژه قراره چيكار كنه شايد راه انجامشو درست برات نگفته باشم و راه حل ساده تري هم بشه براش پيدا كرد دنياي ميكرو دنياي كلك سروار كردنه :biggrin:



  6. #6
    2010/04/13
    184
    3

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    با تشکر از کمکتون ... جناب آروین ... بنده همین سیگنال را میخواهم از میکرو بگیرم و کار دیگه ای نمیخوام بکنم . فکر کنم راه آقای احمد بهینه تر باشه . چونکه میکرو تعداد دفعات کمتری به روتین وقفه میره ... :read: .
    راستی یک مشکل اساسی . من دارم اطلاعات رو بایت بایت از یک دستگاه از طریق رابط یوزآرت به میکرو منتقل میکنم ... وقتی که اطلاعات رو هر 100 میلی ثانیه یک بار میفرستم ، بدون ایراد میگیره ... ولی اگر بایت ها رو تند تر ارسال کنم مثلا هر 5 میکرو ثانیه یکبار و کمتر از 5 میکرو ثانیه ، اون وقت میکرو قات میزنه و نمیتونه اطلاعاتو دریافت کنه . حالا این که چیزی نیست ... من چون سرعت برام خیلی مهمه میخوام از کریستال 25 مگا هرتز استفاده کنم ...اونطوری تعداد بیت هایی که احتیاج داره 25 برابر میشه ! :surprised: ولی خوب ... سعی میکنم یک کاریش بکنم ...
    توی همون ارسال 100 میکرو ثانیه یکبار ، اگر دکمه ریست رو بزنم و پایه ریست میکرو را فعال کنم ، مشکلی پیش نمیاد . اما اگه هی تند تند پشت سر هم میکرو را ریست کنم ، گاهی اوقات قات میزنه و نمیتونه اطلاعات رو که داره ارسال میشه درست دریافت کنه . یا مثلا اگه تغذیه را چند بار قطع کنم ، دوباره قات میزنه و تا ریستش نکنی درست نمیشه ... آخه من میخوام مدار را طوری طراحی کنم که با رفتن و آمدن برق و با خاموش روشن شدن ، قاطی نکنه ... بنظر شما ایراد کار از کجاست ؟ میخوام اگر از آسمون سنگ هم بباره مدار پایداری خودشو از دست نده .
    ممکنه مربوط به کیفیت کریستال ، یا مقدار اون دو تا خازن عدسی که از طریق کریستال به زمین وصل میکنیم باشه ؟ من مقدار مناسب اون خازن ها را از تو دیتاشیت خوندم ... برای هر کریستال یک بازه برای انتخاب مقدار خازن داده بود ... مثلا از 1 تا 33 نانو فاراد . ممکنه مقدار دقیقی برای این خازن ها باشه که اگه اون مقدار رو بگذاریم کارکرد میکرو در سرعت های بالا ، و یا هنگام قطع شدن تغذیه و ... پایدار تر بشه ؟
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ*مشتري نيست
    گروهــــي آن گروهي اين پســـندند
  7. #7
    2008/09/29
    6,000
    417

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    خوب من فکر کنم این یه ارتباط 1 طرفس آره؟

    با چنتا سیم داری کار میکنی؟

    کلاک داری؟
  8. #8
    2007/08/08
    216
    1

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    سلام
    من تا به حال با pic کار نکردم ولی اگر شما بتونید از تایمر وقفه overflow بگیرید انوقت میتونید تو روتین وقفه مقدار یه شمارنده رو زیاد کنید و مقدار اون شمارنده هر وقت به حد مورد نیاز رسید اونوقت یه کار خاص انجام بشه. به کد زیر دقت کنید:
    کد:
    interrupt routine every 250ms{
    counter++;
    if (counter==4){// 1s completed
    counter=0;
    /*
    your code here
    /*
    }
    }
    اگر کد رو متوجه نمیشید بگید تا بیشتر توضیح بدم.

    موفق باشید
    Work with what you have .Never limit yourself by things you could have had
  9. #9
    2008/07/08
    بابلسر
    3,746
    57

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    دايي جان
    ارتباط سريال اصلا وقفه نمي خواد!!!
    زيرا امكان نداره سرعت USART از سرعت ميكرو بيشتر باشه.
    مثلا اگه baud rate رو 115200 بيت بر ثانيه گذاشته باشي و بين دوبايت پشت سر هم يك استوپ بيت فاصله باشه، زمان 1/115200 ثانيه وقت محاسباتي داري. كه براي ميكرويي كه با كلاك 20 مگ كار مي كنه ميشه 173 كلاك پالس. اگه هر دستورالعمل ميكرو 2 كلاك پالس لازم داشته باشه باز هم مي تونه 86 دستورالعمل در فاصله بين دوبايت اجرا كنه.
    پس مشكل جاي ديگست.
    وقتي دستگاه A مي خواد به دستگاه Bآ* ديتاي بيشتر از يك بايت بفرسته بايد يك پروتكل پياده سازي بشه. وگرنه رشته ي كلام از دستشون در ميره.
    انواع پروتكل هاي استاندارد ايجاد شده تا ارتباط بين دستگاه هاي مختلف ساده بشه. مثلا همه فلش مموري ها بايد با يه استاندارد داده بگيرن و بدن. يا بيشتر PLC ها از پروتكل Modbus استفاده مي كنند.
    تو هم مي توني از يكي از اين پروتكل ها استفاده كني يا اينكه خودت يه پروتكل بسازي.
    ساده ترين پروتكلي كه ميشه ساخت از افزودن 2 بايت اضافي به بايت هاي ديتا بوجود مياد. ايندو بايت بترتيب استارت بايت و استوپ بايت ناميده ميشن. اول استارت بايت فرستاده ميشه و بعد بايت هاي ديتا و دست آخر هم بايت استوپ.
    گيرنده اين بايت ها بايد ببينه تعداد بايت دريافت شده چندتاست و بايت اول و بايت اخر مطابق پروتكل هست يا نه. اگه بود بايت هاي مياني يعني ديتا ها رو قبول مي كنه و اگه نياز به پاسخ باشه با همون پروتكل پاسخ ميده.
    ...
    اين بحث ميتونه يه كتاب بشه. پس بهتره سرتونو درد نيارم
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.
  10. #10
    2010/04/13
    184
    3

    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    نقل قول نوشته اصلی توسط arvinfx
    خوب من فکر کنم این یه ارتباط 1 طرفس آره؟

    با چنتا سیم داری کار میکنی؟

    کلاک داری؟
    با دو تا سیم .....................TX+ و TX- ... چون ارتباطم از طریق RS485 هستش ... اونو میدم به یک max485 ... بعدش خروجی این آی سی رو میدم به RX میکروکنترلرم . اارتباطم بصورت آسنکرون هستش . ...اسیلاتور میکروکنترلرم ، کریستال 10 مگاهرتز خارجی هستش که دو طرفشو با دو تا خازن عدسی 22 نانو فاراد زمین کره ام
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ*مشتري نيست
    گروهــــي آن گروهي اين پســـندند
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17

موضوعات مشابه

  1. پاسخ: 10
    آخرين نوشته: 2015/06/18, 14:18
  2. ترجمه رجیستر های بخش تایمر LPC2132
    توسط drafshin در انجمن NXP
    پاسخ: 3
    آخرين نوشته: 2013/01/28, 18:27
  3. پاسخ: 0
    آخرين نوشته: 2011/05/19, 23:34
  4. رجیستر حامل مقدار تایمر
    توسط shahab_esf_sadedel در انجمن میکروکنترلرهای PIC
    پاسخ: 4
    آخرين نوشته: 2010/11/27, 15:03
  5. (((چکار کنیم مقاومت قرار داده شده در مدار داغ نشود یا اصلاً نسوزد)))
    توسط mehranrezaie2010 در انجمن مفاهیم پایه برق و الکترونیک
    پاسخ: 5
    آخرين نوشته: 2010/07/22, 13:00

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •