در این پست از سایت اِمیک, پروژه شمارنده 4 رقمی با استفاده از سون سگمنت 4 تایی قرار داده شده است. این پروژه با استفاده از میکروکنترلر AVR انجام شده است.
قبلا پروژه “راه اندازی سون سگمنت 4 تایی” را در سایت قرار داده بودم و در ان پست به طور کامل با سون سگمنت 4 تایی اشنا شدیم. بنابراین در این پست من در مورد این سون سگمنت و ترتیب پایه های ان و… توضیحی نمیدهم و برای اشنایی با سون سگمنت 4 تایی می توانید پست معرفی شده را مطالعه کنید.
در زیر شماتیک پروژه شمارنده 4 رقمی با استفاده از سون سگمنت 4 تایی را مشاهده می کنید. در این پروژه از میکروکنترلر ATmega16 استفاده شده است.

همانطور که در شماتیک بالا مشاهده می کنید, قطعات استفاده شده در این پروژه شامل میکروکنترلر ATmega16A, سون سگمنت 4 تایی اند مشترک و 8 عدد مقاومت 330 اهم می باشد.
پایه های A تا G سون سگمنت (همچنین پایه DP) توسط مقاومتهای 330 اهم به پایه های 22 تا 29 میکروکنترلر متصل شده اند. پایه های D1 تا D4 سون سگمنت نیز به پایه های 14 تا 17 میکروکنترلر متصل شده اند.
دلیل استفاده از مقاومت این است که ولتاژ تغذیه سون سگمنت حدود 3.5 ولت است. بنابراین ما نباید بطور مستقیم سون سگمنت را به میکروکنترلر که دارای ولتاژ خروجی 5 ولت است متصل کنیم. به همین منظور پایه های A تا G (همچنین پایه DP) توسط مقاومت های 330 اهم به میکروکنترلر متصل شده اند.
این پروژه یک شمارنده افزایشی می باشد. یعنی با اتصال تغذیه به پروژه, شمارش روی سون سگمنت از 0 شروع می شود و افزایش پیدا می کند تا زمانی که به عدد 9999 برسد. پس از رسیدن به عدد 9999 , عدد روی سون سگمنت 0 می شود و شمارش دوباره از 0 شروع می شود و این روند ادامه دارد.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 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 33 34 35 36 37 38 39 40 41 42 |
////////// WWW.EMIC.IR ////////// #include <mega16.h> //معرفي کتابخانه ميکروکنترلر مگا 16// #include <delay.h> //delay معرفي کتابخانه// void main(void) { unsigned char seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //معرفي يک ارايه داراي 10 عضو که شامل معادل هگز اعداد 0 تا 9 براي سون سگمنت اند مشترک مي باشد// int i=0,ones,tens,hundreds,thousands; //در روبرو تعدادي متغير براي استفاده در برنامه تعريف شده است// //ميکروکنترلر را براي اتصال به سون سگمنت خروجي مي کنند C دستورات زير پورت// DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); //ميکروکنترلر را براي اتصال به سون سگمنت خروجي مي کنند D دستورات زير پورت// DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); while (1) { thousands=i/1000; //مي ريزد thousands بر 1000 را محاسبه کرده و درون متغير i دستور روبرو خارج قسمت حاصل تقسيم عدد// hundreds=(i%1000)/100; //مي ريزد hundreds بر 1000 را محاسبه کرده و بر 100 تقسيم مي کند و حاصل را درون متغير i دستور روبرو باقيمانده حاصل تقسيم عدد// tens=(i%100)/10; //مي ريزد tens بر 100 را محاسبه کرده و بر 10 تقسيم مي کند و حاصل را درون متغير i دستور روبرو باقيمانده حاصل تقسيم عدد// ones=i%10; //مي ريزد ones بر 10 را محاسبه کرده و درون متغير i دستور روبرو باقيمانده حاصل تقسيم عدد// PORTD=0b00001000; //فعال کردن سون سگمنت اول// PORTC=seg[ones]; //روي سون سگمنت i نوشتن يکان عدد// delay_ms(5); //ايجاد 5 ميلي ثانيه تاخير// PORTD=0b00000100; //فعال کردن سون سگمنت دوم// PORTC=seg[tens]; //روي سون سگمنت i نوشتن دهگان عدد// delay_ms(5); //ايجاد 5 ميلي ثانيه تاخير// PORTD=0b00000010; //فعال کردن سون سگمنت سوم/ PORTC=seg[hundreds]; //روي سون سگمنت i نوشتن صدگان عدد// delay_ms(5); //ايجاد 5 ميلي ثانيه تاخير// PORTD=0b00000001; //فعال کردن سون سگمنت چهارم// PORTC=seg[thousands]; //روي سون سگمنت i نوشتن هزارگان عدد// delay_ms(5); //ايجاد 5 ميلي ثانيه تاخير// i++; //يکي اضافه مي شود i با هر بار اجراي برنامه متغير// if(i>9999) i=0; //صفر مي شود i از عدد 9999 بيشتر شد متغير i در صورتي که متغير// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. دقت کنید که برنامه بالا برای سون سگمنت اند مشترک می باشد. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…





عالی و مفید
چه در شبیه سازی و چه در عمل بدون مشکل کار میکنه.