پروژه فرکانس متر با AVR-شبیه سازی در پروتئوس
فرکانس متر به دستگاهی گفته می شود که می تواند فرکانس ورودی را بر اساس زمان شمارش نموده و اعلام کند. فرکانس مترها از لحاظ میزان اندازه گیری فرکانس و همچنین نوع شکل موج ها با یکدیگر متفاومت می باشند. ممکن است بعضی از فرکانس متر ها فقط تا فرکانس خاصی را اندازه گیری کنند و یا تنها بتوانند شکل موج مربعی را اندازه گیری کنند.
در این پست پروژه فرکانس متر با AVR را که در نرم افزار شبیه ساز پروتئوس نیز کشیده شده است برای دانلود و استفاده قرار داده ام. در این پروژه از میکروکنترلر شرکت اتمل به شماره ATMEGA16 استفاده شده است. از یک عدد LCD کاراکتری نیز برای نشان دادن مقدار فرکانس اندازه گیری شده استفاده شده است.
در این پروژه برای اندازه گیری دقیق فرکانس از تایمر میکروکنترلر به همراه کریستال 11.592 مگاهرتز استفاده شده. طریقه عملکرد پروژه به این صورت می باشد که فرکانس ورودی به پایه شماره 2 میکروکنترلر یا همان ورودی تایمر 1 با نام T1 داده می شود. در برنامه زمان دقیق یک ثانیه توسط تایمر صفر تولید می شود و پس از رسیدن به مقدار زمان یک ثانیه در روتین وقفه تایمر شماره صفر تعداد سیکل های شمرده شده توسط کانتر یک خوانده شده و روی LCD به نمایش در می آید.
در زیر شکل LCD استفاده شده در این پروژه که با نام LCD کاراکتری با سایز 16*2 نیز شناخته می شود نشان داده شده است و همچنین در ادامه شکل میکروکنترلر ATMEAG16 نیز آورده شده.در این پروژه LCD کاراکتری در مد ارسال 4 بیت پیکربندی شده است.
LCD کاراکتری
میکروکنترلر ATMEGA16
در زیر کد پروژه فرکانس متر با میکروکنترلر AVR و شبیه سازی در پروتئوس نیز آورده شده است و در ادامه نیز می توانید پروژه را به صورت اپن سورس دانلود کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
//www.enee.ir // telegram channel >>>>>> @eneeir #include <mega16.h> #include <delay.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x12 ;PORTD #endasm #include <lcd.h> unsigned int frequency , count ; char str[16]; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { count++ ; if (count >= 675 ) { frequency = TCNT1 ; lcd_clear(); lcd_gotoxy(0,0); sprintf(str,"freq :%u Hz",frequency); lcd_puts(str); count=0 ; TCNT1=0 ; } } void main(void) { // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 172.800 kHz // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x03; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: T1 pin Falling Edge // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // LCD module initialization lcd_init(16); lcd_putsf("freq : Hz"); // Global enable interrupts #asm("sei") TCNT1=0; while (1) { }; } |
دانلود پروژه فرکانس متر با AVR