آی پی امداد
abtahi

مدارهای ساده با اتمل استادیو

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
74
93
سلام
در این تایپیک قصد دارم مدارات ساده را با اتمل استادیو را ارسال کنم این پست ها بیشتر جنبه آموزشی داره و در حد توان خودم دوست دارم اطلاعاتی ناچیزم رو به اشتراک بگذارم و اگه دوستان لطف کنند تجربیات خودم رو هم افزایش بدم
اولین مدار نمایش اعداد روی seven segment
بعد از باز کردن اتمل استادیو جهت ایجاد پروژه جدید گزینه new project را انتخاب می‌کنیم:
در صفحه دوم گزینه GCC C Executable project را انتخاب کرده و در کادر پایین نام دلخواه خود را می نویسیم
در صفحه سوم میکرو مورد نظر را انتخاب میکنیم ما در این مدار از اتمگا 8 استفاده کردیم شپس محیط برنامه نویسی باز شده که برنامه را در ان تایپ میکنیم

/*
* 7segment.c
*
* Created: 02/17/2025 03:00:15 ب.ظ
* Author : brv
*/



#include <avr/io.h>
#include <util/delay.h> // کتابخانه تاخیر زمانی
#define F_CPU 8000000UL // تنظیم کریستال
#define SegOne 0xFE//پین شماره 1 صفر شود
#define SegTwo 0xFD//پین شماره 2 صفر شود
#define SegThree 0xFB//پین شماره 3 صفر شود
#define SegFour 0xF7//پین شماره 4 صفر شود



int main() {
char seg_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//کد نمایش عددها در نمایشگر 7 قطعه
int num,i,num1;

/* تنظیم پورت خروجی */
DDRB = 0x0F; // پین 0تا 3
DDRD = 0xff; // کنترل 7 قطعه ای

while (1)
{
for (num = 0x00; num <= 9999; num++) // نمایش 0 تا 9999
{if (num==9999){num=0;}
for (i = 0; i < 100; i++)// نمایش هر عدد به مدت 400 میلی ثانیه 100 ضرب در4
{
num1 = num/1000;// نمایش هزارگان


PORTB = SegOne;
PORTD = seg_code[num1];
_delay_ms(1);// تاخیر یک میلی ثانیه

num1=(num%1000) ;
num1=num1/100;//نمایش صدگان
PORTB = SegTwo;
PORTD = seg_code[num1];
_delay_ms(1);// تاخیر یک میلی ثانیه

num1 =(num%100);// نمایش دهگان
num1=num1/10;
PORTB = SegThree;
PORTD = seg_code[num1];
_delay_ms(1);// تاخیر یک میلی ثانیه

num1= num%10;// نمایش یکان
PORTB = SegFour;
PORTD = seg_code[num1];
_delay_ms(1);// تاخیر یک میلی ثانیه

}
}
}
}
 

پیوست‌ها

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
74
93
1 برای تنظیم پایه های میکرو به عنوان خروی یا ورودی از دستور DDR +پورت مورد نظر استفاده میکنیم
مثال DDRB=0xFF; تمام پایه های پورت B به عنوان خروجی تعریف شده است
یا به صورت باینری به صورت DDRB= 0b0011011; پایه های 0 و 1 و 3و 4 خروجی و بقیه ورودی تعریف شده است
برای صفر و یک کردن پایه ها از دستور port استفاده میشود مثل
PORTB=0b00001011; یا PORTB=0x0B;

برای الحاق کتابخانه از فرمان #include استفاده می شود مانند
#include <util/delay.h>

برای تعریف ثوابت از دستور define# به صورت زیر عمل می شود :

#define SegOne 0xFE مانند #define مقدار نام ثابت
 

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
74
93
seven segment چیست
نمایشگر سون سگمنت، از هفت LED تشکیل شده هر یک از این LEDها یک قسمت یا سگمنت نامیده می‌شوند، زیرا وقتی هر یک از آن‌ها روشن می‌شود، بخشی از یک عدد یا حرف را روشن می‌کند. گاهی اوقات یک LED هشتم نیز در سون سگمنت وجود دارد که نقطه دسیمال (DP) را مشخص می‌کند. واضح است که این نقطه وقتی کاربرد دارد که دو سون سگمنت در کنار یکدیگر قرار گیرند.همان‌طور که در شکل زیر مشاهده می‌کنید اگر هرکدام از این هفت قسمت را با حروف a b c d e f g در جهت عقربه‌های ساعت نام‌گذاری کنیم، آنگاه مثلاً برای نمایش عدد"۱" کافیست که فقط حرفهای b وc روشن بشوند: سون سگمنت ها به دو صورت اند مشترک و کاتد مشترک ساخته میشوند
articles-segment1.gif
articles-segment2.gif

کدنمایش اعداد در نمایشگر اند مشترک
Numberg f e d c b aHex code
01000000C0
11111001F9
20100100A4
30110000B0
4001100199
5001001092
6000001082
71111000F8
8000000080
9001000090
 

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
74
93
کد نمایش اعداد در نمایشگر کاتد مشرک
Numberg f e d c b aHex Code
001111113F
1000011006
210110115B
310011114F
4110011066
511011016D
611111017D
7000011107
811111117F
910011114F

برای راحتی کار ما اعداد را در یک آرایه تعریف می کنیم و بعد در هرکجای برنامه بخواهیم از آن استفاده می کنیم
کد برای نمایشگر کاتد مشترک char cathode_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
کد برای نمایشگر اند مشترک
char seg_code[]={0xFA,0x82,0xD9,0xCB,0xA3,0x6B,0x7B,0xC2,0xFB,0xEB};
برای نمایش عدد 7 کد زیر را می نویسیم
PORTD = seg_code[7];
 

mohammadmoha

کاربران vip(افتخاری)
کاربر
2011-02-19
74
93
در صورتی که بخواهیم عدد چند رقمی نمایش دهیم، می توانیم چند نمایشگر هفت قسمتی تکی را در کنار هم بچینیم. ولی با توجه به این که هر کدام از آنها دارای تعدادی پایه هستند، حجم سیم کشی مدار زیاد می شود. فرض کنید بخواهیم به جای استفاده از سون سگمنت 4 تایی از چهار تا تکی استفاده کنیم. در این صورت فقط برای پایه های a تا g، در مجموع تعداد 28 پین وجود خواهد داشت. پس استفاده از انواع چند رقمی که به آنها سون سگمنت مالتی پلکس نیز می گویند، بهتر است. در این روش از خطای دید استفاده میشود در این نوع پایه های a تا g ارقام به صورت داخلی به همنام خود متصل اند. پایه های مشترک هر رقم نیز به صورت جداگانه بیرون کشیده شده است. بنابراین برای راه اندازی، باید در یک لحظه یک رقم فعال و عدد آن رقم برای مدتی نمایش داده شود. در لحظۀ بعد، باید رقم بعدی فعال و عدد مربوط به آن نمایش داده شود. یعنی در هر لحظه تنها یک رقم فعال می شود و عدد مربوط به آن نمایش داده می شود. در این لحظه باید رقم های دیگر خاموش باشند.در این صورت چشم قادر به تشخیص روشن و خاموش شدن نمایشگر نخواهد شد و عدد را به صورت پیوسته مشاهده خواهد کرد
4digit7segment-display-1-300x137.jpg
4-digit-7-segment-LED-display-pinout.png
4digit7segment-768x185.jpg
 
بالا