واقعا باور کردنی نیست در همین مدت کم که شروع به نوشتن وبلاگ کردم بالغ بر ۱۰۰ نفر از سراسر ایران تماس گرفته اند و ما را شرمنده کردند.
برای شما عزیزان چند خبر داشتم:
۱- از این به بعد می تونید از آدرس زیر به سایت وارد شوید:
۲-نویسندگان این سایت دو نفر هستند:
فرزان شجاعی
که ان شاالله کنکورش رو با موفقیت می ده و دوباره به جمع ما اضافه می شه
یحیی حسن زاده
که بنده هستم و دانشجوی مهندسی برق دانشگاه فردوسی مشهد می باشم
۳-شماره تلفن من (یحیی حسن زاده) ۰۹۱۵۳۱۱۴۴۱۷ است و در هر ساعتی از شبانه روز می تونید بامن تماس بگیرید
۴-در تابستان و از ۱ مرداد سایت روزهای شنبه و چهارشنبه آپ دیت می شه
۵-برای باخبر شدن از آپ دیت سایت و عضویت در سایت در خبر نامه که سمت راست همین صفحه است عضو شوید
به امید دیدار
یحیی حسن زاده
دوستان خوبم واقعاً از همتون به خاطر اين غيبت هاي طولاني عذر مي خواهم و دليل اون هم مشكل بزرگي است به نام «كنكور» البته اين دليلي بر مشروعيت اين غيبت ها نمي شود چون زكات علم آموختن آن است.اين رو هم نگفتم كه بخوام بگم خيلي عالمم نه! اما حداقل چند تا چيزي رو كه بلدم به چهار تا جوون هدفمند ايراني ياد ميدم.آره اگه شما ها هدفمند نبوديد الان در حال مطالعه اين مطالب نبوديد.
شما هم دعا كنيد برام شايد با دعاي شما و همت خودم بتونم اونجايي كه دوست دارم قبول شم. من هم نهايتش تا ۴ مرداد كه كنكورم رو بدم درگيرم بعد از اون إن شاء الله يه تكون مشتي به وبلاگم ميدم.
دست علي يارتون.«وعده ما إن شاء الله بعد از كنكور! برام دعا كنيد.»
امروز می خواستم نرم افزار بسکام رو توضیح بدم ولی چون یکی از دوستان از سقز زنگ زدند و خواستند که نحوه ساختن پروگرامر رو براشون توضیح بدم تصمیم گرفتم که در این جلسه فقط راجع به پروگرامر صحبت کنم.
تعریف پروگرامر:خب اول باید بدونیم که یک پروگرامر چیه؟
یک پروگرامر یک قطعه سخت افزاری که شما می تونید به وسیله ی اون برنامه ای رو که نوشتید روی میکروتون قرار بدین و حالشو ببرین!
ساده ترین نوع پروگرامر نوع 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 د
