آموزش AVR (آموزش های آقای مهدی مهدوی)

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21044 بار
تماس:

Re: آموزش AVR

پست توسط sinaset » سه شنبه 1 مرداد 1392, 10:41 pm

سلام خدمت اقا مهدی عزیز.

خسته نباشید ، :razz:

اقا مهدی یک سوال ، به نظر شما بهتر نیست بجایی ساخت پروگرامر iSP ، مدل usb اون رو بسازیم ؟ (با توجه به اینکه پورت پرینتر دیگه قدیمی شده و مادربردهای جدید کمتر این پورت رو پشتیبانی می کنند و..)
باتشکر. :razz:
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » چهار شنبه 2 مرداد 1392, 4:06 am

sinaset, عزیز سلام. :razz:
فکر خوبیه ولی به دو علت اول خواستم پروگرامر isp رو طریقه ساختش رو قرار بدم. هم اینکه جنبه آموزشی بیشتری داره و هم ارزان تر ساخته میشه. و میشه اون رو بدون برد مسی PCB ساخت ولی پروگرامر USB به علت اینکه پیچیده تره نیاز به بورد داره.
خودم چون این پروگرامر رو خریداری کردم نمیتونم بسازم ولی نقشه و وسایل لازم رو در دو سه پست آینده قرار میدم.
" یه نقشه به همراه فایل درایور و ... دیدم که به نظر پروگرامر جالبی میومد.

با تشکر از پیشنهاد خوبتون. :razz:
ناگهان چقدر زود دیر میشود !

Captain
Captain
پست: 2755
تاریخ عضویت: چهار شنبه 18 بهمن 1385, 12:46 pm
محل اقامت: شیراز
سپاس‌های ارسالی: 22364 بار
سپاس‌های دریافتی: 5555 بار

Re: آموزش AVR

پست توسط Present » دو شنبه 7 مرداد 1392, 8:45 pm

Mahdi Mahdavi, سلام خسته نباشی
می دونم که وقتی ادم سرش شلوغه سخته که مطلب آموزشی بذاره ولی ما هنوز منتظر ادامه مطلب هستیم فعلا تا چراغ چشمک زن با موفقیت پیش رفتیم تا بقیه ببینیم چی می شه ، از اونجایی که اکثرا رشته کامپیوتری ها دنبال این موضوع هستند و شما هم که حرف نداری ادامه این مطلب در همچنین انجمنی واقعا خوبه
با تشکر منتظر ادامه هستیم

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » سه شنبه 8 مرداد 1392, 11:09 pm

Present, عزیز سلام. نظر لطفتونه .ممنون.
تاخیر به خاطر اینه که دنبال یه نرم افزار خوب هستم برا طراحی شماتیک و ... .
برای شماتیک قبلی با Eagle کار کردم . نرم افزار جالبی نیست به نظرم. رابط کاربری خیلی بدی داره .برای شماتیک قبلی دو ساعت زمان برد.
نرم افزار جدیدی تهیه کردم. Altium Designer که اون هم به نظر برای FPGA کاربرد داره. البته دارم روش کار میکنم. هنوز زیاد باهاش کار نکردم.
رو این حساب این پست رو بدون شماتیک قرار میدم. انشاالله اگر تونستم شماتیک رو در پست بعد قرار میدم.
از هر گونه پیشنهاد نرم افزار برای شماتیک در تاپیک سوالات و اشکالات AVR یا بصورت پیغام خصوصی استقبال خواهد شد. تصویر

خب. میریم سر ادامه کار.
پروژه یک LED پروژه بسیار ساده ای بود. حالا کمی گسترش میدیم پروژه رو . 8 LED داریم و یک بازر . LED ها به پورت A و بازر به یک پین از پورت D متصل میشه " پورت ها مثال هستند و شما میتونید به هر پورتی که میخواهید متصل کنید. ولی در متن برنامه هم کمی باید تغییر بدید"
حالا اگر LED ها رو از 1 تا 8 نامگذاری کنیم پروژه به این صورت میشه که ال ای دی ها به ترتیب زیر روشن میشه و بازر عمل میکنه
1 و 8 - 2 و 7 - 3 و 6 - 4 و 5
BUZZER
4 و 5 - 6 و 3 - 7 و 2 - 8 و 1
یا به این صورت
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
متن برنامه بسیار راحته. برای صدا کردن بازر هم کافیه پایه ای که بازر بهش متصله رو یک کنیم.
یک راهش اینه که پورت ها رو یکی یکی خاموش و روشن کنیم

کد: انتخاب همه

PORTA.1=1;
PORTA.8=1;
delay_ms(500);
PORTA.1=0;
PORTA.8=0;
PORTA.2=1;
PORTA.7=1;
delay_ms(500);
PORTA.7=0;
PORTA.2=0;
PORTA.6=1;
PORTA.3=1;
و الی آخر

ولی نوشتن همین متن بالا با استفاده از سیستم دو دویی خیلی راحت تره. میشه:

کد: انتخاب همه

1  2  4  8  16  32  64  128
PORTA=129;
delay_ms(500);
PORTA=66;
delay_ms(500);
PORTA=36

چون در روش قبلی برای روشن کردن هر سری دو تایی LED نیازه که اون دوتایی که در استپ قبلی روشن کردیم خاموش کنیم.ولی در این روش نیازی به این کار نیست.
پس از اینکه ال ای دی های 4 و 5 رو هم روشن کردیم باید همزمان بازر رو هم روشن کنیم.
یعنی بخشی از برنامه یه این صورت میشه "فرض بر اینه که بازر به پایه هشتم از پورت D متصله

کد: انتخاب همه

.
.
.
delay_ms(500);
PORTA=24;
PORTD=128;  //yek kardane paye 8 PORT D
delay_ms(500);
PORTD=0;  //sefr kardane paye 8 PORT D baraye khamoosh khrdane Buzzer
PORTA=36;

در تکه برنامه بالا همزمان با یک کردن پایه های 4 و 5 پورت A یعنی همون LED های 4و5 پایه هشتم پورت D رو یک میکنیم "در سیستم دو دویی مقدار معادل بیت هشتم 128 هست" و پس از تاخیر دوباره پورت متصل به بازر رو صفر میکنیم.

میشه با ترتیب های مختلف صفر و یک کردن پورت ها رقص نورهای مختلفی ایجاد کرد.
فایل های پروژه در پست بعدی قرار میگیره.
در پست بعدی با 7segment ها کار میکنیم.

کد: انتخاب همه

فایل های پروژه قبلی :  فایل هگز برای فلش کردن . فایل متنی و شماتیک 

http://upload.tehran98.com/upme/do.php?filename=a934e2c08a0eb4a81.rar

ناگهان چقدر زود دیر میشود !

New Member
نمایه کاربر
پست: 17
تاریخ عضویت: یک شنبه 8 آذر 1388, 1:20 pm
سپاس‌های ارسالی: 8 بار
سپاس‌های دریافتی: 27 بار

Re: آموزش AVR

پست توسط electro_officer » چهار شنبه 9 مرداد 1392, 11:27 pm

سلام
آقا پروگرامر رو که نمیسازن باید بری بازار بخریش! :grin: من حدودا دو سه ساله پروگرامر stk500 شرکت نوآوران رو خریدم هیچ مشکلی تا حالا نداشتم. دوستانی که میخوان AVR کار کنند بهتره حتما نرم افزار ساده و قدرتمند پروتئوس رو یاد بگیرند. با این نرم افزار میشه پروژه رو قبل از ساخت شبیه‌سازی کرد خیلی نرم‌افزار مهمی هست.
راستی اگر مشکلی بود و کمک خواستید میتونید رو من حساب کنید. :m:a
در نمی گنجد به جو عمان من / بحرها باید پی طوفان من

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » پنج شنبه 10 مرداد 1392, 12:15 am

electro_officer نوشته شده:سلام
آقا پروگرامر رو که نمیسازن باید بری بازار بخریش! :grin: من حدودا دو سه ساله پروگرامر stk500 شرکت نوآوران رو خریدم هیچ مشکلی تا حالا نداشتم. دوستانی که میخوان AVR کار کنند بهتره حتما نرم افزار ساده و قدرتمند پروتئوس رو یاد بگیرند. با این نرم افزار میشه پروژه رو قبل از ساخت شبیه‌سازی کرد خیلی نرم‌افزار مهمی هست.
راستی اگر مشکلی بود و کمک خواستید میتونید رو من حساب کنید. :m:a



دوست عزیز سلام. تصویر

خیر. پروگرامر رو میشه ساخت. به دو علت این کار رو در این پست مطرح میکنیم.
1- بار آموزشی داره. یعنی این کار بهانه ای میشه برای آشنایی بیشتر با پورت ها و ...

2- ساختن پروگرامر مثلا USB حداکثر 15.000 تومان در میاد . "البته کمتر از ایناس" و همون پروگرامری که با این هزینه میسازیم برای تهیه آماده اش باید 30.000 تومان پرداخت کنیم.

هر چند به دوستان پیشنهاد کردیم که خرید اون بی دردسر تره ولی باز هم آموزشش ضرری نداره .
از هر گونه کمک و همکاری استقبال خواهد شد ! تصویر با تشکر از شما
ناگهان چقدر زود دیر میشود !

New Member
نمایه کاربر
پست: 17
تاریخ عضویت: یک شنبه 8 آذر 1388, 1:20 pm
سپاس‌های ارسالی: 8 بار
سپاس‌های دریافتی: 27 بار

Re: آموزش AVR

پست توسط electro_officer » پنج شنبه 10 مرداد 1392, 5:13 am

آره ساختنش تجربه‌ی خوبی هست و بسیار مفید. اگر حوصلش رو دارید حتما اینکارو بکنید منتهی مدل USB به نظرم بسیار مناسب‌تر هست. البته ساختش ریسک هم داره اگر جواب نده پولتون بر باده! ::ns
ولی اگر بخواید حرفه‌ای کار کنید و واقعا برا شغل وارد این عالم بشید یه سری پروگرامرهای یونیورسال هست که خیلی محشرند از اونا بخرید عالیه البته اینم بگم قیمتشون هم محشره ها. :eek:
در نمی گنجد به جو عمان من / بحرها باید پی طوفان من

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21044 بار
تماس:

Re: آموزش AVR

پست توسط sinaset » شنبه 12 مرداد 1392, 11:26 am

electro_officer نوشته شده:البته ساختش ریسک هم داره اگر جواب نده پولتون بر باده! ::ns
:eek:


سلام بر شما .

من برعکس شما فکر می کنم ،یک تجربه و علم جدید. انرژی که الکی تلف بشه ، بر باده .

کار اقا مهدی و توسعه علم این چنینی در نوع خودش بسیار کار بزرگیه.خدا بیامرز پدر و مادرش (در صورت حیاط ، طول عمر پربرکت هم برای خودش هم برای پدر و مادر بزرگ وارش )

باتشکر.تصویر
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
نمایه کاربر
پست: 17
تاریخ عضویت: یک شنبه 8 آذر 1388, 1:20 pm
سپاس‌های ارسالی: 8 بار
سپاس‌های دریافتی: 27 بار

Re: آموزش AVR

پست توسط electro_officer » شنبه 12 مرداد 1392, 3:16 pm

بعله ایشون که کارشون بیسته. خدا خیرشون بده ایشالا این تاپیک باقیات الصالحات بشه براشون. اجازه بدید بنابر تجربه‌ی شخصیم دو تا کتاب خوب معرفی کنم:
برا برنامه نویسی سی این کتاب عالیست! بهترینه در واقع: تصویر 
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

برا خود AVR این کتاب رو پیشنهاد میکنم: تصویر 
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

برا کشیدن شماتیک و شبیه سازی برنامه‌ها نرم‌افزار قدرتمند Proteus رو پیشنهاد میکنم: تصویر 
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

یه روزه میتونید یادش بگیرید. سراغ هیچ برنامه‌ي دیگه‌ای نمیخواد برید این برنامه مهم ترین نقطه قوتش شبیه سازی میکرو هست بچه‌ها. کتاب نمیخواد براش بخرید فایل آموزشش تو نت فک و فراوونه. اینم فایل آموزشی فارسی:
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

یه برنامه مشابه برنامه‌ای که دوستمون ارائه کردند.
پورت سی رو همونطور که آقا مهدی فرمودند خروجی تعریف کنید. این کد رو امتحان کنید:

کد: انتخاب همه

while (1)
    {
      
    int b=1;
    int a=256;

       for(b=1; b<=8; b++){
        PORTC= a/=2;
        delay_ms(300);
       }
   
       for(b=1; b<=6; b++){
        PORTC= a*=2;
        delay_ms(300);
       }

    }


تو این برنامه ال ای دی های متصل به پورت سی به صورت پلکانی روشن میشن و خاموش. اینم شماتیک: تصویر 
در نمی گنجد به جو عمان من / بحرها باید پی طوفان من

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » شنبه 12 مرداد 1392, 4:37 pm

sinaset, ,   , عزیز ممنونم تصویر


سون سگمنت:
سون سگمنت ها یا 7-segment نوعی نمایشگر برای اعداد هست که در انواع مختلف در بازار پیدا میشه.تکی . دوتایی . وجه تسمیه این نامگذاری اینه که این نمایشگر برای نمایش اعداد از 7 عدد LED استفاده میکنه به علاوه یک LED به عنوان ممیز یا Dot point در مدل های متداول موجود در بازار.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

این قطعه در دو نوع عمده کاتد مشترک و آند مشترک پیدا میشه که نوع کاتد مشترک مورد نظر ماست.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
در تصویر بالا pinout یا اطلاعات پایه های این قطعه رو مشاهده میکنید.
LED ها از a تا g نامگذاری شده و پایه هار مربوط به اون هم مشخص شده.
برای نمایش یک کاراکتر خاص "اصولا اعداد و هگزا عدد "عدد در مبنای 16" باید تعدادی از این LED ها رو همزمان روشن کنیم. مثلا
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
این کار رو به راحتی میشه در میکرو کنترلر انجام داد منتها اول مراحلی داره.
میشه پایه های روشن رو به دو صورت دو دویی یا در مبنای دو "مانند قبل" یا در مبنای 16 به میکرو کنترلر بفهمونیم.
به چه صورت؟
ابتدا پایه های سون سگمنت رو به ترتیب a b c d به پایه های مثلا پورت A متصل میکنیم.
پایه a سون سگمنت به PA0 یا اولین پایه پورت A
پایه b سون سگمنت به PA1
و الی اخر تا پایه g به PA6 و دو پایه کاتد داریم. اتصال یک عدد از اون به زمین مدار کافیه و پایه dot point یا همون ممیز هم استفاده نمیشه
در بخش زیر برای نمونه نشون دادیم که برای نمایش دو عدد صفر و یک کدام پایه ها باید یک بشن

کد: انتخاب همه

128  64  32  16  8  4   2   1
g     f    e   d    c    b   a   dot"not in use"

0    1   1   1   1  1   1   for show "0" on 7-segment
برای نمایش عدد صفر در سون سگمنت به پایه های
a , b , c, d , e , f
نیاز داریم.
کد این پایه ها در مبنای 2 برابر 63 و در مبنای 16 یا هگز برابر
3F
میباشد.


0    1    1   0  0  0   0
برای نمایش عدد یک در سون سگمنت به پایه های
b , c
نیاز داریم.
کد این پایه ها در مبنای 2 برابر 6 , در مبنای 16 یا هگز برابر06
میباشد.

تبدیلات مبنا ها رو به راحتی در ماشین حساب مهندسی یا کامیپوتر میتونید انجام بدید.
حالا ما باید اول این پایه ها و مبنا ها رو مشخص کنیم و بعد اون رو در EEPROM میکرو فلش بزنیم .
میتونیم این کار رو هم نکنیم و در طول برنامه این مقادیر رو استفاده کنیم.
ولی در قطعه برنامه زیر میبینید که این کار با معرفی پایه ها به حافظه EEPROM چقدر راحت میشه.
همچنین این کار بهانه ای هست که با این حافظه بیشتر آشنا بشیم.
پایه های روشن در مبنای 16 برای نمایش هگزا عدد به این صورته

کد: انتخاب همه

a'adad:
0    1    2    3    4    5    6    7    8    9    a    b    c    d    e   f
HEX code:
3F   06   5B   4F   66   6D   7D   07   7F   6F   77   7C   39   5E   79  71

برای اینکه کامپایلر بفهمه که داریم اعداد رو در مبنای شانزده HEX معرفی میکنیم باید کاراکتر صفر ایکس رو اول اون بیاریم. برای مثال
to show "1" use 0x06
to show "8" use 0x7F
معرفی کد به حافظه میکرو:
حالا برای معرفی متغیر به حافظه EEPROM هم از دستور flash در کدویژن استفاده میکنم.
flash char digits[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
ما در این قطعه کد "16" کاراکتر رو به حافظه EEPROM معرفی کردیم. با قطع شدن جریان برق میکرو این کد های معرفی شده در حافظه پایدار میمونه .مثل حافظه فلش که برنامه رو داخلش فلش کردیم.
حالا برای فراخوانی هرکدام کافیه به روش زیر عمل کنیم.

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

کد: انتخاب همه

PORTA=digits[0];
delay_ms(500);
PORTA=digits[1];
delay_ms(500);

اعداد صفر و یک روی سون سگمنت به نمایش در میاد.
حالا برای راحتی کار از روشی که   , عزیز گفتند استفاده میکنیم. به قطعه کد زیر توجه کنید:

کد: انتخاب همه

flash char digits[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
int i=0;
void main(void)
{
DDRA=0xFF;  // define PORTA as output
while(1)
{
if(i<=15){
PORTA=digits[I];
i++;
}
else
i=0;
delay_ms(500);
}
}


در قطعه کد بالا مانند کاری که  , در قطعه کدشون انجام دادند به جای اینکه هر بار یک ثابت رو برای پورت تعیین کنیم یک متغیر تعیین کردیم و

مقدار اون متغیر رو تغییر دادیم.

قطعه کد بالا برابر با کد زیر هست:

کد: انتخاب همه

PORTA=0x3F;
delay_ms(500);
PORTA=0x06;
delay_ms(500);
PORTA=5B;
delay_ms(500);
PORTA=4F;
delay_ms(500);
.
.
.

تعداد خطوط این برنامه به این روش چهار برابر اینی هست که الان بالا نوشتم. پس میبینید که معرفی کردن کاراکتر به حافظه EEPROM خیلی راحته و برنامه نویسی رو راحت میکنه

[/I]نکته:
میشه پایه ها رو به ترتیب 1 2 3 ... یا هر ترتیب دیگه هم به میکرو کنترلر متصل کرد. در این صورت کد های مورد نیاز برای فلش در EEPROM متفاوت از اینی هست که اینجاست.

انشاالله در پروژه بعدی یکی از دو مورد زیر رو پی میگیریم:
استپ موتور
دماستج با حسگر lm35 و نمایش دما روی LCD 2*16
ناگهان چقدر زود دیر میشود !

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » پنج شنبه 17 مرداد 1392, 8:10 pm

سلام دوستان.
مدتی به دلیل یک امتحان سخت کمتر در خدمتتون هستم. و دیر تر آپدیت میشه.
پست بعدی به زودی طی دو سه روز آینده ارسال میشه. انشاالله بعد از امتحان فاصله زمانی آپدیت کمتر میشه.

عید همگی هم مبارک باشه. التماس دعا :razz: :razz:
ناگهان چقدر زود دیر میشود !

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21044 بار
تماس:

Re: آموزش AVR

پست توسط sinaset » چهار شنبه 23 مرداد 1392, 10:07 am

سلام بر اقا مهدی عزیز.
عید شما هم مبارک ، و اکنون 6 روز از تاریخ پست شما میگذرد .. :shock:
کجایی اقـــــــــــــــا ؟؟؟!!!
:D :razz:
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”