در این پست از سایت اِمیک, پروژه AVR تولید صدای اژیر خطر (الارم) قرار داده شده است. این پروژه بسیار ساده می باشد و دارای شماتیک و برنامه بسیار ساده ای می باشد و با استفاده از میکروکنترلر ATmega16 طراحی شده است. این پروژه با وجود سادگی بسیار کاربردی می باشد, به عنوان مثال در ساخت دزدگیر و یا سیستم های امنیتی و حفاظتی یا هر سیستم هشدار دهنده ی دیگری برای تولید صدای اژیر می توان از این پروژه استفاده کرد. شماتیک این پروژه به صورت زیر می باشد:
همانطور که گفته شد در این پروژه از میکروکنترلر ATmega16 استفاده شده است و از انجایی که نمی شود بلندگو را مستقیم به میکروکنترلر متصل کرد (به دلیل جریان مصرفی بالای ان) ما بلندگو را از طریق یک ترانزیستور (Q1) به میکروکنترلر متصل کرده ایم.
عملکرد پروژه به این صورت است که ما با استفاده از تایمر میکروکنترلر یک موج PWM روی پین خروجی تایمر تولید می کنیم که این موج PWM از طریق ترانزیستور Q1 که بصورت سویچینگ استفاده شده به بلندگو اعمال می شود. ما در این پروژه در طول یک ثانیه دو موج PWM مختلف به پین خروجی تایمر ارسال می کنیم که باعث می شود بلندگو دو صدای مختلف (مانند صدای اژیر) تولید کند. از اونجایی که از تایمر 2 میکرو استفاده کرده ایم پس پایه خروجی ما پین 21 میکرو (پایه خروجی تایمر2) می باشد.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید.
برنامه کدویژن :
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است و تنظیمات تایمر در کدویزارد, برای این پروژه به صورت زیر است:
در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
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 |
////////// WWW.EMIC.IR ////////// #include <mega16.h> #include <delay.h> void main(void) { DDRD=(1<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); /*از خط 11 تا 22 رجيسترهاي مربوط به فعالسازي تايمر2 که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند*/ // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 125/000 kHz // Mode: Phase correct PWM top=0xFF // OC2 output: Non-Inverted PWM // Timer Period: 4/08 ms ASSR=0<<AS2; TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (1<<CS21) | (0<<CS20); TCNT2=0x00; OCR2=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); while (1) { /*از تايمر, مي توان صداي اژير را به دلخواه تنظيم کرد OCR2 با دادن مقادير مختلف به رجيستر*/ OCR2=80; delay_ms(500); OCR2=200; delay_ms(500); } } |
با تغییر مقدار رجیستر OCR2, می توانید صدای اژیر را بصورت دلخواه تنظیم کنید. در بالا گفته شد که برای تولید صدای اژیر ما دو موج PWM مختلف به بلندگو اعمال می کنیم که همانطور که در برنامه مشاهده می کنید رجیستر OCR2 را در مدت 1 ثانیه دو بار مقدار دهی می کنیم تا دو صدای مختلف از بلندگو شنیده شود. شما علاوه بر تغییر مقادیر رجیستر OCR2 می توانید این رجیستر را به دلخواه بیش از دو بار مقدار دهی کنید تا به صدای مورد نظر خود دست یابید, این پروژه جنبه اموزشی دارد و همانطور که گفته شد بسیار ساده می باشد شما با توجه به هدف خود می توانید تغییرات مورد نظر را در برنامه اعمال کنید.
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
پروژه های مشابه:
نظر یادتون نره …
سلام
دستور زیر را توضیح دهید؟ عدد 80 مفهومش چیست؟
OCR2=80;
سلام, رجیستر OCR2 می تواند بین 0 تا 255 مقدار دهی شود که با مقدار دهی مختلف به ان می توان صدای اژیر را تغییر داد
سلام
اکر بخوایم که صدای پخش شده از بلندگو با کیفیت باشه(برای این کاربرد آژیر منظورم نیست) فرقی نمیکنه چه نوع ترانزیستوری استفاده بشه؟
سلام, فرکانس ترانزیستور BC547 اگر اشتباه نکنم 300 مگاهرتز است پس این ترانزیستور برای تولید صدای باکیفیت مشکلی ندارد