کد:
$regfile = "m32def.dat"
$crystal = 8000000
'----------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = _
Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cursor Off
'-----------
Config Timer1 = Counter, Edge = Rising
Ddrb.1 = 0
Portb.1 = 1
'-------
Config Timer2 = Timer,Async=ON, Prescale = 128
'---------------
Enable Timer1
Enable Timer2
Enable Interrupts
'---------------------
On Ovf1 Pulse_counter
On Ovf2 Displays
'-------------------
Dim A As Long, B As Byte
B = 0
'----------------------------
Cls
Locate 1, 1
Lcd "Frequency meter"
Locate 2, 1
Lcd "avrprojects.info"
Wait 5
Cls
'-----------------------
Start Timer2
'------------
Do
Loop
End 'end program
'--------------
Displays:
Stop Timer2
Cls
Home
A = B * 65536
A = A + Counter1
Lcd "Frequency:"
Locate 2, 1
Lcd A ; " HZ"
B = 0
Counter1 = 0
Timer2 = 0
Start Timer2
Return
'----------------------
Pulse_counter:
Incr B
Counter1 = 0
Return
در مورد سئوالتون باید بگم که کار تایمر ربطی ب واحد ADC نداره دوتا واحد کاملا مجزا هستند؛و وقتی شما دارید فرکانس رو با استفاده از تایمر کانتر تعریف شده در برنامه بدست میارید در حقیقت دارید تعداد پالس ها رو با کانتر یک در مدت زمان یک ثانیه ایی که تایمر دو درست میکنه میشمارید؛
همین؛در نهایت ی عدد دارید که نشون گر دوره تناوب سیگنال ورودی یا همون فرکانس هست،پس ما در این پروژه هیچ استفاده از ADC نکردیم

برنامه هم چند تا ایراد داشت رفع شد(برنامه و فایل شبیه ساز پروتئوس رو ضمیمه کردم)
موفق باشید
(۰۶-دى-۱۳۹۱, ۲۱:۰۴:۵۲)jansfred نوشته است: [ -> ]فركانس متر
مگه توي فركانس متر ورودي به صورت آنالوگ نيست؟
كه بايد از adc ميكرو استفاده كنيم ديگه
پورت آ هم adc داره ديگه
درست ميگم؟
پروژه من فركانس متر خيلي دقيق با كريستال ساعت هست
با تشكر
سلام
فرکانس متر احتیاجی به adc میکرو ندارد در ورودی
فرکانس مترها یک ترانزیستور با بایاس C ویا دو ترانزیستور
بصورت اشمیت تریگر وجود دارد تا ورودی با شکل موجهای انالوگ
را به مربعی تبدیل کند این کار را میتوان با adc میکرو انجام
داد ولی رنج سنجش را خیلی پایین میاورد البته برای یک کاربرد
محدودویا اموزش adc مفید است
اما مدار فرکانس متر دقیق ارتباطی به نحوه پردازش ورودی ندارد
وفقط باید دوره زمانی شمارش پالس مربعی وارد شده توسط کریستال
تامین شده باشد
مدار وبرنامه ارسالی دوستمان در بالا گویاتر است (همزمان با متن من ارسال شده یا
من قبلا ندیدم)
موفق باشید
از هردوي شما خيلي خيلي ممنونم
يك دنيا ممنون
كاملا متوجه شدم قضيه چيه
دوست عزیز من این پروژه رو تو سایت گذاشتم.
با کریستال ساعت هم هست و خیلی هم دقیقه ولی با سون سگمنت نشون میده.
ولی میشه با یک مقدار دستکاری کردن اطلاعات رو با ال سی دی یا پورت سریال هم نشون داد.
اگه بکارت میاد تا لینکشو بت بدم؟
نيكيو پرسش
بله دوسته عزيز لينك بده
تشكر
نقل قول: با تشكر
پس يعني اين الان با adc ميكرو كار ميكنه ديگه؟
آخه lcd رو با پورت a كانفيگ كردين؟
من يه برنامه ميخام كه با كريستال ساعت باشه و ورودي آنالوگ داشته باشه(با adc ميكرو كار كرده باشه)
ترجيحا مختصر باشه كه بتونم واسه استادم توضيح بدم
بينهايت ممنون
jansfred جان گرفته بودی ما رو داداش

الان سه ساعت بود داشتم رو adc فکر میکردم که چطوری میتونم بین یه ولتاژ انالوگ ورودی با فرکانس رابطه ایجاد کنم
(۰۷-دى-۱۳۹۱, ۲۲:۴۶:۵۲)student-p نوشته است: [ -> ]کد:
$regfile = "m32def.dat"
$crystal = 8000000
'----------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = _
Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cursor Off
'-----------
Config Timer1 = Counter, Edge = Rising
Ddrb.1 = 0
Portb.1 = 1
'-------
Config Timer2 = Timer,Async=ON, Prescale = 128
'---------------
Enable Timer1
Enable Timer2
Enable Interrupts
'---------------------
On Ovf1 Pulse_counter
On Ovf2 Displays
'-------------------
Dim A As Long, B As Byte
B = 0
'----------------------------
Cls
Locate 1, 1
Lcd "Frequency meter"
Locate 2, 1
Lcd "avrprojects.info"
Wait 5
Cls
'-----------------------
Start Timer2
'------------
Do
Loop
End 'end program
'--------------
Displays:
Stop Timer2
Cls
Home
A = B * 65536
A = A + Counter1
Lcd "Frequency:"
Locate 2, 1
Lcd A ; " HZ"
B = 0
Counter1 = 0
Timer2 = 0
Start Timer2
Return
'----------------------
Pulse_counter:
Incr B
Counter1 = 0
Return
در مورد سئوالتون باید بگم که کار تایمر ربطی ب واحد ADC نداره دوتا واحد کاملا مجزا هستند؛و وقتی شما دارید فرکانس رو با استفاده از تایمر کانتر تعریف شده در برنامه بدست میارید در حقیقت دارید تعداد پالس ها رو با کانتر یک در مدت زمان یک ثانیه ایی که تایمر دو درست میکنه میشمارید؛
همین؛در نهایت ی عدد دارید که نشون گر دوره تناوب سیگنال ورودی یا همون فرکانس هست،پس ما در این پروژه هیچ استفاده از ADC نکردیم
برنامه هم چند تا ایراد داشت رفع شد(برنامه و فایل شبیه ساز پروتئوس رو ضمیمه کردم)
موفق باشید
(۰۷-دى-۱۳۹۱, ۲۲:۴۸:۰۸)vigraz نوشته است: [ -> ] (۰۶-دى-۱۳۹۱, ۲۱:۰۴:۵۲)jansfred نوشته است: [ -> ]فركانس متر
مگه توي فركانس متر ورودي به صورت آنالوگ نيست؟
كه بايد از adc ميكرو استفاده كنيم ديگه
پورت آ هم adc داره ديگه
درست ميگم؟
پروژه من فركانس متر خيلي دقيق با كريستال ساعت هست
با تشكر
سلام
فرکانس متر احتیاجی به adc میکرو ندارد در ورودی
فرکانس مترها یک ترانزیستور با بایاس C ویا دو ترانزیستور
بصورت اشمیت تریگر وجود دارد تا ورودی با شکل موجهای انالوگ
را به مربعی تبدیل کند این کار را میتوان با adc میکرو انجام
داد ولی رنج سنجش را خیلی پایین میاورد البته برای یک کاربرد
محدودویا اموزش adc مفید است
اما مدار فرکانس متر دقیق ارتباطی به نحوه پردازش ورودی ندارد
وفقط باید دوره زمانی شمارش پالس مربعی وارد شده توسط کریستال
تامین شده باشد
مدار وبرنامه ارسالی دوستمان در بالا گویاتر است (همزمان با متن من ارسال شده یا
من قبلا ندیدم)
موفق باشید
دوستان ممنون که خوب توضیح دادید، منم اینا رو فراموش کرده بودم!
در کل تو adc ما یه ولتاژ آنالوگ به میکرو میدیم و طبق یه رابطه ای اون و به دیجیتال تبدیل می کنیم؛
adc ما که 10 بیت داره، طبق رابطه ی زیر ولتاژ رو به دیجیتال تبدیل می کنه؛
کد:
B = Getadc(0)
A = B / 204.6
D = Fusing(a , "#.##")
متغیر b همون 10 بیت adc ماست که مقدار 1023 است و با این تقسیمات می تونیم ولتاژ بین 0 تا 5 ولت بگیریم.
اینا رو همینطوری دور از بحث گفتم تا بعدا به دردتون بخوره

نه داداشه گلم مگه آزار دارم اذيتت كنم(روبوخان)
آخه ميدونيد : استاد ما يه فركانس متر توي پروتوس جلومون بست كه از adc ورودي ميگرفت و خيلي برنامش كوتاه بود
بعد هم گفت كسي حق يادداشت نداره و در اخر هم گفت يكي شبيه اين واسم بياريد(10 نمره داره)
منم اصلا يادم نمياد با تايمرها كاركرده بود (شايد برنامش 15 خط هم نميشد اما خيلي درست كار كرد)
ولي در كل بابت راهنمايي شما و تمام دوستان يه دنيا ممنون
جناب روبو خان دقيقا استادمون با همين قسمت آخر توي ارسال 17 كار كرد
همين عدد 1023 رو تقسيم به 5 كردو 204.6 به دست اومد كه تو برنامه قرار داد
و از دستور فيوزينگ استفاده كرد
اينايي كه دور از بحث گفتين دقيقا همينايي بود كه استادم گفت و من لازم داشتم
با تشكر
فقط اگه ميشه برنامشو به طور كامل بگيد
(۰۸-دى-۱۳۹۱, ۱۵:۵۹:۱۸)jansfred نوشته است: [ -> ]نه داداشه گلم مگه آزار دارم اذيتت كنم(روبوخان)
آخه ميدونيد : استاد ما يه فركانس متر توي پروتوس جلومون بست كه از adc ورودي ميگرفت و خيلي برنامش كوتاه بود
بعد هم گفت كسي حق يادداشت نداره و در اخر هم گفت يكي شبيه اين واسم بياريد(10 نمره داره)
منم اصلا يادم نمياد با تايمرها كاركرده بود (شايد برنامش 15 خط هم نميشد اما خيلي درست كار كرد)
ولي در كل بابت راهنمايي شما و تمام دوستان يه دنيا ممنون
خدا نکنه مردم آزار باشید

خواهش میکنم
نقل قول: جناب روبو خان دقيقا استادمون با همين قسمت آخر توي ارسال 17 كار كرد
همين عدد 1023 رو تقسيم به 5 كردو 204.6 به دست اومد كه تو برنامه قرار داد
و از دستور فيوزينگ استفاده كرد
اينايي كه دور از بحث گفتين دقيقا همينايي بود كه استادم گفت و من لازم داشتم
با تشكر
فقط اگه ميشه برنامشو به طور كامل بگيد
ببینید میشه این کار رو انجام داد، برنامه شم میزارم واستون ولی ببینید با adc نمیشه و فقط میشه یه رابطه بین ولتاژ و فرکانس نوشت و...
تو این برنامه ای که من گذاشتم واستون، ابتدا ولتاژ ورودی رو توسط adc به 0 تا 5 ولت تبدیل میکنید.
بعد یه رابطه ای رو بین فرکانس و ولتاژ می نویسد که من یه رابطه فرضی نوشتم که درست نیست فقط محض نمونه قرار دادم.
بعد ولتاژ و فرکانس رو رو یه lcd نمایش میدید؛
کد:
$regfile = "m8def.dat"
$crystal = 1000000
'----------
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 16 * 2
'----------
Config Adc = Single , Prescaler = Auto , Reference = Aref
Enable Adc
Start Adc
'----------
Dim A As Word
Dim D As Single
Dim B As Single
Dim E As Single
Dim C As String * 10
Dim F As String * 10
'----------
Cls
Cursor Off
'----------
Do
'----------
A = Getadc(0)
B = A / 204.6
C = Fusing(b , "#.##")
'----------
D = B / 4
E = D * 100
F = Fusing(e , " #.##") اینا رو برای نمونه نوشتم
'----------
Locate 1 , 1
Lcd "VOLT " ; C ; " " ; "V":
'----------
Locate 2 , 1
Lcd "FRE " ; F ; " " ; "HZ": اینا رو برای نمونه نوشتم
'----------
Loop
End 'end program
اینم فایل کاملش؛
[
attachment=8347]
آقا دستت درد نكنه
دقيقا دنبال همين بودم
يك دنيا ممنون
واسه ي ورودي هم استادم يه پتانسومتر گذاشت ك پايه ي وسط به ورودي آنالوگ و يك پايه به VCC و پايه ي ديگه به GND
كه با تغيير پتانسيومتر مقدار ولتاژ يا فركانس عوض ميشد
تشكررررررررررررررررررررررررر
جناب jansfred عزیز
احتمالا استادتون میخواسته ی جوری دستور Fusing رو بهتون معرفی کنه

نه اینکه طرز ساخت فرکانس متر رو با استفاده از ADC یادتون بده؛چون همچین چیزی شدنی نیست؛مثل این میمونه که بخواین با ترازو مقدار دما محیط رو بدست بیارین؛ن؟
موفق باشید...
نميدونم . احتمالا
سلامت باشيد