سلام دوستان.
من یک دماسنج نوشتم که میخوام در هر دقیقه از دما نمونه بگیرم و این نمونه ها رو در یک ساعت میانگین بگیرم تا میانگین دمای اتاق در یک ساعت مشخص بشه . بعد میخوام این میانگین ها رو فقط با هم جمع کنم تا مدت یک ماه یا 30 روز. من در این برنامه از کریستال ساعت استفاده کردم ولی مشکلم اینجاست که نمیدونم چه طور نمونه برداری کنم و میانگین بگیرم.
ممنون میشم کمکم کنید.
اینم لینک فایل شبیه سازی و برنامه به زبان بیسیک:
http://www.uploadtak.com/images/k4946_ne...ardari.rar
سلام
مهندس من برنامه شما رو نگاه نکردم ولی یه توضیح میدم شاید کمکتون کرده باشم؛
برای نمونه برداری در هر دقیقه باید یه تایمر تعریف کنید و ظرف یک دقیقه مقادیر خونده شده توسط adc رو داخل یک متغیر مثلا a بریزید
بعد در دقایق بعدی هم هربار مقادیر خونده شده رو داخل یه متغیر دیگه مثل b بریزید و با متغیر قبلی که اینجا a است جمع کنید و بعد متغیر b رو ریست کنید و مقادیر دیگه رو بخونید و این عمل رو و همینطور تا یک ساعت تکرار کنید
بعد یک ساعت که کامل شد مقدار متغیر a رو تقسیم بر 60 تا دقیقه کنید تا میانگین یک دقیقه بدست بیاد.
نمیدونم تونستم منظور و برسونم یا نه
درکل مشکلی بود درخواست کنید تا بیشتر توضیح بدم.
اگه توضیحاتی رو که فرمودین به صورت کد برام بنویسین خیلی ازتون ممنون میشم.
با تشکر
مهندس لاقل قبل درخواست یه سرچی بزنید تا بیس کار دستتون بیاد
اینطوری نمیشه کدها رو خط به خط واستون بنویسم
قبلش درمورد طریقه ایجاد زمان دقیق با تایمر2 و خوندن مقادیر adc و ریختن مقادیر در متغیر و ایجاد شرطهای مختلف سرچ بزنید تا هم باعث تسریع یادگیری خودتون بشه و هم بهتر بشه مباحث و انتقال داد
خوش باشید.
دوست عزیز ممنون. من نمی خوام از تایمر استفاده کنم و میخوام از کریستال ساعت استفاده کنم.
یکی از دوستان لطف کردن این کدها رو واسم فرستادن.
Dim X(60) As Byte
Dim Y As Byte
Dim Z As Byte
Dim Avrg As Byte
Dim Temp As Byte
Y = 0 : Avrg = 0
Do
If _sec = 59 Then : Incr Y : X(y) = Temp : End If
If Y = 60 Then : Y = 0 : For Z = 0 To 60
Avrg = Avrg + X(y)
Incr Y
If Y = 60 Then Avrg = Avrg / 60
Next
End If
Loop
End
البته دارم کاملش میکنم.
(۱۷-خرداد-۱۳۹۲, ۱۷:۰۸:۵۶)mehran032 نوشته است: [ -> ]دوست عزیز ممنون. من نمی خوام از تایمر استفاده کنم و میخوام از کریستال ساعت استفاده کنم.
یکی از دوستان لطف کردن این کدها رو واسم فرستادن.
Dim X(60) As Byte
Dim Y As Byte
Dim Z As Byte
Dim Avrg As Byte
Dim Temp As Byte
Y = 0 : Avrg = 0
Do
If _sec = 59 Then : Incr Y : X(y) = Temp : End If
If Y = 60 Then : Y = 0 : For Z = 0 To 60
Avrg = Avrg + X(y)
Incr Y
If Y = 60 Then Avrg = Avrg / 60
Next
End If
Loop
End
البته دارم کاملش میکنم.
تا جایی که من می دونم کریستال ساعت رو هم به تایمر وصل میکنن وگرنه که کاریش نمی شه کرد
اینی هم که می بینید توابع خود بیسکام هست که بازم از تایمر استفاده می کنه ولی شما نمی بینید
سلام
مهندس شما برای اینکه یک زمان تولید کنید مسلما باید از فرکانس کار میکرو و یه سری تقسیمات استفاده کنید که اینکار توسط قابلیت تایمر میکرو انجام میگیره که با این دستور؛
کد php:
Config Timer2 = Timer , Async = On , Prescale = 128
Enable Timer2 : Start Timer2
میتونید تایمر2 رو پیکر بندی کنید
در این دستور توسط Async = On فرکانس کار میکرو رو بصورت خروجی توسط کریستال ساعت و روی پایه های OSC1 و OSC2 تعیین می کنیم که درغیراینصورت تایمر از خود فرکانس میکرو کلاک خود رو تامین خواهد کرد
ولی علت استفاده از کریستال ساعت بصورت خروجی چی میتونه باشه؟
خب مسلما برای ایجاد زمان 1ثانیه دقیق نیاز به یک تقسیم فرکانسی دقیق داریم که فرکانس 1-4-8-16 مگاهرتز خود میکرو جوابگو نخواهد بود و برای رفع این مشکل میاییم از یه سری کریستال ساعت به نمونه شماره 11.059200 استفاده میکنیم تا تقسیمات دقیقی رو بتونیم بدست بیاریم.
در مورد برنامه کامل و خوندن اطلاعات هم نمیدونم تا چه محدوده ای اطلاعات دارید و نمیدونم با ADC و پرتکل ها مختلف کار کردید یا نه
ولی بصورت کلی شما باید توسط ADC میکرو تغییرات دمای سنسور رو بصورت ولتاژ در ورودی دریافت کنید و تایمر2 رو بصورت یک متغیر فرضا A تعریف کنید و تایمر2 رو فعال کنید و به محض اینکه تایمر2 به یک مقدار مشخصی رسید طی یک زیربرنامه مقدار ADC رو بخونید داخل یه متغیر مثل B بریزید و برگردید به ادامه برنامه و مابقی کار...
هدف از توضیح و عدم گذاشتن برنامه کمک به تسریع در یادگیری خود شماست تا حداقل بعد دریافت کد اون بیس کار دستتون بیایید.
باز در مورد برنامه خودتون تحقیقاتی بکنید و هرجایی به مشکل برخوردید درخواست کنید.
خوش باشید.