آموزش راه اندازی نمایشگر سون سگمنت (هفت بخشی) توسط میکروکنترلر AVR با کامپایلر اتمل استودیو:
در این مقاله، نحوه راه اندازی نمایشگر سون سگمنت (Seven Segments) یا نمایشگر هفت بخشی توسط میکروکنترلر AVR را آموزش می دهیم.
در شکل فوق یک نمایشگر سون سگمنت دارای 4 رقم (ِِDigit دیجیت) را مشاهده می کنید. هر رقم از این نمایشگر، شامل 8 عدد دیود نورانی (LED) می باشد که هر کدام یک بخش از عدد را تشکیل می دهد.
با اعمال ولتاژ مناسب به هر کدام از این LED ها آن بخش نورانی می شود.
نمایشگر سون سگمنت به طور کلی دارای دو مدل کاتد مشترک و یا آند مشترک می باشد. در سون سگمنت های کاتد مشترک ، کاتد تمام ال ای دی ها به یکدیگر متصل می باشد. به این پایه در سون سگمنت پایه مشترک یا Common اطلاق می شود. در سون سگمنت های آند مشترک ، آند تمام ال ای دی ها به یکدیگر متصل می باشد.
نحوه راه اندازی نمایشگر سون سگمنت:
برای روشن نمودن یک رقم در سون سگمنت های کاتد مشترک، ابتدا باید به پایه مشترک آن زمین یا صفر منطقی اعمال کنیم. سپس برای روشن نمودن هر کدام از بخش های سون سگمن باید به آن پین ولتاژ مثبت میکروکنترلر را اعمال کنیم. برای محدود کردن جریان هر کدام از ال ای دی های سون سگمنت باید با آن یک مقاومت 330 اهم سری کنیم.
برای روشن نمودن یک رقم در سون سگمنت های آند مشترک، ابتدا باید به پایه مشترک آن 5 ولت یا یک منطقی اعمال کنیم. سپس برای روشن نمودن هر کدام از بخش های سون سگمن باید به آن پین زمین یا صفر منطقی میکروکنترلر را اعمال کنیم. برای محدود کردن جریان هر کدام از ال ای دی های سون سگمنت باید با آن یک مقاومت 330 اهم سری کنیم.
شکل زیر شماتیک یک سون سگمنت سه رقمی و شکل قرار گرفتن ال ای دی های آن را نشان می دهد. همچنین ابعاد و اندازه و سایز یک سون سگمنت سه رقمی نشان داده شده است.
نمایشگر های سون سگمنت، انواع مختلفی دارند. مدل های یک رقمی تا 8 رقمی در بازار و در شکل های مختلف موجود می باشد. همچنین این نوع نمایشگر ها در انواع رنگ قرمز، سبز، زرد و آبی وجود دارند.
پین های یک نمایشگر سون سگمنت:
شکل زیر پین های یک نمایشگر سون سگمنت 4 رقمی نمایش می دهد.
در این آموزش نحوه استفاده از کتابخانه سون سگمنت 4 رقمی با کامپایلر اتمل استودیو را، توضیح خواهیم داد.
در شکل زیر شماتیک یا فایل شبیه سازی راه اندازی نمایشگر سون سگمنت (7 Segments) با میکروکنترلر Atmega16 را مشاهده می کنید. نمایشگر سون سگمنت در عمل دارای 4 پین کنترلی به نام Enable1 تا Enable4 می باشد.
برای اینکه بتوانیم روی هر رقم (دیجیت) از این نمایشگر 4 بخشی یک عدد نمایش دهیم، باید ابتدا پین فعال سازی آن رقم را فعال کنیم. و پین وضعیت مابقی رقم ها را غیر فعال کنیم. پین های فعال سازی (Enable) برای این امر در نمایشگر قرار داده شده است. در عمل برای کنترل پین Enable از یک ترانزیستور استفاده می کنیم.
شماتیک مدار راه اندازی نمایشگر سون سگمنت:
در شکل زیر، شماتیک عملی استفاده از یک نمایشگر توسط میکروکنترلر را مشاهده می کنید. در نقشه شماتیک زیر برای اینکه LED مربوط به یک بخش از یک رقم را بخواهیم فعال کنیم باید به پین متناظر آن، یک منطقی و یا ولتاژ 5 ولت اعمال کنیم. همچنین برای انتخاب رقم مورد نظر باید به پین Enable متناظر با آن رقم یک منطقی و با ولتاژ 5 ولت اعمال کنیم.
درایور نوشته شده برای راه اندازی نمایشگر سون سگمنت، در کامپایلر اتمل استودیو هر دو نوع سون سگمنت کاتد مشترک و یا آند مشترک را شامل می شود. برای تنظیم نمودن اینکه از کدام مدل نمایشگر سون سگمنت می خواهیم استفاده کنیم (کاتد مشترک یا آند مشترک)، در کتابخانه ssegments.h و در قسمت زیر می توان براحتی این تنظیم را انجام داد.
1 2 3 |
//#define COMMON_ANODE_SS #define COMMON_CATHODE_SS |
در این برنامه مدل نمایشگر کاتد مشترک فعال (COMMON_CATHODE_SS) و نمایشگر آند مشترک غیر فعال (COMMON_ANODE_SS) یا کامنت (Comment) شده است. این بدلیل استفاده از نمایشگر سون سگمنت کاتد مشترک می باشد. در صورت استفاده از نمایشگر سون سگمنت آند مشترک برنامه را به صورت زیر اصلاح می کنیم.
1 2 3 |
#define COMMON_ANODE_SS //#define COMMON_CATHODE_SS |
در صورت استفاده از سون سگمنت آند مشترک باید سخت افزار مورد نیاز آن را نیز، تغئیر دهیم. بر فرض مثال بجای استفاده از ترانزیستور NPN باید از ترانزیستور PNP به عنوان کنترل پین های Enable استفاده شود.
برای یادگیری ساخت منابع تغذیه بدون ترانس این مقاله را مطالعه کنید.
در این برنامه روتین در حلقه اصلی برنامه (main.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 |
//---------------------------------------- // Main Initialization //---------------------------------------- // Initialize Hardwares hardwares_Init(); //در این قسمت سخت افزار های داخلی میکروکنترلر تماما غیر فعال می گردند. // Initialize IO io_Init(); //در این قسمت ورودی-خروجی های میکروکنترلر تنظیم اولیه می شوند. // Initialize seven segments ssegments_Init(); // در این قسمت ورودی-خروجی های میکروکنترلر برای راه اندازی سون سگمنت تنظیم اولیه می شوند. // Blink heart beat to indicate alive HB_LED_On(); //در این قسمت دیود نورانی متصل شده به میکروکنترلر یک چشمک یا بلینک می کند _delay_ms(50); HB_LED_Off(); _delay_ms(50); //---------------------------------------- |
در زیر برنامه نوشته شده در حلقه بی نهایت (Loop اصلی) برنامه راه اندازی نمایشگر 7 Segments توضیح داده شده است.
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 |
//------------------------------------------ // Show loop counter in seven segments itoa(loopCntr , tempStr , 10); //در این قسمت متغیر شمارنده حلقه اصلی تبدیل به یک رشته کارکتری می شود. //ssegments_PutC('a',0); //در این قسمت کارکتر روی نمایشگر نشان داده می شود. ssegments_PutS(tempStr,10); //در این قسمت رشته کارکتری معادل شمارنده حلقه برای نمایش روی سون سگمنت 4 رقمی نمایش داده می شود. //------------------------------------------ if (loopCntr > 9999) //شمارنده شروع به افزایش می کند و در صورت بزگتر شدن از عدد 9999 برابر 0 می شود. { loopCntr = 0; } else { loopCntr++; } //------------------------------------------ //------------------------------------------ // Blink heart beat to indicate alive HB_LED_Tgl(); _delay_ms(20); //------------------------------------------ |
برای استفاده از کتابخانه ssegments.h اتمل استودیو در پروژه خود ابتدا آن را باز کنید و تنظیمات ورودی-خروجی های مورد نیاز را طبق پروژه خود تنظیم کنید.
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 |
//------------------------------------------------------------------------------------- // 7segments Enable 1 definition #define EN1_DDR DDRC // تنظیم جهت (دایرکشن) ورودی-خروجی فعال سازی رقم 1 سون سگمنت #define EN1_PORT PORTC // تنظیم پورت فعال سازی رقم 1 سون سگمنت #define EN1_BIT PC1 // تنظیم پین فعال سازی رقم 1 سون سگمنت #define EN1_INIT() sbi(EN1_DDR , EN1_BIT) #ifdef COMMON_CATHODE_SS #define EN1_HIGH() sbi(EN1_PORT , EN1_BIT) #define EN1_LOW() cbi(EN1_PORT , EN1_BIT) #else #define EN1_HIGH() cbi(EN1_PORT , EN1_BIT) #define EN1_LOW() sbi(EN1_PORT , EN1_BIT) #endif //------------------------------------------------------------------------------------- // 7segments Enable 2 definition #define EN1_DDR DDRC // تنظیم جهت (دایرکشن) ورودی-خروجی فعال سازی رقم 2 سون سگمنت #define EN1_PORT PORTC // تنظیم پورت فعال سازی رقم 2 سون سگمنت #define EN1_BIT PC0 // تنظیم پین فعال سازی رقم 2 سون سگمنت #define EN2_INIT() sbi(EN2_DDR , EN2_BIT) #ifdef COMMON_CATHODE_SS #define EN2_HIGH() sbi(EN2_PORT , EN2_BIT) #define EN2_LOW() cbi(EN2_PORT , EN2_BIT) #else #define EN2_HIGH() cbi(EN2_PORT , EN2_BIT) #define EN2_LOW() sbi(EN2_PORT , EN2_BIT) #endif //------------------------------------------------------------------------------------- |
به همین ترتیب برای تمامی ورودی-خروجی ها تنظیمات مربوطه را انجام دهید.
نکته بسیار مهم:
همانطور که می دانید سرعت شبیه سازی یک مدار در نرم افزار شبیه سازی Proteus با سرعت انجام آن در عمل بسیار متفاوت می باشد. به همین دلیل در کتابخانه ssegments.c یک خط تعریف (define) استفاده شده تا در صورت نیاز بتوان عملکرد مدار و سورس کد را در شبیه سازی نرم افزار Proteus مشاهده نمود. برای استفاده عملی از این کد حتما باید این خط از برنامه Comment شود.
1 |
#define SIMULATION_MODE |
برای دانلود فایل سورس کد راه اندازی نمایشگر سون سگمنت چهار رقمی توسط میکروکنترلر AVR و کامپایلر اتمل استودیو روی باکس زیر کلیک کنید.
ممنون و تشکر و قدردانی از زحمت شما
ممنون از انرژی مثبت شما دوست عزیز