واقعا باور کردنی نیست در همین مدت کم که شروع به نوشتن وبلاگ کردم بالغ بر ۱۰۰ نفر از سراسر ایران تماس گرفته اند و ما را شرمنده کردند.
برای شما عزیزان چند خبر داشتم:
۱- از این به بعد می تونید از آدرس زیر به سایت وارد شوید:
۲-نویسندگان این سایت دو نفر هستند:
فرزان شجاعی
که ان شاالله کنکورش رو با موفقیت می ده و دوباره به جمع ما اضافه می شه
یحیی حسن زاده
که بنده هستم و دانشجوی مهندسی برق دانشگاه فردوسی مشهد می باشم
۳-شماره تلفن من (یحیی حسن زاده) ۰۹۱۵۳۱۱۴۴۱۷ است و در هر ساعتی از شبانه روز می تونید بامن تماس بگیرید
۴-در تابستان و از ۱ مرداد سایت روزهای شنبه و چهارشنبه آپ دیت می شه
۵-برای باخبر شدن از آپ دیت سایت و عضویت در سایت در خبر نامه که سمت راست همین صفحه است عضو شوید
به امید دیدار
یحیی حسن زاده
دوستان خوبم واقعاً از همتون به خاطر اين غيبت هاي طولاني عذر مي خواهم و دليل اون هم مشكل بزرگي است به نام «كنكور» البته اين دليلي بر مشروعيت اين غيبت ها نمي شود چون زكات علم آموختن آن است.اين رو هم نگفتم كه بخوام بگم خيلي عالمم نه! اما حداقل چند تا چيزي رو كه بلدم به چهار تا جوون هدفمند ايراني ياد ميدم.آره اگه شما ها هدفمند نبوديد الان در حال مطالعه اين مطالب نبوديد.
شما هم دعا كنيد برام شايد با دعاي شما و همت خودم بتونم اونجايي كه دوست دارم قبول شم. من هم نهايتش تا ۴ مرداد كه كنكورم رو بدم درگيرم بعد از اون إن شاء الله يه تكون مشتي به وبلاگم ميدم.
دست علي يارتون.«وعده ما إن شاء الله بعد از كنكور! برام دعا كنيد.»
امروز می خواستم نرم افزار بسکام رو توضیح بدم ولی چون یکی از دوستان از سقز زنگ زدند و خواستند که نحوه ساختن پروگرامر رو براشون توضیح بدم تصمیم گرفتم که در این جلسه فقط راجع به پروگرامر صحبت کنم.
تعریف پروگرامر:خب اول باید بدونیم که یک پروگرامر چیه؟
یک پروگرامر یک قطعه سخت افزاری که شما می تونید به وسیله ی اون برنامه ای رو که نوشتید روی میکروتون قرار بدین و حالشو ببرین!
ساده ترین نوع پروگرامر نوع STK 200/300است که در این پست آموزش اونو می دم .
برای ساختن این پروگرامر به قطعات زیر نیاز دارید:
- یک عدد سوکت ۲۵ پین، پورت Parallel یا موازی کامپوتر (از نوع نر)
- یک عدد قاب سوکت ذکر شده در صورت تمایل
- سیم فلت ده تایی
- یک عدد پایه محافظ میکرو ۴۰ پایه پیشنهاد من یه زیف 40 تای است
- یک عدد میکروکنترلر AVR. پیشنهاد من از نوع ATmega32L/32 هستش.
- سایر موارد لازم مثل هویه، سیم قلع، فیبرمدار و....
خب در واقع در تصویر بالا در سمت راست میکرو و در سمت چپ پورت قرار داره
اما مراحل کار:
1-پایه های 18 تا 25 پورت (همون پایه هایی که با خط مشکی به هم وصل شدند)به قطب - منبع تغذیه وصل شوند.
2-پایه 8 میکرو به پین شماره 6 پورت وصل شود.
3-پایه 6 میکرو به پایه ی شماره 7 پورت وصل شود.
4-پایه 9 میکرو به 9 پورت وصل شود.
5-پایه ی 7 میکرو به پایه 10 پورت وصل شود.
6-پایه 11و 31 میکرو به پایه - منبع تغذیه و پایه 10و 30 میکروبه +5ولت وصل شود.
خب در واقع با این کارها پروگرامر شما آماده است اما بهتره به چند نکته توجه کنید:
1-مونتاژ مدار پروگرامر با این روش اگرچه موثر است و جواب می دهد ولی به صرف حوصله و دقت زیاد احتیاج دارد.
2-پورت Paralelپورت بسیار حساسی است و بسیار آسان در اثر مونتاژ نادرست شما صدمه می بیند و ممکن است رایانه شما خراب شود لذا تا زمانی که از مونتاژ درست مدار مطمئن نشدید آنرا تست نکنید.
3-درجلسه آینده تنظیمات نرم افزاری پروگرامر گفته خواهد شد.
4-امکان خرید پروگرامر به صورت آن لاین وجود دارد در لینک زیر یکی از سایت های رباتیک قرار داده شده است که پروگرامر های خوبی را عرضه می کند و شیوه خرید هم به این صورت است که شما سفارش را می دهید و سفارش درب منزل شما تحویل داده می شود و پول هم آنجا دریافت می شود. این سایت هیچ ارتباطی به ما ندارد ولی ما برای رفاه شما دوستان لینک آنرا قرار دادیم تا از آن استفاده کنید.

کار گلچین فلک گرچه همه یغما بود
لیکن این بار گلی چید که بی همتا بود
خاموش ای دل که به غمناک ترین واژه شعر
غم او را نتوان گفت چه جان فرسا بود
مادر بزرگ به دیدار خدا رفت!
باز هم از تمام دوستان عذر می خواهم ان شا الله در اولین فرصت شروع می کنم اگر سوالی در مورد میکرو داشتید در خدمتم:
۰۹۱۵۳۱۱۴۴۱۷
یحیی حسن زاده

بخش ورودی و خروجی
در این بخش چهار پورت به نام های A(پایه های 33تا40)B(پایه های 1تا8)C (پایه های22تا29)D(پایه های 14تا 21) داریم به پایه های هر پورت پین میگیم پ در مجموع چون هر پورت 8 پین داره 8×4=32پین داریم که از اونا می تونیم به عنوان ورودی یا خروجی استفاده کنیم اما ورودی یا خروجی یعنی چی؟
منظور از ورودی یعنی اینکه اگر ولتاژ+5به یک پایه برسه اون پایه فعال شده و یه کار بخصوصی رو انجام می ده
و منظور از خروجی یعنی اینکه اگر اون پایه فعال بشه ولتاژ +5 ولت رو می ده
مثلا اگه برنامه ای بنویسیم که هر دوثانیه یک بار به مدت 5 ثانیه پین 5 پایه ی A رو فعال کنه و به پایه ی اون یه led وصل کنیم یه چشمکزن ساختیم.
خب درس این جلسه هم تموم شد به سه نکته توجه کنید و بعد خدا حافظ:
1-لطفا اگر دستتون درد نمیگیره نظر بدید!
2-برای آگاهی از بروز شدن در خبرنامه ی پایین صفحه عضو شوید
3-جلسه ی بعد یعنی 10 روز دیگه پروژه ی زیبای چشمک زن 32 کانال با چندین برنامه رو میدم!
حماسه بسازیم !

سلام دوستان گرامی !
حتما شما هم ماجرای خلیج فارس رو که می خواهند به زور بکننش خلیج عربی شنیدید
سایت گوگل اعلام کرده که اگه ۱۰۰۰۰۰۰(یک میلیون)نفر امضا بدن برای همیشه بیخیال خلیج عربی میشه و اسم خلیج همیشه فارس رو ثبت می کنه من اینکار رو کردم کار بسیار ساده ای است و در مجموع ۱ دقیقه زمان می بره تا موقعی که من امضا دادم با من ۱۰۵۴۹۷نفر امضا دادن شما هم به عنوان یک ایرانی با کلیک بر روی لینک زیر این کار رو بکنید.
در ضمن حتما نظرات شما در این باره خوندنیه برای همین نظ رو آزاد گذاشتم و نیاز به تایید نداره!
من ساختمان mega32 رو براتون تشریح می کنم و ساختمان mega 16 هم مثل همونه!
mega32 و تقریبا تمام میکرو های خانوادهmega دارای دو نوع شکل هستند که بسته به معماری مدار مورد استفاده قرار میگیرند:
1)مدل مربعی
2)مدل مستطیلی
که من به دلیل راحت تر بودن بهره برداری از مدل مستطیلی و همچنین ارزون تر بودن اون (3000تومان) این مدل رو آموزش می دم شکل این مدل به صورت زیر هست:

خب همونطور که می بینید این میکرو 40 پایه داره که به هر پایه اون یک پین هم میگن
این میکرو سه بخش داره :
1)بخش راه اندازی
2)بخش ورودی / خروجی
3)بخش نوسان ساز
==============================================================
بخش راه اندازی
هنگامی که یک برنامه خاص مثلا یک چشمک زن 8 کانال را روی میکرو می ریزید برای راه اندازی اون باید کار های زیر رو انجام بدید:
1)پایه ی 10 یا VCCتغذیه ی قسمت دیجیتال میکرو ی شما هستند و باید اون رو به ولتاژ 5 ولت وصل کنید
2)پایه ی 30 یا AVCCتغذیه ی قسمت آنالوگ میکرو هستند و باید اون پایه رو هم به 5ولت وصل کنید
3)پایه ی 11 یا GNDتغذیه ی منفی قسمت دیجیتال میکرو هست و باید اون رو به سر منفی منبع تغذیه با در اصطلاح علمی پتانسیل صفر وصل کنید.
4) پایه ی 31 یاGND تغذیه ی منفی قسمت دیجیتال میکرو هست و باید اون رو به سر منفی منبع تغذیه با در اصطلاح علمی پتانسیل صفر وصل کنید.
اگر تغذیه ی قسمت آنالوگ و دیجیتال با هم به میکرو وصل نشود احتمال آسیب دیدن میکرو وجود داره!
5)پایه ی شماره ی 9 یا RESET در صورت وصل شدن به منفی منبع تغذیه باعث می شود برنامه ی میکرو در هر قسمت از اجرای خود که باشد به خط اول برگردد مثلا اگر برنامه شما یک چشمک زن 8 کانال است و الان لامپ یا LEDشماره 5 روشن است بعد از وصل شدن پایه ی 9 به جای آنکه LED شماره 6 روشن شود شماره 1 روشن می شود .
خب فکر می کنم برای این جلسه کافی باشه جلسه آینده در مورد بخش ورودی خروجی صحبت می کنم
در ضمن یک خبر نامه در وبلاگ ایجاد کردیم و شما می تونید با عضویت در اون از به روز شدن وبلاگ آگاهی پیدا کنید.برای عضویت به پایین این صفحه بروید!
نوشته شده توسط یحیی حسن زاده
تلفن تماس 09153114417
تمام مطالب قرمز رنگ نوشته های این دوست عزیزمون آقا امین است.دستشون درد نکنه!
جلسه سوم AVRشنبه ۱۶فروردین از ساعت ۲۳ روی وبلاگ قرار میگیرد.
pic محصول جديد شركت Microchip ميباشد.
محصولات pic از نظر پايه
8 pin
12C508,12C508A,12C509, 12C509A, 12CE518,12CE519,12C671,12C672,12CE673,12CE674,12F629,12F675,16C505
---------------------------------------------------------------------------------------------------
18 pin
16C554,16C556,16C558,16C61,16C620,16C620A,16C621, 16C621A,16C622, 16C622A, 16CE623, 16CE624, 16CE625,16F627,…
----------------------------------------------------------------------------------------------------
28 pin
14000,16C62,16C62A,16C62B,16C63, 16C63A, 16C66, 16C641,16C642, 16C72,16C72A,16C73,16C73A,…
------------------------------------------------------------------------------------------------------
40 pin
16C64,16C64A,16C65,16C65A,16C65B,16C67,16C661,16C662,16C74,16C74A, 16C74B,16C77,16C765,16C774,16F874,16F877,18C442,...
--------------------------------------------------------------------------------------------------------
SX
SX18(old),SX28(old),SX18(new),SX28(new)
--------------------------------------------------------------------------------------------------------
نمونه اي از كاربردها:
Can control pic 18f458
Motor control ds pic 30f2010
Power conversion ds pic 30f5015
Sensor controller ds pic 30f3012
Radio frequency rf pic 12f675
Nanowatt microcontroller
Digital signal control
امروز وقتی به سایت googleرفتم دیدم یه لوگوی قشنگ به مناسبت نوروز ما گذاشته حیفم اومد تو اولین پستم تو سال 87 این لوگو رو نذارم :

اما از هرچه بگذریم سخن دوست خوش تره خوب تا کجا درس دادیم ؟
آها رسیدیم به انواع میکرو ها .میکرو ها سه دسته هستند:
1)8051 :اسم این میکرو ها همینه هشتاد - پنجاه و یک و از میکرو های کهن ! هستند . (البته از میکرو هایی هستند که از زمان دانش آموزی با اونا کار کردم و یه جورایی به جوانب کارشون واردم)
ولی بدلیل امکانات برتر میکرو های AVRاز توضیح بیشتر در این زمینه جلو گیری می کنم تصویر میکرو های 8051 رو در زیر آوردم .توجه کنید برای تشخیص میکرو های 8051 از بقیه می توانید از راهکار زیر استفاده کنید.
راهکار:در میکرو های 8051 عبارت 8051 به گونه ای نوشته شده است. من در مثال های زیر ابتدا عکس میکرو را می گذارم و سپس شیوه تشخیص آنرا می گویم.
میکرو P8051AHشرکت سازنده intel دارای 40 پایه .
به عبارت p8051AH توجه کنید
میکرو SCN8051H )شرکت سازندهSignetics دارای 40 پایه
به عبارت SCN8051توجه کنید.

خب فکر می کنم برای 8051 همین دو نوع کافی باشه
2)میکرو های PIC:تلفظ این میکرو ها به صورت پیک است و بیشتر در ربات های مسیر یاب کاربرد دارند و من کاربرد بیشتری برای اونا نمی دونم ولی اگر دوستان می دانند حتما در بخش نظرات اعلام کنند.(البته نمب دونم با وجود مبکرو های خوبی مثل avr دیگه ملت با چه عقلی از این میکرو ها استفاده می کنند؟
)
3)میکرو های avr که در این رابطه در جلسه آینده بیشتر براتون صحبت میکنم .
هرچه شما بیشتر نظر بدهید می توانم بیشتر مطالب مورد نیاز شما را بنویسم
فعلا خدانگهدار
خب ببینید در ابتدا تراشه های اولیه به صورت ROMبودند که مخفف Read Only Memoryاست یعنی تو کارخونه یه سری اطلاعات روی اونا می ریختن و اونا فقط با استفاده از اون اطلاعات پردازش می کردند یعنی سطح پردازش محدودی داشتند.اطلاعات روی اونا هم قابل پاک شدن یا تعویض نبود و فقط خواندنی بودند. یعنی مثلا طوری برنامه ریزی شده بودند که اگه یک پایه ی اونا 1 شد پایه ی دیگر 0 شود ولی مثلا اگه می خواستین این عمل برعکس اجرا شود باید از یه رله استفاده می کردین .
به تدریج ملت اومدن دیدن این حافظه های ROM خیلی ضایعه ! لذا اومدن حافظه های ERom رو ساختند یعنی Eraseable ROM حافظه های که قابل برنامه ریزی بودند و می توانستید به تعداد محدودی برنامه روی آنها بنویسید ولی اینکار به وسیله ی اشعه ی فرابنفش انجام می شد به طوریکه به هنگام نوشتن یه تعداد سلول داخل تراشه را می سوزاند و به هنگام پاک کردن اونا رو باز آوری می کرد.
یواش یواش ملت دیدن که به دلیل سرطان زا بودن فرابنفش و خاصیت پرتوزایی تراشه بعد از هر بار نوشتن یا پاک کردن دهنشون داره آسفالت می شه ! لذا حافظه های EEROMرو اختراع کردند که مخفف Electricaly Erasaeble ROM یعنی حافظه با قابلیت برنامه ریزی الکترونیکی که میکرو کنترلر ها جزء این دسته می باشند .
البته حافظه های مدرن تری به نام Flashهم اختراع شد که الان برای ذخیره و حمل اطلاعات ازشون استفاده می کنیم ولی یه نوع EEROM هستند.
خب درس این جلسه همین بود جلسه بعد ایشاالله در مورد خصوصیت های عمومی میکرو ها صحبت می کنم و بعدش می ریم تو AVR خودمون و آموزش نرم افزاری و سخت افزاری اونا .
منتظر شنیدن نظرات شما عزیزان هستم می دونید که میگن مستمع صاحب سخن را بر سر ذوق آورد !
فعلا خدا نگهدار
ضمنا باید بهتون بگم تمام مطالبی که آموزش می دهم اول تجربیات من در زمینه میکرو است و همه ی اونا رو بر اساس آزمایشاتی که با میکرو انجام دادم بدست آوردم ولی اگر جایی لازم باشه از روی منبع بگم حتما اسم منبع رو هم ذکر می کنم !
در ضمن حیف جامعه ی علمی ماست که این اندازه حسود باشند فرزان جان وبلاگش رو باز کرده و داره اونو به هر نحوی است می چرخونه اینکه بعضی از دوستان حالا به هردلیلی میان ضد حال می زنن که آقا فرزان از روی کتاب خاصی نوشته واقعا کم لطفیه ! امیدوارم این دوستان بینش خودشون رو نسبت به موضوع عوض کنند.
با آروزوی موفقیت برای شما
یحیی حسن زاده
سلام عرض می کنم خدمت همه دوستای خوبم
امیدوارم که خوش وخرم باشید و این غیبت طولانی منو هم ببخشید
.حالا ببینم شما ها که اینقدر خوب نظر می دین چرا قبلاْ از این کارا نمی کردید!!
دوستان تا اونجایی که یادمه در پست قبلی نحوه پیکربندی تایمر های میکرو را به صورت تایمر توضیح دادم و قرار شد که در این پست اونا رو به صورت کانتر پیکربندی کنیم.ببنید هر مدلی از میکروهای avr که دارای چند تا از این تایمر ها هستند هرکدام از این تایمر ها یک پایه به عنوان ورودی به نام های T0و T1 و... دارند که عدد بعد از T نشان دهنده تایمر مورد نظر می باشد مثلاْ : T0 نشان دهنده پایه ورودی پالس به تایمر صفر است که با هر پالسی که(یک سیکل)که به این پایه می رسد محتوای این کانتر یک واحد افزایش می یابد.
برای پیکر بندی تایمر ها در مد کانتر از دستور زیر استفاده می کنیم که در آن x شماره تایمر مورد نظر(مثلاْ TIMER0) می باشد و با انتخاب Edge=Rising محتوای کانتر با لبه بالا رونده سیگنال ورودی افزایش می یابد و با انتخاب Edge=Falling محتوای کانتر با لبه پایین رونده سیگنال ورودی افزایش می یابد.
Config Timerx = Counter , Edge = Rising / Falling
همانطور که در پست قبل به آن اشاره شد تایمر بر اساس اینکه هشت بیتی باشد یا شانزده بیتی می تواند تا حداکثر ۲۵۵(هشت بیتی) و ۶۵۵۳۵(شانزده بیتی) را بشمرد که وقتی کانتر تا این مقدار را شمرد یکی از پرچم های وقفه ovfx را یک می کند که در آن x شماره تایمر مورد نظر است که با استفاده ار دستوراتی که در پست قبل به آن ها اشاره شد می توان بر آن ها نظارت کرد.
دوستان همانطوری که قولش رو داده بودم در پست بعد پروژه فرکانس متر رو خواهیم داشت که با استفاده از تایمر-کانتر های موجود در میکرو به طراحی آن ها می پردازیم. اما نکاتی که قبل از این پروژه باید بدانید این است که فرکانس چیست؟ و فرکانس متر چه کاری انجام می دهد؟ در پاسخ به این دو سوال باید بگویم که ما دو نوع جریان الکتریکی داریم ۱-جریان ثابت ۲DC-جریان متناوب AC . که مقدار DC کاملاً ثابت است و تغییری نمی کند مانند باتری. اما جریان AC جریانی است که مقدار آن متناسب با زمان تغییر می کند و از مقدار صفر به ماکزیمم(حداکثر) و از ماکزیمم به صفر و از صفر به مینیمم(حداقل)و از مینیمم به صفر می رسد که به این حلقه که دائماً تکرار می شود یک سیکل می گویند و فرکانس عبارت است از: تعداد سیکل هایی که در یک ثانیه تکرار می شوند و واحد آن هرتز(HZ ) است. وقتی می گوییم فرکانس موجی 50 (HZ) است یعنی در یک ثانیه 50 سیکل وجود دارد.
از بحث فوق نتیجه می گیریم که ما برای اندازه گیری فرکانس باید تعداد سیکل ها را در یک ثانیه بشمریم که می توانیم این یک ثانیه را توسط تایمر بسازیم و سپس با استفاده از کانتر تعداد سیکل ها را اندازه بگیریم.فقط این وسط می مونه اینکه میکرو فقط می تونه فرکانس موج مربعی را اندازه بگیره که اینم مشکل بزرگی نیست و به راحتی حل شدنیه که به امید خدا در پست بعد به آن اشاره خواهیم کرد.
ضمن نوید این که به احتمال زیاد در پست بعد ضمن ساخت فرکانس متر یه پروژه توپ دیگه هم داریم که مطمئنم خوشتون میاد.(ساخت ماوس کامپیوتر با میکرو).
راستی اینم بگم ها تا نظرات بالای 10 تا نشه از پست بعد و پروژه ها خبری نیست.
شب همتون خوش.
موفق و سربلند باشید ![]()
به امید روزی که ایران هم در عرصه الکترونیک چون ستاره ای بدرخشد.![]()
دوستان خوبم سلام:![]()
اول از همه می خوام عذر خواهی کنم ازتون به خاطر غیبت طولانیم .ثانیاْ اینکه به امید خدا از فردا دوباره وبلاگ طبق روال قبل به روز می شه و ضمن نوید این که مطالب جدید درخور عزیزانی باشد که مطالب این وبلاگ را کم ارزش و کپی شده از کتاب می دانند.
تا فردا حق نگهدارتان ![]()
سلام به دوستان خوب و عزيزم
قبل از هر چيز فرا رسيدن اين ماه مبارک رو به همه شما دوستان تبريک مي گم.و روزه نمازهاي همتون مورد قبول حق تعالي قرار بگيره.راستش مي خواهم يه گله اي بکنم از اين دوستاني که فقط مطالب رو مي خونن و نظر نمي دن
و بايد بگم اون دسته از عزيزاني که مطالب اين وبلاگ به دردشون مي خوره و مي خواهند که هر چه زودتر وبلاگ آپديت بشه بايد « توجه کرديد بايد
» لطف کنن و تو قسمت نظرات نقاط قوت ، ضعف ، پيشنهادات و نظرات خودشونو رو بگن از الان گفته باشم تا قسمت نظرات اين پست حداقل ۱۰ نظر نداشته باشه از مطلب بعدي خبري نيست ها.... بعداً نگيد نگفتي.خوب از اين مسائل که بگذريم مي رسيم به پيکره بندي و استفاده از تايمر-کانترها در محيط Bascom ببينيد دوستان طبق برگه هاي اطلاعاتي که براي هرمدل از ميکرو وجود دارد هر کدام داراي يک يا چند تايمر-کانتر هستند که ما مي توانيم از آن ها هم به عنوان تايمر بسيار دقيق استفاده کنيم يا به عنوان کانتر که پالس هاي ورودي به پايه هاي T0 ، T1،.... را شمرده در واقع محتواي اين کانترها با يک پالس که مقدار آن از صفر به يک متغير است يک واحد افزايش مي يابد. که از اين خاصيّت مي توان براي اندازه گيري فرکانس موج هاي خارج از ميکرو استفاده کرد.
با استفاده از دستور زير مي توان تايمر-کانترها را در مد تايمر پيکره بندي کرد که در آن x يکي از اعداد 0،1،2،3 به معني تايمر 0 يا يک و... است و عبارت PRESCALE مي تواند يکي از موراد 1024،256،64،8،1 باشد که اين عدد تقسيمي از فرکانس کريستال مورد استفاده در ميکرو است به عنوان مثال اگر فرکانس کريستال مورد استفاده برابر 8 مگاهرتز باشد و مقدار PRESCALE برابر 8 آنگاه فرکانس پالس اعمالي به تايمر برابر 1=8/8 يک مگاهرتز خواهد بود.
Config timerX=timer ,PRESCALE=1 / 8 / 64 / 256 / 1024
در دستور بالا چنانچه Timerx را Timer0 قرار دهیم و آن را مساوی با timer قرار دهیم Timer0 را در مُد تایمر پیکره بندی کرده ایم .
دوستان اصولاً محتوای یک تایمر تا مقدار مشخصی با هر پالس ساعت افزایش می یابد و پس از آن دوباره صفر می شود که این مقدار مشخص در تایمر های هشت بیتی عدد ۲۵۶ و در تایمر های شانزده بیتی عدد ۶۵۵۳۶ است که تایمر وقتی در مد تایمر پیکره بندی می شود با شمردن تا این مقدار سرریز شده و دوباره صفر می شود و یک بیت پرچم را در رجیستر میکروکنترلر یک می کند که کاربر می تواند با نظارت بر این بیت برنامه خود را بنویسد، که تایمر صفر یک تایمر هشت بیتی است و تایمر یک، یک تایمر شانزده بیتی است و تایمر دو، یک تایمر هشت بیتی است و تایمر سه، یک تایمر شانزده بیتی است.
با استفاده از فرمول زیر می توان حداکثر زمان تأخیری که می توان توسط یک تایمر هشت بیتی ایجاد کرد را محاسبه نمود که در آن Fosc فرکانس کریستال مورد استفاده میکرو و PRESCALE تقسیمی از فرکانس کریستال مورد استفاده میکرو است که به شمارنده تایمر اعمال می شود. که برای محاسبه زمان تأخیر تایمر های شانزده بیتی از عدد 65536 به جای عدد 256 در فرمول استفاده می شود.
PRESCALE*256 / Fosc
با استفاده از دستور زیر می توان مقدار اولیه ای را در رجیستر شمارنده تایمر قرار داد که در اینصورت تایمر از عدد مورد نظر شروع به شمارش کرده در نتیجه به میزان عدد مورد نظر از 256 کمتر شمرده می شود و برای محاسبه زمان تأخیر عدد مورد نظر را از 256 کم کرده و در فرمول قرار می دهیم. که در آن value عدد مورد نظر است.
TimerX= value
در مثال زیر مقدار PRESCALE برابر با 1024 و فرکانس کریستال برابر یک مگاهرتز است و مقدار اولیه 10 در رجیستر شمارنده تایمر قرار داده شده است که طبق فرمول 1000000/246*1024 میزان تأخیر برابر با 251 میلی ثانیه است یعنی تایمر هر 251 میلی ثانیه یک بار سرریز می شود. همانطور که مشاهده می کنید عدد 10 از 256 کم شده و عدد 246 در فرمول قرار گرفته است.[دو زاریتون افتاد
]؟
"regfile="m32def.dat$
crystal=1000000$
config timer0=timer , prescale=1024
timer0 = 10
و با استفاده از دستور زیر می توان مقدار تایمر را خواند و در متغیر Var قرار داد.
Var= TimerX
اکنون که تایمر را در مد تایمر پیکره بندی کردید و نحوه ایجاد تأخیرهای مختلف با آن را فرا گرفتید می توانید با استفاده از دستور Start TimerX تایمر X را شروع به شمارش کنید و با استفاده از دستور Stop TimerX آن را متوقف کنید. نکته دیگری که می ماند آن است که تایمر هر بار که سرریز می شود یک پرچم به نام Ovf 0 را یک می کند که شما برای نظارت بر این پرچم می توانید از دستورات وقفه استفاده کنید طوری که میکرو طبق روال دستورات برنامه را انجام می دهد و به محض بروز سرریز شدن تایمر و یک شدن پرچم Ovf X اجرای دستورات به بر چسب مربوطه پرش کرده و پس از اتمام مراحل دوباره به بدنه اصلی برنامه باز می گردد اما برای استفاده از وقفه ابتدا باید توسط دستور enable interrupts اجازه کلی استفاده از تمامی وقفه ها داده شود [این دستور امکان استفاده از تمامی وقفه ها را می دهد] سپس توسط دستور enable TimerX وقفه مربوط به تایمرها را فعال کرد و در نهایت با استفاده از دستور ON Ovf X Lable در صورت یک شدن هریک از بیت پرچم های Ovf 0 ، Ovf 1 ، Ovf 2 یا Ovf 3 به برچسب Lable که در پایان برنامه بعد از دستور End قرار می گیرد پرش کرد.
خوب دوستان إن شاء الله در پست بعد به پیکره بندی تایمرها در مد کانتر اشاره خواهم کرد و قول یه پروژه خوب «فرکانس متر»
رو به شما دوستان میدم فقط یادتون نره که قسمت نظرات باید 10 تا نظر داشته باشه تا پست بعدی رو بنویسم.![]()
فعلاً یا حق ![]()
سلام خدمت دوستان گل
خودم بعد از یه مدت طولانی دوباره فرصتی شد تا وبلاگ رو آپدیت کنم اول باید از اون دسته از عزیزانی که لطف خودشونو به من ابراز داشتند تشکر کنم و گلایه کنم
از دوستانی که نظر نمیدین.
خوب امروز (البته الان شبه)
می خواهیم در مورد پیکره بندی امکانات avr در محیط Bascom صحبت کنیم.ببینید دوستان هر مدل از سری میکروکنترلر های Avr دارای امکانات داخلی می باشند مانند :تایمرها-کانترها و منابع وقفه و مبدل آنالوگ به دیجیتال و ارتباطات سریال می باشند که هر کدام به جای خود توضیح داده می شوند.ما برای استفاده از این امکانات ابتدا باید آن ها را پیکره بندی کنیم یعنی با استفاده از زبان برنامه نویسی به میکرو کنترلر بفهمانیم که از کدام امکانات آن می خواهیم استفاده کنیم بعد از آن باید با دستورات مختلف این امکانات را مدیریت کنیم. در این پست به نحوه پیکره بندی و استفاده از تایمر-کانترها و همچنین پیکره بندی صفحه کلید ماتریسی(Keypad) و استفاده از آن می پردازیم.
پیکره بندی صفحه کلید های ماتریسی
برای پیکره بندی این صفحه کلید ها از دستور زیر استفاده می شود که در آن portx می تواند یکی از پورت های میکروکنترلر باشد که صفحه کلید به آن وصل می شود (این صفحه کلید ها همانطور که در شکل می بینید دارای 8 پایه برای اتصال به میکروکنترلر هستند) و مقدار Debounce بر حسب میلی ثانیه مدت زمانی است که میکرو در تشخیص کلید فشرده شده صبر می کند و دوباره وضعیت پایه را بررسی می کند و اگر تغییری نکرده بود آن را به منزله فشرده شدن کلید در نظر می گیرد و این به دلیل آن است که کلید هایی که به طور مکانیکی فشرده می شوند مدت زمانی در حدود 20 میلی ثانیه لرزش بین مقدار 0 و 1 ایجاد می کنند که این مسئله میکرو را در تشخیص کلید فشرده شده گمراه می کند که استفاده از مقدار 20 بر حسب میلی ثانیه برای Debounce این مشکل را حل می کند و مقدار اختیاری Delay زمانی استفاده می شود که صفحه کلید به طور مداوم اسکن می شود و مدت زمانی است بین فشرده شدن دو کلید که مقدار 100 میلی ثانیه برای آن ایده آل است.
[ config KBD=portx, Debounce=x,[Delay=x
عکس مربوط به اتصال keypad به atmega32
پس از اینکه توسط دستور بالا صفحه کلید را پیکره بندی کردیم نوبت به آن رسیده که توسط دستور زیر عدد فشرده شده از صفحه کلید را در یک متغیر بریزیم این دستور تا زمانی که کلیدی فشرده نشده باشد عدد 16 را در متغیر مربوطه قرار می دهد و در زمان فشرده شدن کلید عدد متناسب با آن را از بین 0 تا 15 در متغیر قرار می هد.
( )var=GETKBD
می گم خودمونیم دوستان الان آخر شبه منم خیلی خوابم
می آید میشه بقیشو فردا بنویسم......
آره؟ خیلی ممنون پس تا فردا..
یا حق![]()
دوستان خوبم سلام:![]()
راستش امروز اومده بودم که وبلاگو آپدیت کنم ولی دیدم که جمع آوری مطالب این پست خیلی کار داره منم چون داشتم می رفتم بیرون وقت نکردم که آپدیت کنم ولی به شما قول ٪۱۰۰
می دم که فردا حتماً آپدیت کنم و مطالب جالبی رو بذارم.
اما الان اومدم که از دوستانی که در زمینه ساخت ربات (خصوصاً قسمت مکانیک) تجربه دارند دعوت به همکاری کنم و به امید خدا یه تیم تشکیل بدیم و فعالیت کنیم. دوستانی که تمایل به همکاری دارند می تونند تو بخش نظرات این پست آمادگی خودشونو اعلام کنن یا به آدرس زیر برام آف بزارند.
در هر صورت خوشحال می شم که با شما دوستان ارتباط بیشتری داشته باشم.
فعلاً یا حق![]()
پس خوب فکراتونو بکنین![]()
فعلا یا حق![]()
دوستان خوبم سلام
ان شاء الله که حالتون خوب باشه و تو دستورات پست قبلي مشکلي نداشته ايد البته اينجوري که شما نظر نميديد لابد خيلي خوب ياد گرفتيد ديگه
البته اين ناشي از هوش بالاي شماست اما آخه بي معرفتا
يه نظر بدين دل من هم براي نوشتن خوش باشه. خوب بگذريم تو اين پست ميخوام يه سري دستورات تبديل کدها به يکديگر و دستورات مربوط به حلقه هاي تکرار را آموزش بدم.
دستور HEX
اين دستور مقدار X را به مقدار هگزادسيمال آن تبديل کرده و در متغير VAR قرار مي دهد.
(VAR=HEX(X
به مثال زير توجه کنيد:
Dim A As Byte , B As String * 5
A = 95
(B = Hex(a
Lcd B 'lcd 5F
End
دستور HEXVAL
اين دستور X را که يک داده هگزادسيمال است به مقدار دسيمال آن تبديل کرده و در متغير VAR قرار مي دهد.
(VAR=HEXVAL(X
به مثال زير توجه کنيد:
Dim A As Byte , B As String * 5
B = 5f
(A = Hexval(b
Lcd A 'lcd 95
End
دستور STRING
با اين دستور مي توان کد اسکي x را به تعداد n به رشته تبديل و در متغير VAR قرار داد.
(VAR=STRING(N , X
به مثال زير توجه کنيد:
Dim A As String * 20
(A = String(3 , 66
Lcd A 'lcd BBB
End
لازمه که يه کم در مورد کد اسکي( ASCI ) براتون توضيح بدم. ببينيد دوستان براي اينکه هر حرف،عدد یا کاراکتری را روی LCD نمایش دهیم باید کد اسکی آن را به پایه های 7 تا 14 LCD اعمال کنیم.
جدول کد اسکی حروف و اعداد
| کد اسکی | مبنای 10 |
| A |
65 |
| B |
66 |
| C |
67 |
| D |
68 |
| E |
69 |
| F |
70 |
| G |
71 |
| H |
72 |
| I |
73 |
| J |
74 |
| K |
75 |
| L |
76 |
| M |
77 |
| N |
78 |
| O |
79 |
| P |
80 |
| Q |
81 |
| R |
82 |
| S |
83 |
| T |
84 |
| U |
85 |
| V |
86 |
| W |
87 |
| X |
88 |
| Y |
89 |
| Z |
90 |
| 0 |
48 |
| 1 |
49 |
| 2 |
50 |
| 3 |
51 |
| 4 |
52 |
| 5 |
53 |
| 6 |
54 |
| 7 |
55 |
| 8 |
56 |
| 9 |
57 |
دستور ASC
این دستور اولین کاراکتر رشته STRING را به مقدار اسکی آن تبدیل کرده و در متغیر VAR قرار می دهد.
(VAR=ASC(STRING
به مثال زیر توجه کنید:
Dim A As Byte , B As String * 5
"B = "LOVE
(A = Asc(b
Lcd A 'lcd 76
End
دستور STR
این دستور متغیر عددی X را به رشته تبدیل کرده و در متغیر VAR قرار می دهد.
(VAR=STR(X
به مثال زیر توجه کنید:
Dim A As Byte , B As String * 5
A = 156
(B = Str(a
"Lcd B 'lcd"156
End
دستور VAL
این دستور رشته X را به متغیر عددی تبدیل کرده و در متغیر VAR قرار می دهد.[این دستور دقیقاً عکس دستور STR عمل می کند.]
(VAR=VAL(X
به مثال زیر توجه کنید:
Dim A As Byte , B As String * 5
"B = "156
(A = Val(b
Lcd A 'lcd 156
End
دستور IF
در این دستور زمانی که شرط عبارت expression درست شود و دارای ارزش شد دستورالعمل statement اجرا می شود که این دستورالعمل می تواند موراد مختلفی از جمله یک یا صفر کردن یک پایه از میکرو باشد.
IF Expression THEN statement
که همچنین می توان این دستور را به شکل زیر نیز به کار برد که در آنصورت اگر شرط عبارت Epression1درست شد دستورالعمل statement1 اجرا خواهد شد و در صورتی که شرط عبارت Expression1 درست نبود ولی شرط عبارت Expression2 درست بود دستورالعمل statement2 اجرا خواهد شد و در غیر اینصورت یعنی موقعی که شرط هیچکدام از دو عبارت Expression1 و Expression2 درست نباشد دستورالعمل statement 3 اجرا خواهد شد.
IF Expression1 THEN
statement1
Elseif Expression2 THEN
statement2
Else
statement3
End if
به مثال زیر توجه فرمایید:
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
A = Pinc.0
B = Pinc.1
C Alias Portc.2
D Alias Portc.3
E Alias Portc.4
If A = 1 Then
Set C
Elseif A = 0 Then
Set D
Elseif B = 1 Then
Set E
Else
Reset E
End If
End
در مثال بالا ابتدا توسط دستور CONFIG PORTX=INPUT/OUTPUT جهت پایه های پورت C را تعیین کردیم سپس برای هرکدام یک اسم مستعار در نظر گرفتیم و بعد با استفاده از دستور IF وضعیت پایه های ورودی را چک کردیم که در صورت درست شدن هریک از شرط ها دستورالعمل مربوطه اجرا خواهد شد.
حلقه تکرار DO - LOOP
این دستور یک حلقه تکرار بی نهایت است که وقتی درون آن شرط ها و یا دستوراتی را قرار می دهیم درستی این شرط ها دائماً چک می شود و دستورالعمل های مربوطه انجام می شود و اگر دستوراتی را در این حلقه قرار دهیم این دستورات دائماً تکرار می شوند مانند وقتی که می خواهیم برای روشنایی ترتیبی LED از دستور ROTATE استفاده کنیم این دستور دائماً تکرار شده و به این ترتیب LED ها پشت سر هم روشن و خاموش می شوند.البته می توان با استفاده از گزینه اختیاری UNTIL expression به ازای عبارت expression از درون این حلقه تکرار خارج شد. فرم کلی این دستور به صورت زیر است:
DO
statement
[LOOP [UNTIL expression
به مثال زیر توجه کنید:
"regfile = "m32def.dat$
$crystal = 8000000
Config Port A = Output
A Alias Porta
A = 128
Do
Rotate A , Left
Loop
End
در واقع ما با استفاده از برنامه بالا یک چشمک زن 8 کاناله ساخته ایم که شما می توانید آن را در محیط bascom نوشته و پس از کامپایل کردن آن را روی آی سی مورد نظر پروگرم(برنامه ریزی)کنید.
دستور CASE
این دستور مقدار متغیر VAR را با مقادیر مختلف TEST مقایسه کرده و اگر متغیر VAR با یکی از مقادیر TEST برابر بود دستورالعمل مربوط به آن اجرا خواهد شد.
Select Case Var
case test1: statement1
case test2: statement2
case else : statement3
End Select
که شما می توانید مقادیر test را به صورت تساوی با مقداری دلخواه،به صورت بزرگتر یا کوچکتر از مقداری دلخواه یا به صورت محدوده ای برای آن انتخاب کنید.
مانند: Case 5:statement ، Case IS>4:statement ، یا Case 2 to 6 .
به مثال زیر توجه کنید:
Config Portc = Input
A Alias Portc
Do
Select Case A
Case 1 To 50 : Lcd A
:Case Is > 50
A = A * 2
Lcd A
End Select
Loop
End
خوب دوستان خوبم فکر می کنم برای این پست کافی باشه فقط یه سری از حلقه های تکرار می مونه برای پست بعدی. اگه تو دستورات این پست به مشکل برخوردید تو نظرات بنویسید خوشحال می شم
کمکتون کنم.
فعلاً یا حق ![]()
سلام دوستان اميدوارم که حالتون خوب باشه
و از مطالب پست قبل استفاده لازم رو برده باشيد. دوستان امروز(البته الان شبه)
مي خوام کمي درباره توابع رياضي محيط BASCOM براتون توضيح بدم و معرفي دستوراتي که با رجيستر هاي ميکرو کار مي کنند و به اميد خدا در پست بعد مثال هايي از برنامه ساده در محيط BASCOM رو براي شما دوستان بنويسم خوب ميريم سر آموزش امروزمون(البته بازم تکرار مي کنم که الان شبه):![]()
جدول دستورات رياضي محيط BASCOM
| علامت |
نماد |
| علامت ضرب |
* |
| علامت تقسیم |
/ |
| علامت ممیز |
. |
| علامت جمع |
+ |
| علامت تفریق |
- |
| علامت بتوان |
^ |
| علامت مخالف |
<> |
| علامت مساوی |
= |
| علامت بزرگتر از |
> |
| علامت بزرگتر یا مساوی با |
=< |
| علامت کوچکتر از |
< |
| علامت کوچکتر یا مساوی با |
<= |
با استفاده از علائم رياضي بالا مي توانيد عمليات رياضي خود را روي يک متغير در محيط BASCOM انجام دهيد.
تابع ABS
اين دستور قدر مطلق var1 را در متغير VAR قرار مي دهد.
(VAR=ABS(var1
دقت کنيد که در مثال زير متغير ها از نوع INTEGER معرفي شده اند و دليل استفاده از اين نوع اين است که بايد از نوعي استفاده کرد که شامل مقادير منفي هم باشد(رجوع به (0)AVR ).مثال:
Dim A As Integer , B As Integer
A = -685
(B = Abs(a
Lcd B 'lcd 685
End
تابع POWER
اين دستور مقدار param1 را به توان مقدار param2 رسانده و در متغير VAR قرار مي دهد.
(VAR=POWER(param1 , param2
به مثال زير توجه کنيد:
Dim A As Byte , B As Byte , C As Byte
A = 2
B = 4
(C = Power(a , B
Lcd C 'lcd 16
End
تابع sqr
اين دستور مقدار ريشه دوم يا همان جذر مقدار X را گرفته و در متغير VAR قرار مي دهد.
(VAR=sqr(X
به مثال زير توجه کنيد:
Dim A As Byte , B As Byte
A = 36
(B = Sqr(a
Lcd B 'lcd 6
End
تابع LOG
اين دستور مقدار لگاريتم SOURCE را که بايد از نوع SINGLE معرفي شده باشد گرفته و در متغير VAR که اين متغير نيز از نوع داده SINGLE است قرار مي دهد.
(VAR=LOG(source
به مثال زير توجه کنيد:
Dim A As Single , B As Single
A = 100
(B = Log(a
Lcd B 'lcd 2
End
تابع ROUND
اين دستور مقدار X از نوع داده SINGLE را روند کرده و در متغير VAR از نوع داده SINGLE قرار مي دهد.
(VAR=ROUND(X
به مثال زير توجه کنيد:
Dim A As Single , B As Single
A = 2.7
(B = Round(a
Lcd B 'LCD 3
End
تابع RND
اين دستور يک عدد تصادفي بين 0 و X بدست مي آورد و در متغير VAR قرار مي دهد که X يک عدد مثبت است.
(VAR=RND(X
به مثال زير توجه کنيد:
Dim A As Byte
(A = Rnd(213
Lcd A 'lcd 67
End
دستور SET
توسط اين دستور مي توان مقدار يک بيت را يک کرد. که BIT مي تواند يک پايه از يک پورت باشد.
SET BIT
به مثال زير توجه کنيد:
SET PORTA.5
دستور RESET
توسط اين دستور مي توان يک بيت را صفر کرد.
دستور TOGGLE
توسط اين دستور مي توان مقدار منطقي يک بيت را معکوس کرد يعني اگر بيت صفر است يک مي شود و اگر يک است صفر مي شود.
دستور BITWAIT
با استفاده از اين دستور مي توان اجراي برنامه را تا زماني که بيت X صفر يا يک شود متوقف کرد و در صورت درست شدن شرط اجراي برنامه از خط بعد ادامه مي يابد.
BITWAIT X , SET / RESET
به مثال زير توجه کنيد:
BITWAIT PORTC.2 , RESET
SET PORTC.4
تا زماني که پايه 3 پورت C (پايه صفر که همان پايه يک حقيقي ميکرو ماست هم حساب شده) صفر شود صبر مي کند و پس از صفر شدن اين پايه، پايه 5 پورت C يک مي شود.
خوب فکر مي کنم براي اين پست کافي باشه اميدوارم که استفاده لازم رو ازشون ببريد اگه مشکلي داشتيد حتماً تو نظرات بنويسيد.
فعلاً BYE ![]()
با سلام خدمت دوستان خوبم
اميدوارم که حالتون خوب باشه. راستش تصميم داشتم که در پست قبل آموزش هاي ابتدايي رو به پايان برسونم ولي به خاطر طولاني شدن مطلب توضيح در مورد LCD که فکر مي کنم لازم بود و مسائل ديگه نشد که بشه ولي اشکال نداره چون ديگه تو اين پست حتماً تموم مي شه. دوستان شما الان با استفاده از مطالب پست قبل به راحتي مي تونيد يک LCD رو راه اندازي کنيد و جملات خود را روي LCD نمايش بديد و از نتيجه آن لذت ببريد.خوب ديگه خيلي حرف زدم ميريم سراغ آموزش هاي اين پست:![]()
دستور RIGHT
با اين دستور از سمت راست رشته VAR1 ،به تعداد n کاراکتر جدا مي شود و در متغير VAR قرار ميگيرد.
(VAR=RIGHT(var1,n
به مثال زير توجه کنيد:
Dim A As String * 10 , B As String * 10
"A = "1234567
(B = Right(a , 4
Lcd B 'lcd 4567
End
دستور LEFT
با اين دستور از سمت چپ رشته VAR1 ،به تعداد n کاراکتر جدا مي شود و در متغير VAR قرار مي گيرد.
(VAR=LEFT(var1,n
به مثال زير توجه کنيد:
Dim A As String * 10 , B As String * 10
"A = "ABCDEFGH
(B = Left(a , 3
Lcd B 'lcd ABC
End
دستور ROTATE
با این دستور می توان تمام بیت ها را به سمت چپ یا راست انتقال داد که LEFT/RIGHT جهت چرخش بیت ها و گزینه اختیاری BITS تعداد چرخش بیت ها را مشخص می کند و در صورتی که برای این گزینه مقداری تعریف نشود مقدار پیش فرض یک برای آن در نظر گرفته می شود.
[ROTATE var ,LEFT/RIGHT [,BITS
به مثال زیر دقت کنید:
Dim A As Byte
A = 128
Rotate A , Right
Lcd A 'lcd 64
End
لازم می دونم که کمی بیشتر در مورد مثال بالا توضیح بدم که برای این کار ابتدا باید با مبناهای ریاضی آشنا بشید.اصولاً در ریاضی اعداد را در مبناهای مختلف از جمله BINARY (در مبنای دو)، OCTAL (در مبنای 8)، HEXADECIMAL (در مبنای 16) و DECIMAL (در مبنای ده) به کار می برند که ما در برنامه نویسی از سه مبنای BINARY ، HEXADECIMAL ، DECIMAL استفاده می کنیم به طوری که وقتی عدد باینری را در متغیری قرار می دهیم آن را با نماد B& شروع می کنیم زمانی که عدد هگزادسیمال را در متغیری قرار می دهیم آن را با نماد H& شروع می کنیم و برای قرار دادن عدد در مبنای دسیمال از نماد خاصی استفاده نمی کنیم و آن را بدون علامت در متغیر قرار می دهیم. اکنون به چگونگی تبدیل عدد از مبنای دسیمال به باینری می پردازیم:
برای تبدیل عدد از مبنای دسیمال به باینری عدد مورد نظر را به طور متوالی به عدد دو تقسیم می کنیم تا خارج قسمت از مقسوم الیه کوچکتر شود سپس از خارج قسمت به سمت اولین باقیمانده عدد ها را می نویسیم که عدد بدست آمده معادل باینری عدد ما خواهد بود.به مثال زیر توجه کنید:
باقیمانده
0 2/ 128
0 2/64
0 2/32
0 2/16
0 2/ 8
0 2/ 4
0 2/2
1
2(10000000)=128
همانطور که در مثال بالا دیدید معادل عدد 128 در مبنای باینری مساوی عدد (10000000) شد. که با توجه به این عدد متوجه می شویم که تعداد این اعداد هشت تا است و ما در مثال مربوط به دستور ROTATE این مقدار را (البته مقدار دسیمال آن را یعنی 128) در متغیر A قرار داده ایم که در واقع این هشت عدد معادل هشت پایه پورت دلخواه ماست که در این مثال فقط پایه هشتم پورت دلخواه ما یک است و بقیه پایه ها در وضعیت صفر(منطقی) به سر می برند که ما با دستور ROTATE این مقدار یک را در پورت مربوطه به سمت راست می چرخانیم که کاربرد آن می تواند در روشنایی ترتیبی LED باشد البته با هر بار استفاده از این دستور بیت مورد نظر فقط یک بار می چرخد که ما برای استفاده از این دستور برای روشنایی ترتیبی LED باید آن را داخل یک حلقه تکرار(در پست های آینده به طور مفصل راجع به این موضوع صحبت خواهیم کرد) قرار دهیم.
جدول LOOKUP
با استفاده از این دستور می توان مقدار دلخواهی را از جدول مربوطه خواند که LABLE نام جدول مربوطه و VALUE شماره داده دلخواه در جدول است که شماره اولین داده جدول صفر است یعنی شماره ها در جدول از صفر شروع می شود و داده خوانده شده از جدول در متغیر VAR قرار می گیرد.
(VAR=LOOKUP(value , lable
به مثال زیر توجه کنید:
Dim A As Byte
(A = Lookup(4 , Fsh
Lcd A 'lcd e
End
:Fsh
Data A , B , C , D , E , F , G , H , I , J , K
دستور MID
با این دستور می توان قسمتی از رشته VAR1 را با شروع از کاراکتر st ام و طول L در متغیر VAR قرار داد.
([VAR=MID(var , st [, L
البته گزینه L اختیاری می باشد و در صورتی که برای آن مقداری نوشته نشود بیشترین طول L در نظر گرفته می شود. به مثال زیر توجه کنید:
Dim A As String * 10 , B As String * 10
"A = "farzanshojaee
(B = Mid(a , 7 , 7
Lcd B 'lcd shojaee
End
خوب دوستان خوبم امیدوارم که مطالب این پست به دردتون بخوره و استفاده لازم رو ازشون ببرید.
فعلاً bye ![]()
با سلام خدمت دوستان گل
خودم حالتون چطوره؟ان شاء الله که از مطالب پست قبل استفاده لازم رو برده باشین.بابا یه نظری چیزی به خدا دل ما وبلاگ نویسا به نظر شما خوشه.خوب تو این پست دیگه تقریباً مطالب ابتدایی رو به پایان می بریم و به امید خدا از پست های دیگه به برنامه نویسی حرفه ای بپردازیم قبل از توضیح دستورات این پست میخوام درباره پیکره بندی LCD در محیط bascom توضیح بدم چون حتماً در پست های فبلی با دستور{LCD } در متن مثالات برخورد کرده اید و برای شما جای سوال دارد
بنابراین به پیکره بندی LCD در اینجا می پردازیم اما قبل از آن نیاز است تا مختصری از چگونگی عملکرد این وسیله به نقل از وبلاگ آقای امیر سورنا بپردازیم:![]()

دو نوع LCD وجود دارد: LCD های کاراکتر و اعداد(متن) و LCD های گرافیکی.
LCD 2x16 به طور مثال یک LCD متنی است و دارای دوسطر است که هر سطر دارای 16 مکان برای نمایش کاراکتر می باشد.
LCD2x16 دارای 16 پایه می باشد.
|
توضیحات |
سمبول |
شماره پایه |
|
زمین منبع تغذیه ولتاژ+5 ولت منبع تغذیه ولتاژ کنترل کنتراست |
VSS VDD V0 |
1 2 3 |
|
اگر RS=0 باشد ثبات دستور انتخاب می شود و اگر RS=1 باشد ثبات داده انتخاب می شود. |
RS |
4 |
|
R/W=0 برای نوشتن در LCD R/W=1 برای خواندن از LCD |
R/W |
5 |
|
فعال ساز |
E |
6 |
|
بیت های 0 تا 7 دیتا |
D0 – D7 |
14-7 |
|
آنود لامپ LED پشت LCD کاتود لامپ LED پشت LCD |
- - |
15 16 |
ولتاژ های VSS و VDD تغذیه LCD را فراهم می کند.
ولتاژ VO ولتاژ کنتراست است که تنظیم میزان روشنایی کاراکتر ها را روی LCD به کمک ولتاژ های VSS و VDD و یک مقاومت متغیر 10 کیلو انجام می دهد.
در داخل LCD دو ثبات وجود دارد که توسط پایه RS انتخاب می شود.
اگر RS=0 باشد ثبات دستور IR انتخاب تا اطلاعات ورودی به عنوان فرمان مشخص شوند. LCD این اطلاعات را دریافت می کند و فرمان تعریف شده را اجرا می کند.لیستی از این دستورات در جدول زیر موجود است.
در صورتیکه RS=1 باشد ثبات داده DR انتخاب می شود تا کاربر بتواند اطلاعاتی را روی LCD بنویسد یا بخواند.
اطلاعات مربوط به کاراکتر ها باید به صورت کد اسکی باشد.
جدول دستورات:
|
عملکرد فرمان |
کد هگزادسیمال فرمان |
|
صفحه نمایش پاک می شود مکان نما به محل اولیه بر می گردد مکان نما پس از نوشتن هر حرف یا عدد به چپ شیفت پیدا می کند مکان نما پس از نوشتن هر حرف یا عدد به راست شیفت پیدا می کند کاراکترها به راست شیفت پیدا می کنند کاراکترها به چپ شیفت پیدا می کنند کاراکترها و مکان نما خاموش می شوند کاراکترها خاموش و مکان نمای زیر خط ثابت روشن می شود کاراکترها روشن و مکان نما خاموش می شود مکان نمای چشمک زن فعال می شود مکان نما به چپ شیفت پیدا می کند مکان نما به راست شیفت پیدا می کند کل به چپ شیفت پیدا می کند کل به راست شیفت پیدا می کند آدرس اولین کاراکتر سطر اول آدرس اولین کاراکتر سطر دوم LCD به صورت دو سطری می شود |
1 2 4 6 5 7 8 0A 0C 0D 10 14 18 1C 80 C0 38 |
پایه پنجم پایه خواندن یا نوشتن است. برای نوشتن روی LCD ،باید R/W=0 باشد و برای خواندن اطلاعات از LCD باید R/W=1 باشد.
پایه 6 پایه فعال کردن (E) است.اگر در پایه (E) پالسی از یک به صفر قرار داده شود،در اینصورت اطلاعاتی که در پایه های 7 تا 14 قرار دارند در ثبات های LCD ذخیره می شوند . به عبارت دیگر در لبه منفی پالس ورودی به پایه E اطلاعات به LCD منتقل می شوند.
پایه های 7 تا 14، هشت بیت اطلاعات ارسالی به LCD و یا دریافتی از آن می باشند. کد باینری دستورات و کد اسکی کاراکتر ها روی این پایه ها قرار می گیرند.
پایه های 15 و 16 برای لامپ پشت LCD می باشند.
پیکره بندی LCD
اتصال پایه های LCD به میکروکنترلر
پیکره بندی زیر برای انتخاب پایه های میکرو متصل به LCD به کار می رود.
CONFIG LCDPIN=PIN,DB4=PN,DB5=PN,DB6=PN,DB7=PN,E=PN,RS=PN
و PN پایه ای دلخواه از میکرو است که به پایه LCD اتصال می یابد.مثال:
_=Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7
Portb.3 , E = Portb.4 , Rs = Portb.5
که به طور مثال portb.0 یعنی پایه 0 از portb .دقت کنید که به طور مثال میکرو atmega32 دارای چهار port است به نام های A,B,C,D که هرکدام از این پورت ها دارای هشت پین یا پایه است و ترتیب شمارش این پایه ها در BASCOM از صفر تا هفت است پس پایه صفر همان پایه یک حقیقی میکرو مورد نظر ماست.
تعیین نوع LCD
CONFIG LCD = LCD TYPE
LCD TYPE مشخص کننده تعداد ستون و سطر LCD می باشد که می تواند یکی از موارد زیر باشد:
16x2 یا 16x1 یا 16x1a یا 16x4 یا 20x2 یا 20x4 یا 40x4 وغیره....مثال:
Config Lcd = 16 * 2
"Lcd "hello
End
دستورات مربوط به LCD
دستور LCD
این دستور یک عبارت ثابت یا متغیر را روی LCD نمایش می دهد.
"LCD X ; LCD "STRING
در این دستور X متغیر و STRING ثابتی است که نمایش داده می شود.همچنین همانطور که عبارت بالا مشاهده می شود برای نمایش چند عبارت پشت سر هم بین آن ها علامت{;} استفاده می شود.
دستور CLS
این دستور باعث پاک شدن کل صفحه می شود.
"LCD"HELLO
CLS
دستور CURSOR
این دستور مکان نمای LCD را تنظیم می کند.
CURSOR ON/OFF BLINK/NOBLINK
که در این دستور ON روشن بودن مکان نما راتنظیم می کند و در حالت روشن چشمک زدن آن را نیز توسط BLINK می توان فعال کرد و OFF خاموش بودن مکان نما یا با حالت OFF NOBLINK خاموش بودن حالت چشمک زدن آن را تنظیم کرد.
دستور HOME
این دستور مکان نما را به ترتیب در اولین ستون سطر اول،سطر دوم،سطر سوم یا سطر چهارم قرار می دهد.
HOME U / L / T / F
دستور HOME به تنهایی باعث انتقال مکان نما به سطر و ستون اول می شود.
دستور DISPLAY
این دستور صفحه نمایش LCD را خاموش (OFF) یا روشن (ON) می کند.
DISPLAY ON / OFF
دستور SHIFT CURSOR
این دستور مکان نما LCD را یک واحد به چپ یا راست منتقل می کند.
SHIFTCURSOR LEFT / RIGHT
دستور SHIFTLCD
این دستور کل صفحه نمایش LCD را یک واحد به چپ یا راست منتقل می کند.
SHIFTLCD LEFT / RIGHT
دستور LOCATE
این دستور مکان نمای LCD را به مکانی به سطر(X) و ستون (Y)منتقل می کند.
LOCATE X , Y
دستور LOWERLINE
این دستور مکان نما را به خط پایین تر می برد.
دستور UPPERLINE
این دستور مکان نما را به خط بالاتر می برد.
فعلاً BYE ![]()
با سلام خدمت دوستان خوبم
امیدوارم که حاله همه شما خوب باشه و از مطالب پست قبل استفاده لازم رو کرده باشین.البته تا اونجایی که من اطلاع دارم وبلاگ های دیگری هم در این زمینه فعالیت می کنند و شاید تا اینجا که من برای شما توضیح دادم توضیح داده باشند ولی به هر حال چون تابستونه و من هم بیکارم قصد دارم که وبلاگ رو خیلی زود به زود آپدیت کنم البته اگه پول کارت اینترنت داشته باشم
خوب راستی دوستان این رو هم بگم که اصل کار آموزش تبادل نظر و سوال است البته شما که استاد ما هستین ولی بد نیست اگه سوالی براتون پیش میاد که میاد
مطرح کنید میریم سر آموزش امروزمون:
دستور LCASE
این دستور تمام حروف رشته تعیین شده را تبدیل به حروف کوچک می کند.
(Target=Lcase(source
که source رشته مورد نظر است که به حروف کوچک تبدیل و در رشته Target قرار می گیرد.مثال:
Dim P As String * 12 , H As String * 12
"P = "FARZAN SHOJAEE
(H = Lcase(p
"Lcd H 'lcd"farzan shojaee
End
دستور UCASE
این دستور تمام حروف رشته تعیین شده را تبدیل به حروف بزرگ می کند.
(Target=Ucase(source
که source رشته مورد نظر است که به حروف بزرگ تبدیل و در رشته Target قرار می گیرد.مثال:
Dim P As String * 12 , H As String * 12
"P = "in the name of god
(H = Ucase(p
"Lcd H 'lcd"IN THE NAME OF GOD
End
دستور LEN
این دستور تعداد کارکترهای یک رشته را حساب کرده و در متغیر VAR قرار می دهد که تعداد کارکترهای آن همان طول رشته است.
(var=LEN(string
طول رشته string در متغیر var قرار می گیرد.رشته string می تواند حداکثر 255 بایت طول داشته باشد به این نکته نیز باید توجه داشت که فضای خالی خود یک کاراکتر محسوب می شود.مثال:
Dim A As String * 12 , B As Byte
"A = "god
(B = Len(a
Lcd B 'lcd 3
"A = "lo v e
(B = Len(a
Lcd B 'lcd 6
End
همانطور که دیدید کلمه love چهار کاراکتر طول دارد که با دو فاصله بین حروف آن 6 کاراکتر می شود.
دستور swap
این دستور محتوای دو متغیر var1 و var2 را با هم عوض می کند.یعنی محتوای متغیر var1 را در متغیر var2 ومحتوای متغیر var2 را در متغیر var1 می ریزد.
نکته: دو متغیر باید از یک نوع داده تغریف شوند.مثال:
Dim A As Byte , B As Byte
A = 20 : B = 35
Swap A , B
Lcd A 'lcd 35
Lcd B 'lcd 20
End
دستور space
از این دستور برای ایجاد فضای خالی استفاده می شود که x تعداد فضای خالی است که به عنوان رشته در متغیر var قرار می گیرد.
(var=space(x
مثال:
Dim A As String * 10
A = Space(4)
Lcd "{" ; S ; "}" '{ }4 space
End
دستور LTRIM
این دستور فضای خالی یک رشته را از سمت چپ حذف می کند که STRING رشته ای است که فضای خالی آن برداشته می شود و رشته بدون فضای خالی در متغیر VAR قرار می گیرد.مثال:
Dim A As String * 10 , B As String * 10
"A = " AB
(B = Ltrim(a
"Lcd B 'LCD"AB
End
خوب دوستان فکر می کنم برای این جلسه دیگه کافی باشه امیدوارم که مطالب این پست به دردتون بخوره
اگه در زمینه دستورات بالا مشکل یا سوالی داشتید می تونید تو قسمت نظرات بنویسید.
ازدوستانی که این مطالب براشون پیش پا افتاده بود عذر خواهی می کنم زمن نوید این که مطالب پست های بعدی به تدریج حرف ای تر و در حد شما عزیزان خواهد بود. ![]()
با نام و یاد خدا اولین پست این وبلاگ رو شروع می کنم که امیدوارم با یاری شما دوستان بتوانم مطالب را هرچه بیشتر پربارتر کنم.
برای شروع برنامه نویسی avr باید یک محیط برنامه نویسی را انتخاب کرده و با استفاده از امکانات آن میکرو مورد نظر خود را برنامه نویسی کنید. نرم افزارهای مختلفی در این زمینه وجود دارند که از آن جمله می توان نرم افزار bascom (که به زبان بیسیک است)و avr studio (که به زبان c ) و codvision (که به زبان اسملی است را نام برد که به دلیل سهولت در برنامه نویسی به زبان بیسیک این محیط برنامه نویسی یعنی bascom را انتخاب کرده و چگونگی برنامه نویسی در این محیط را توضیح می دهیم.
معرفی میکرو
برای شروع یک برنامه در این محیط در ابتدا باید میکرو مورد نظر خود را معرفی کنید که این کار با دستور زیر انجام می شود.
regfile=var$
var نام میکرو مورد نظر است که می تواند یکی از موارد زیر باشد:
مدل avr یا مدل atmega یا مدل atiny مثال:
معرفی کریستال
برای مشخص کردن فرکانس کریستال مورد استفاده از دستو زیر استفاده می کنیم.
crystal=x$
x فرکانس کریستال بر حسب هرتز است.
crystal=8000000$
اسمبلی(اختیاری)
برای نوشتن به زبان اسمبلی در میان بیسیک می توان از این دستور استفاده کرد.
ASM$
assembly programme
ENDASM$
با این دستور می توان در بین برنامه بیسیک به نوشتن برنامه اسمبلی پرداخت و پس از اتمام برنامه با دستور endasm$ برنامه اسمبلی تمام شده و به نوشتن به زبان بیسیک پرداخت.
یادداشت(اختیاری)
گاهی نیاز دارید در برنامه خود یادداشت هایی را اضافه کنید در اینصورت از( ' ) یا Rem در برنامه خود استفاده می کنید به این صورت که ابتدا این علامت ( ' )را گذاشته سپس توضیح خود را بعد از آن ذکر می کنیم. توضیحات بعد از این علامت در برنامه بی اثر بوده و کامپایل نمی شوند و به رنگ سبز در می آیند.مثال:
config lcd=2*16 ' we use lcd with 16 and 2 chracter
شاید برای شما این سوال پیش بیاید که کلمه (کامپایل) که در بالا به آن اشاره شد چیست؟ تمامی میکروکنترلر ها و عموماً کامپیوتر ها از سیستم مبنای دو اعداد یا همان باینری استفاده می کنند که این ماشین ها به جز 0 و 1 چیز دیگری نمی فهمند بنابراین در هر محیط برنامه نویسی بعد از نوشتن برنامه باید آن را به زبان ماشین یا همان 0 و 1 تبدیل کرد که به این عملیات کامپایل کردن می گویند.
پایان برنامه END
این دستور در انتهای تمامی برنامه های شما قرار می گیرد که با این دستوربرنامه به پایان رسیده و خاتمه می یابد.
تعریف متغیر
با این دستور می توان متغیر های به کار برده شده در برنامه را تعریف کرد.
DIM var AS [xram/sram/eram] data type[at location]0
به عنوان توضیح باید بگم که در کل در دستورات هر عبارتی که داخل آکولاد [] باشد اختیاری است و لزومی به نوشتن آن نیست.
var نام متغیر به کار برده شده در برنامه است.گزینه اختیاری xram را برای استفده از حافظه جانبی استفاده کنید و استفاده از گزینه اختیاری sram متغیر را در حافظه sram قرار می دهد و استفاده از گزینه اختیاری eram متغیر مورد نظر را در EEPROM داخلی جای می دهد. data type نوع متغیر است که می تواند طبق جدول زیر bit,byte,integer,long,word,string, یا single باشد. در صورتی که متغیر خود را از نوع داده string تعریف کردید باید بیشترین طول آن را نیز ذکر کنید.
|
value range |
stores as |
data type |
|
0 1OR |
A BIT |
BIT |
|
0TO 255 |
UNSIGNED 8-BITS |
BYTE |
|
32767TO32767- |
SIGNED 16-BITS |
INTEGER |
|
0TO 65535 |
UNSIGNED 16-BIT |
WORD |
|
2147483648TO 214783647 - |
SIGNED 32-BITS |
LONG |
|
|
SIGNED 32-BITS |
SINGLE |
|
- |
0-254 BYTES |
STRING |
متغیر STRING به طول 15 کاراکتر DIM F AS STRING*15
گزینه اختیاری AT LOCATION به منظورذخیره کردن متغیر در آدرس دلخواه حافظه به کار می رود. مثال:
DIM B1 AS BYTE AT 120
دستور ALIAS
از این دستور برای تغییر اسم متغیر استفاده می شود.مثال:
Ld ALIAS PORTA.4
SET Ld '=SET PORTA.4
دستور INCR
این دستور یک واحد به متغیر VAR می افزاید.
INCR VAR
مثال:
A=0
INCR A:PRINT A 'A=1
دستور DECR
این دستور از متغیر VAR یک واحد می کاهد.
DECR VAR
مثال:
DIM D AS BYTE
D=6
DECR D: PRINT D 'D=5
خوب دوستان فکر می کنم که برای جلسه اول خیلی طولانی شد اما به شما دوستان توصیه می کنم که اگر می خوهید درست وحسابی میکروکنترلر را بیاموزید ابتدا نرم افزار BASCOM را تهیه کنید و سپس یک پروگرمر STK200/300 بخرید(قیمتی نداره)
و از جلسات بعد که آموزش ها حرفه ای تر شد و در هر پست یک پروژه داشتیم اونو شما هم بتونید انجام بدید واز نتیجه لذت ببرید.
قربانه شما فرزان![]()


