X
تبلیغات
آموزش میکروکنترلر avr
آموزش میکروکنترلر avr به منظور افزایش اطلاعات الکترونیکی

دوستان گلم دوباره سلام. ان شاء الله که همگی خوب باشید و امتحانات رو هم همه رو پاس کرده باشید. ببخشید یه چند روزی دیر شد آخه منم درگیر درس و امتحان بودم. خوب قرار بود که تو این پست راجع به جدول Look Up مربوط به صفحه کلید 4*3 که تو پست قبلی استفاده کردیم و یه نمه در مورد سخت افزار مدار توضیح بدم. پس بریم سر اصل مطلب:

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


ادامه مطلب
+ نوشته شده در  شنبه دهم بهمن 1388ساعت 16:38  توسط فرزان شجاعی  | 

سلام به تمام دوستان گلم. امیدوارم که همگی خوب باشید. فکر کنم این اولین پروژه عملی باشه که دارم رو وبلاگ میزارم. اما مطمئن باشید که آخریش نیست. خوب عارضم به خدمت شما که توی این پروژه که اینجا براتون گذاشتم ما یه قفل رمز رو داریم که کد پیش فرض اون ۱۲۳۴۵۶ است و دفعه اول که مدار روشن میشه این کد رو از شما میخواد. اما شما میتونید بعد از این هر رمزی رو که دلتون خواست جایگزین اون کنید و .........


ادامه مطلب
+ نوشته شده در  جمعه بیست و پنجم دی 1388ساعت 23:24  توسط فرزان شجاعی  | 

دوستان گلم سلام:
دوستان عزیز قبل از هر چیزی می خواستم بگم که من توی گفت و گویی با چندی از خوانندگان داشتم به این نکته رسیدیم که یه مقداری از اینکه چطوری یه مدار رو طراحی کنیم نیز صحبت کنیم و اینکه بیشتر رو مثال های عملی و طراحی مدار مانور بدیم. ضمن اینکه نوید این رو بدم که وبلاگ به زودی شکل تازه ای به خودش میگیره و تو پست بعدی هم حتماً مثال های عملی آورده خواهد شد.

خوب. اما بریم سر اصل مطلب، برای مقدمات کار شما در ابتدا به یک کامپایلر بیسیک که یکی از قوی ترین نسخه های اون Bascom Avr هست که فکر کنم جدیدترین ورژن اون Version 1.11.9.8  باشه که شما میتونیدنسخه دمو این نرم افزار رو به صورت رایگان از سایت http://www.mcselec.com دانلود کنید که البته نسخه دمو نسخه محدود شده است که فقط حجم محدودی کد رو کامپایل می کنه


ادامه مطلب
+ نوشته شده در  یکشنبه بیستم دی 1388ساعت 15:2  توسط فرزان شجاعی  | 
سلام به همه دوستان عزیزم:
این مدار برای اونایی که ماهنامه الکترونیک مطالعه کردند آشناست. اما در نقشه چاپ شده در ماهنامه الکترونیک توسط شرکت کانون الکترونیک یک سری ولوم های مربوط به تنظیم و زمان بندی تایمر ها از جمله عرض پالس و پالس تاخیر(Delay Time ) که میتوانند در تنظیم نهایی و بهره وری مدار بسیار مفید باشند( اونایی که دنبال تفکیک هستند می دونن من چی میگم)، به عمد یا سهو از قلم نگارنده افتاده است.
درج این مطلب صرفاً به خاطر بعد آموزشی بوده و هرگونه استفاده غیر مجاز به عهده سازنده خواهد بود.

R1    110    All resistors listed here are 1/4 watt, metal film types.
R2    750
R3    47K
R4    47K
R5    5K1
R6    4K7
R7    3K3 or 1K8
R8    68K
R9    1K5
R10   68K
R11   150
R12   680
R13   150
R14   680
R15   1k5 ("J1" on the schematic) Use for Single coil design. Do not use R16
R16   470 ("J2" on the schematic)  Use for Dual Coil design. Do not use R15
R17   470
R18   680
R19   10K
R20   330
R21   820
R22   47K
R23   220
R24   1K
R25   1M5
R26   51K
R27   51K
R28   2K2
R29   2K2
R30   18K
R31   8K2 or 220 ohms for Expanded Meter
R32  470K
R33   68K
R34   1K2 for Expanded Meter.

VR1   25K  Phier PT10V Trimpot (DC Offset for IC9) Vertical Adjust style.
VR2   50K  DC Offset for IC10 (Beep Null)
VR3   1K   Volume
VR4   5K   Meter Zero
VR5   Optional Pulse Width Control (10K) This is "R5A" on the Schematic.
VR6   Optional Dead Time Control (5K)    This is "R7A" on the Schematic.
VR7   Optional Recieve Time Control (5K) This is "R9A" on the Schematic.


S1     Optional Rotary Switch, Your Choice on Positions.


C1      1 uF tant.  @ 25 volts Min.
C2     4.7 to 10 uF Tant.  @ 10 Volts Min.
C3     4.7 to 10 uF. tant. @ 10 Volts Min.
C4     10 uF. Tant. @ 25 Volts Min.
C5    100 uF. Electrolytic @ 25 Volts
C6      1 uF. Tant. @ 10 Volts Min.
C7      1 uF. Tant. @ 10 Volts Min.
C8      4.7 to 10 uF. Tant. @ 10 Volts Min.
C9      1 uF. Tant. @ 10 volts Min.
C10     1 uF. Tant  @ 10 Volts Min.
C11     .1 uF Metalized Polyester Film Cap.
        NOTE: If you use the Optional Frequency Control Switch
        and Capacitors "C11a to C11e", Than OMIT C11.
C11a    These Values are Your Choice, Metalized Polyester Film Caps.
C11b    These Values are Your Choice, Metalized Polyester Film Caps.
C11c    These Values are Your Choice, Metalized Polyester Film Caps.
C11d    These Values are Your Choice, Metalized Polyester Film Caps.
C11e    These Values are Your Choice, Metalized Polyester Film Caps.
C12      .01 @ 100 Volts     "
C13      .01     "           "
C14      .01     "           "
C15      .001    "           "
C16      .01     "           "
C17      .0047   "           "
C18     4.7 to 10 Mfd. Tant. @ 10 Volts Min.
C19      47 or 100 Pf disk, depending on your requirements.
C20      .01  @ 100 Volts  Metalized Polyester Film Caps.
C21      .01     "           "
C22      47 or 100 pf Disk, depending on your requirements.
C25      .1 @ 63 Volts     Metalized Polyester Film Caps.
C26      .1       "
C27    22 uF Electrolytic @ 10 Volts
C28      .1  @ 63 Volts    Metalized Polyester Film Caps.
C29      .01 @ 63 Volts       "         "       "    "
C30      .22 or .18 @ 63 volts "        "       "    "
C31     4.7 to 10 uF. Tant. @ 10 Volts Min.
C33     4.7 to 10 uF. Tant. @ 10 Volts Min.
C34   470 uF. Electrolytic @ 10 Volt Min.

             
D1     1N4937 "High Speed diode."
D2     1N4937 "High Speed diode."
D3     1N4148 or 1N914
D4     1N4148 or 1N914
D5     1N4148 or 1N914
D6     1N4148 or 1N914
D7     1N4148 or 1N914
D8     1N4148 or 1N914
D9     1N4148 or 1N914 for Expanded Meter
D10    1N4148 or 1N914 for Expanded Meter


IC Sockets 8 each, 8 pin dips. Highly Recommended.


IC1    REG-1117A-adj (Surface mount "SOT-223" Package. Mounts on copper side.)
       OR a MC33269ST-ADJ  ("SOT-223 Package" Adjustable version.)
       On Both these IC's, it is Not Recommended that you solder the Centre Lead.
       Just solder the Two Outside leads and the Heat Tab.

IC2    LT1054-CN8 -(8 pin dip) "Substitute a ICL7660ACPA", it is much cheaper)
       ICL7660.....SEE NOTE AT BOTTOM!
IC3    78L05   T0-92 pkg.
IC4    79L05   T0-92 pkg.
IC5    555     8 pin dip  (C-mos version is acceptable)
IC6    555     8 pin dip  (C-mos version is acceptable)
IC7    555     8 pin dip  (C-mos version is acceptable)
IC8    555     8 pin dip  (C-mos version is acceptable)
IC9    TL081 or TL071  8 pin dip
IC10   TL081 or TL071  8 pin dip
IC11   555     8 pin dip  (C-mos version is acceptable)


Q1     IRF640 or IRF740 (You can cut off heat tab if you wish to reduce height.)
Q2     IRF640 or IRF740 (You can cut off heat tab if you wish to reduce height.)
Q3     2N3819 or 2SK30A(Check PINOUT, Before Installing)
Q4     2N4125 or 2N3906 or almost any PNP type signal transistor will work.


M1     200 Ua. Meter (or 100 Ua. or 50 Ua., But you need to change R31
       to double or 4 times the value)
       For Extreme sensitivity, use a 200 Ua. Digital Panal Meter.
       "This gives very accurate low level detection!"


SPKR   Any speaker or headphones with a "Good Low Frequency Response".
       For stereo headphones use "tip to tip" connection, leave ground open.


LI     Aprox 40 turns @ 6" OD, 30 Turns @ 8" OD, 25 Turns @ 12" OD. square,
       round, Or Whatever! I recommend around 20 AWG Wire (.032" or .8mm)
L2     Same as L1 if used!
       See other Write-ups on the coils and coil forms!


BI     12 Volt, 1.2 AH Sealed Lead Acid Battery, Or Whatever at 12 Volts!
       DO NOT operate this unit at a supply voltage of less than 11 volts
       when calibrating unit, and Operating voltage must be greater than 10.5
       volts, or unit becomes unstable in use.

 


ادامه مطلب
+ نوشته شده در  جمعه یازدهم دی 1388ساعت 14:17  توسط فرزان شجاعی  | 

با عرض سلام و تسلیت به مناسبت ایام سوگواری سالار شهیدان حسین:

دوستان عزیزم می دونم که خیلی وقته که وبلاگ آبدیت نشده و خیلی ها از دست من ناراحت هستند ولی خیلی دوست دارم که بدون هیچ عذر و بهانه ای دوباره کارم رو شروع کنم و تضمین می کنم که از این تاریخ به بعد سایت هر دو هفته یک بار سه شنبه ها آبدیت خواهد شد.(زودتر از دوهفته بشه دیر تر نمیشه) و برای عذر خواهی حاضرم به تمامی دوستانی که در زمینه میکرو و برنامه نویسی و انجام پروژه و روباتیک و ساخت فلزیاب و.... تا اونجایی که از دستم بر بیاد کمک کنم(البته من که واقعاْ تو اقیانوس الکترونیک اتم هم نیستم و این گفته من نه از سر خود ستاییه و منتی هم نیست)
و این شماره تلفن منه:Tel: 0932-9055012 و آخر ترم هم که هست و پروژه های آخر ترم.

خوب دوستان گلم ما برای انجام پروژه تو الکترونیک چند راه داریم. یکی اینکه مداراتمون رو به صورت کلاسیک طراحی کنیم. یعنی اینکه بیایم با المان های الکترونیکی مثل ترانزیستور و خازن و غیره یه مدار آنالوگ طراحی کنیم. شایان ذکره که حتی پروژه های دیجیتال رو هم می شه اینجوری پیاده کرد. اما این روش هم معایبی داره و هم مزایایی. از مزایاش اینه که بیشتر درگیر کار می شی و نیاز به علم داره و هر چه بیشتر از این کارا انجام بدی هم بار علمی شما می بره بالا و هم عملی. از معایبش هم اینه که این روش هم وقت گیره هم هزینه بره هم مدارتون خیلی حجیم میشه و هم خیلی روش منسوخ شده ای است.
یکی دیگه اینکه بخوایم تا اونجایی که میشه مداراتمون رو با گیت های منطقی پیاده کنیم(همه مدارات آنالوگ رو هم نمیشه به صورت دیجیتالی طراحی کرد) و برای این کار شما باید با انواع گیت های منطقی و طراحی دیجیتال و ساده سازی جبری و جدول کارنو و غیره و غیره(خلاصه یه مدار منطقی پاس کرده باشید) آشنا باشید و وقتی که طراحی پروژتون تموم شد و خواستید که اجراش کنید دو تا راه دارید: یکی اینکه با آی سی های سری CMOS و TTL که بسته به شمارشون حاوی تعدادی گیت های منطقی هستند کار رو اجرا کنید یا اینکه با FPGA ها که آی سی هایی هستند که حاوی هزاران گیت منطقی از انواع و اقسام هستند و باید توسط نرم افزار هایی و از طریق کامپیوتر پروگرم شوند استفاده کنید. که در صورت استفاده از آی سی های CMOS و TTL باز هم شما با یک مدار بزرگ و شلوغ پلوغ مواجهید و در صورت استفاده از FPGA ها نیاز به دانش فنی بالا و آشنایی با زبان های توصیف سخت افزاری مثل VHDL دارید که برای انجام پروژه های معمولی(منظورم همه پروژه ها غیر از فوق حرفه ای هاست) به هزینه و دردسرش نمی ارزه.
اما راه بعدی که خوب میشه از یه سری دیدگاه ها گفت که از بقیه نسبتاْ بهتره استفاده از میکرو کنترلر هاست. در واقع میکرو قطعه ایه که از یه پردازنده که به نوعی هسته اصلی اونه و تعدادی مدارات جانبی از جمله حافظه های پاک شدنی RAM و ماندگار EEPROM و تعدادی تایمر و کانتر و مبدل آنالوگ به دیجیتال و رابط های سریال مثل SPI , USART ,I2C , 1WIRE و تعدادی پورت های ورودی خروجی برای ارتباط با محیط پیرامون و یک حافظه Flash برای ذخیره برنامه و غیره در یک آی سی واحد تشکیل شده.
میکروکنترلر های زیادی هم در بازار وجود داره مثل PIC , 8051 , ARM , AVR و ... که خود من به شخصه AVR را نسبت به بقیه ارجح تر می دونم(البته اینم بگم که ARM از AVR خیلی قوی تره اما خوب هم از نظر قیمت و طراحی مدار AVR بهتره.چون ARM ها فقط در غالب SMD ارائه میشن.)

پس میکرو کنترلر چیزیه که یک برنامه ذخیره شده در حافظه FLASH خودش رو از طریق پردازندش یعنی CPU و کمک امکانات جانبیش اجرا میکنه؟ خوب حالا سوال اینه که ما چطوری به میکروکنترلر زبون نفهم(می دونید که کامپیوتر ها ابله ترین چیز ها هستند چون هیچ اراده ای از خودشون ندارند) بفهمونیم که چه کاری برای ما انجام بده؟ اول اینو بگم که ما توی دنیای دیجیتال فقط با مفاهیم صفر و یک منطقی سر و کار داریم و عناصر دیجیتال از جمله میکرو ها هیچ چیز جز صفر و یک نمی فهمند. بنابراین برنامه ای که از حافظه FLASH خونده می شن و اجرا می شن چیزی جز صفر و یک ها نیستند. اما نوشتن برنامه ای از صفر و یک ها برای انجام یک کار مشخص خیلی سخته! به این منظور زبان های برنامه نویسی ساخته شدند که به زبان گفتار انسان نزدیک ترند و  برنامه نویسی به این زبان ها در نهایت توسط نرم افزار هایی که به آن ها Compiler (کامپایلر) می گویند به همان صفر و یک ها تبدیل خواهند شد.
و زبان های برنامه نویسی میکرو ها نیز بسیار متعددند که ما نیز بنا به سادگی و قدرت بالای زبان Basic از آن برای آموزش Avr استفاده می کنیم.

بنابراین شما برای شروع کار علمی و عملی با Avr در ابتدا نیاز به یک نرم افزار Bascom Avr دارید که می تونید یا از فروشگاه های قطعات الکترونیک یا از اینترنت جدیدترین نسخه آن را بدست بیارید. همچنین به نرم افزار Proteus که یک شبیه ساز مدارات الکترونیکی است هم نیاز دارید و قدم بعدی خریدن یک پروگمر Avr که این روزا قیمتی هم نداره و یه بِرد بُرد و یه سری خرده ریز دیگه نیاز دارید.
این پست رو بیشتر برای آشتی کنون با دوستان و آشنایی مبتدیان با میکرو دادم.

قربون همتون برم «فرزان شجاعی»

+ نوشته شده در  چهارشنبه نهم دی 1388ساعت 0:15  توسط فرزان شجاعی  | 
با عرض سلام خدمت تمام دوستان

واقعا باور کردنی نیست در همین مدت کم که شروع به نوشتن وبلاگ کردم بالغ بر ۱۰۰ نفر از سراسر ایران تماس گرفته اند و ما را شرمنده کردند.

برای شما عزیزان چند خبر داشتم:

۱- از این به بعد می تونید از آدرس زیر به سایت وارد شوید:

www.iranavr.coo.ir

۲-نویسندگان این سایت دو نفر هستند:

فرزان شجاعی

که ان شاالله کنکورش رو با موفقیت می ده و دوباره به جمع ما اضافه می شه

یحیی حسن زاده

که بنده هستم و دانشجوی مهندسی برق دانشگاه فردوسی مشهد می باشم

۳-شماره تلفن من (یحیی حسن زاده) ۰۹۱۵۳۱۱۴۴۱۷ است و در هر ساعتی از شبانه روز می تونید بامن تماس بگیرید

۴-در تابستان و از ۱ مرداد سایت روزهای شنبه و چهارشنبه آپ دیت می شه

۵-برای باخبر شدن از آپ دیت سایت و عضویت در سایت در خبر نامه که سمت راست همین صفحه است عضو شوید

 

به امید دیدار

یحیی حسن زاده

+ نوشته شده در  پنجشنبه بیست و هفتم تیر 1387ساعت 10:29  توسط فرزان شجاعی  | 
با عرض سلام و ادب خدمت تمامي شما دوستان خوبم، تمامي اميد فرداي ايران زمين:

دوستان خوبم واقعاً از همتون به خاطر اين غيبت هاي طولاني عذر مي خواهم و دليل اون هم مشكل بزرگي است به نام «كنكور» البته اين دليلي بر مشروعيت اين غيبت ها نمي شود چون زكات علم آموختن آن است.اين رو هم نگفتم كه بخوام بگم خيلي عالمم نه! اما حداقل چند تا چيزي رو كه بلدم به چهار تا جوون هدفمند ايراني ياد ميدم.آره اگه شما ها هدفمند نبوديد الان در حال مطالعه اين مطالب نبوديد.

شما هم دعا كنيد برام شايد با دعاي شما و همت خودم بتونم اونجايي كه دوست دارم قبول شم. من هم نهايتش تا ۴ مرداد كه كنكورم رو بدم درگيرم بعد از اون إن شاء الله يه تكون مشتي به وبلاگم ميدم.

دست علي يارتون.«وعده ما إن شاء الله بعد از كنكور! برام دعا كنيد.»  

+ نوشته شده در  سه شنبه بیست و هشتم خرداد 1387ساعت 22:57  توسط فرزان شجاعی  | 
سلام عرض می کنم خدمت دوستان امیدوارم حال همتون خوب باشه !

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

تعریف پروگرامر:خب اول باید بدونیم که یک پروگرامر چیه؟

یک پروگرامر یک قطعه سخت افزاری که شما می تونید به وسیله ی اون برنامه ای رو که نوشتید روی میکروتون قرار بدین و حالشو ببرین!

ساده ترین نوع پروگرامر نوع STK 200/300است که در این پست آموزش اونو می دم .

برای ساختن این پروگرامر به قطعات زیر نیاز دارید:

  1. یک عدد سوکت ۲۵ پین، پورت Parallel یا موازی کامپوتر (از نوع نر)
  2. یک عدد قاب سوکت ذکر شده در صورت تمایل
  3. سیم فلت ده تایی
  4. یک عدد پایه محافظ میکرو ۴۰ پایه پیشنهاد من یه زیف 40 تای است
  5. یک عدد میکروکنترلر AVR. پیشنهاد من از نوع ATmega32L/32 هستش.
  6. سایر موارد لازم مثل هویه، سیم قلع، فیبرمدار و....

خب در واقع در تصویر بالا در سمت راست میکرو و در سمت چپ پورت قرار داره

اما مراحل کار:

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-امکان خرید پروگرامر به صورت آن لاین وجود دارد در لینک زیر یکی از سایت های رباتیک قرار داده شده است که پروگرامر های خوبی را عرضه می کند و شیوه خرید هم به این صورت است که شما سفارش را می دهید و سفارش درب منزل شما تحویل داده می شود و پول هم آنجا دریافت می شود. این سایت هیچ ارتباطی به ما ندارد ولی ما برای رفاه شما دوستان لینک آنرا قرار دادیم تا از آن استفاده کنید.

خرید پروگرامر به صورت آنلاین

+ نوشته شده در  سه شنبه هفدهم اردیبهشت 1387ساعت 22:55  توسط فرزان شجاعی  | 
سلام دوستان از همه تون عذر می خوام اگه یه وقت دیر کردم اما یه دلیل داشت :

کار گلچین فلک گرچه همه یغما بود

لیکن این بار گلی چید که بی همتا بود

خاموش ای دل که به غمناک  ترین واژه شعر

غم او را نتوان گفت چه جان فرسا بود

 

 

مادر بزرگ به دیدار خدا رفت!

باز هم از تمام دوستان عذر می خواهم ان شا الله در اولین فرصت شروع می کنم اگر سوالی در مورد میکرو داشتید در خدمتم:

۰۹۱۵۳۱۱۴۴۱۷

یحیی حسن زاده

+ نوشته شده در  چهارشنبه یازدهم اردیبهشت 1387ساعت 22:34  توسط فرزان شجاعی  | 
سلام دوستان یه کم تاخیر داشتم عذر می خوام ولی شما هم که مطالب رو می خونین و نظر هم که نمی دین!حالا از اینا بگذریم به ادامه مطلب برسیم داشتیم در مورد mega 32و پایه های اون توضیح می دادیم.میرسیم به بخش ورودی و خروجی.

بخش ورودی و خروجی

در این بخش چهار پورت به نام های 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 کانال با چندین برنامه رو میدم!

+ نوشته شده در  شنبه بیست و چهارم فروردین 1387ساعت 21:48  توسط فرزان شجاعی  | 

حماسه بسازیم !

سلام دوستان گرامی !

حتما شما هم ماجرای خلیج فارس رو که می خواهند به زور بکننش خلیج عربی شنیدید

سایت گوگل اعلام کرده که اگه ۱۰۰۰۰۰۰(یک میلیون)نفر امضا بدن برای همیشه  بیخیال خلیج عربی میشه و اسم خلیج همیشه فارس رو ثبت می کنه من اینکار رو کردم کار بسیار ساده ای است و در مجموع ۱ دقیقه زمان می بره تا موقعی که من امضا دادم با من ۱۰۵۴۹۷نفر امضا دادن شما هم به عنوان یک ایرانی با کلیک بر روی لینک زیر این کار رو بکنید.

در ضمن حتما نظرات شما در این باره خوندنیه برای همین نظ رو آزاد گذاشتم و نیاز به تایید نداره!

برای دفاع از تمدن کهن ایران اینجا کلیک کنید

+ نوشته شده در  چهارشنبه بیست و یکم فروردین 1387ساعت 22:33  توسط فرزان شجاعی  | 
سلام دوستان زیاد مقدمه چینی نمی کنم و می رم سر اصل مطلب میکرو avrخودش چندین شاخه می شه که بررسی تخصصی هر کدوم از اونا خارج از حوصله است متداول ترین میکرو ها سری megaاست که دونوع mega 16 , mega32میکرو های بسیار رایجی هستند ساختمان این دو میکرو مثل هم است و فقط حافظه ی اولی 32 کیلوبایت و حافظه ی دومی 16 کیلو بایت است.

من ساختمان 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  

 

+ نوشته شده در  یکشنبه هجدهم فروردین 1387ساعت 20:22  توسط فرزان شجاعی  | 
سلام دوستان ببخشید یه کم تاخیر داشتم آخه داریم روی یه ربات مین یاب کار می کنیم برای مسابقات کشوری (برامون دعا کنید) امروز اومدم یه چیزی دانلود کنم که دیدم یکی از دوستان به شدت مارو مورد لطف قرار دادند و طی در خواستی که جلسه قبل کردم در مورد میکرو های pichاطلاعات خوبی در ختیار گذاشتن نظر ایشون در بخش نظرات جلسه قبل به ثبت رسیده ولی حیفم اومد به عنوان یه ویژه نامه قرارش ندم :

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

جلسه سوم 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

 

+ نوشته شده در  جمعه شانزدهم فروردین 1387ساعت 12:22  توسط فرزان شجاعی  | 
سلام خدمت همه ی دوستان عزیزم نوروز باستانی را از مهد تمدن ایران عزیز به شما تبریک میگم و امیدوارم همیشه شاد باشید.

امروز وقتی به سایت googleرفتم دیدم یه لوگوی قشنگ به مناسبت نوروز ما گذاشته حیفم اومد تو اولین پستم تو سال 87 این لوگو رو نذارم :

اما از هرچه بگذریم سخن دوست خوش تره خوب تا کجا درس دادیم ؟ آها رسیدیم به انواع میکرو ها .میکرو ها سه دسته هستند:

1)8051 :اسم  این میکرو ها همینه هشتاد - پنجاه و یک و از میکرو های کهن ! هستند . (البته از میکرو هایی هستند که از زمان دانش آموزی با اونا کار کردم و یه جورایی به جوانب کارشون واردم)  ولی بدلیل امکانات برتر میکرو های AVRاز توضیح بیشتر در این زمینه جلو گیری می کنم تصویر میکرو های 8051 رو در زیر آوردم .توجه کنید برای تشخیص میکرو های 8051 از بقیه می توانید از راهکار زیر استفاده کنید.

راهکار:در میکرو های 8051 عبارت 8051 به گونه ای نوشته شده است. من در مثال های زیر ابتدا عکس میکرو را می گذارم و سپس شیوه تشخیص آنرا می گویم.

میکرو P8051AHشرکت سازنده intel دارای 40 پایه .

به عبارت p8051AH توجه کنید

میکرو SCN8051H )شرکت سازندهSignetics دارای 40 پایه

به عبارت SCN8051توجه کنید.

خب فکر می کنم برای 8051 همین دو نوع کافی باشه

2)میکرو های PIC:تلفظ این میکرو ها به صورت پیک است و بیشتر در ربات های مسیر یاب کاربرد دارند و من کاربرد بیشتری برای اونا نمی دونم ولی اگر دوستان می دانند حتما در بخش نظرات اعلام کنند.(البته نمب دونم با وجود مبکرو های خوبی مثل avr دیگه ملت با چه عقلی از این میکرو ها استفاده می کنند؟)

 

3)میکرو های avr که در این رابطه در جلسه آینده بیشتر براتون صحبت میکنم .

هرچه شما بیشتر نظر بدهید می توانم بیشتر مطالب مورد نیاز شما را بنویسم

فعلا خدانگهدار

 

+ نوشته شده در  پنجشنبه یکم فروردین 1387ساعت 19:32  توسط فرزان شجاعی  | 
سلام ! امروز می خوام بگم میکرو ها چه جوری به وجود اومدند!

خب ببینید در ابتدا تراشه های اولیه به صورت ROMبودند که مخفف Read Only Memoryاست یعنی تو کارخونه یه سری اطلاعات روی اونا می ریختن و اونا فقط با استفاده از اون اطلاعات پردازش می کردند یعنی سطح پردازش محدودی داشتند.اطلاعات روی اونا هم قابل پاک شدن یا تعویض نبود و فقط خواندنی بودند. یعنی مثلا طوری برنامه ریزی شده بودند که  اگه یک پایه ی اونا 1 شد پایه ی دیگر 0 شود ولی مثلا اگه می خواستین این عمل برعکس اجرا شود باید از یه رله استفاده می کردین .

به تدریج ملت اومدن دیدن این حافظه های ROM خیلی ضایعه ! لذا اومدن حافظه های ERom رو ساختند یعنی Eraseable ROM حافظه های که قابل برنامه ریزی بودند و می توانستید به تعداد محدودی برنامه روی آنها بنویسید ولی اینکار به وسیله ی اشعه ی فرابنفش انجام می شد به طوریکه به هنگام نوشتن یه تعداد سلول داخل تراشه را می سوزاند و به هنگام پاک کردن اونا رو باز آوری می کرد.

یواش یواش ملت دیدن که به دلیل سرطان زا بودن فرابنفش و خاصیت پرتوزایی تراشه بعد از هر بار نوشتن یا پاک کردن دهنشون داره آسفالت می شه ! لذا حافظه های EEROMرو اختراع کردند که مخفف Electricaly Erasaeble ROM یعنی حافظه با قابلیت برنامه ریزی الکترونیکی که میکرو کنترلر ها جزء این دسته می باشند .

البته حافظه های مدرن تری به نام Flashهم اختراع شد که الان برای ذخیره و حمل اطلاعات ازشون استفاده می کنیم ولی یه نوع EEROM هستند.

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

منتظر شنیدن نظرات شما عزیزان هستم می دونید که میگن مستمع صاحب سخن را بر سر ذوق آورد !

فعلا خدا نگهدار

+ نوشته شده در  سه شنبه بیست و هشتم اسفند 1386ساعت 8:51  توسط فرزان شجاعی  | 
سلام من یحیی حسن زاده هستم دانشجوی مهندسی برق دانشگاه فردوسی مشهد قرار هست در کنار فرزان جان یک دوره ی جدید رو از میکروکنترلر براتون آموزش بدیم که ایشاالله از همین فردا س فردا شروع می شه این دوره دوباره میکرو رو از صفر شروع می کنه ولی با دید مهندسی گونه تر و اساسی و علامه بر آموزش مقدماتی شامل ربات و سیستم های حفاظتی و کنترلی هم خواهد شد .

ضمنا باید بهتون بگم تمام مطالبی که آموزش می دهم اول تجربیات من در زمینه میکرو است و همه ی اونا رو بر اساس  آزمایشاتی که با میکرو انجام دادم بدست آوردم ولی اگر جایی لازم باشه از روی منبع بگم حتما اسم منبع رو هم ذکر می کنم !

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

با آروزوی موفقیت برای شما

یحیی حسن زاده

+ نوشته شده در  دوشنبه بیست و هفتم اسفند 1386ساعت 23:5  توسط فرزان شجاعی  | 

سلام عرض می کنم خدمت همه دوستای خوبم امیدوارم که خوش وخرم باشید و این غیبت طولانی منو هم ببخشید.حالا ببینم شما ها که اینقدر خوب نظر می دین چرا قبلاْ از این کارا نمی کردید!! دوستان تا اونجایی که یادمه در پست قبلی نحوه پیکربندی تایمر های میکرو را به صورت تایمر توضیح دادم و قرار شد که در این پست اونا رو به صورت کانتر پیکربندی کنیم.ببنید هر مدلی از میکروهای 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 تا نشه از پست بعد و پروژه ها خبری نیست.
شب همتون خوش.

موفق و سربلند باشید
به امید روزی که ایران هم در عرصه الکترونیک چون ستاره ای بدرخشد.

+ نوشته شده در  دوشنبه هشتم بهمن 1386ساعت 22:3  توسط فرزان شجاعی  | 

دوستان خوبم سلام:
اول از همه می خوام عذر خواهی کنم ازتون به خاطر غیبت طولانیم .ثانیاْ اینکه به امید خدا از فردا دوباره وبلاگ طبق روال قبل به روز می شه و ضمن نوید این که مطالب جدید درخور عزیزانی باشد که مطالب این وبلاگ را کم ارزش و کپی شده از کتاب می دانند.

تا فردا حق نگهدارتان

+ نوشته شده در  یکشنبه هفتم بهمن 1386ساعت 19:30  توسط فرزان شجاعی  | 

سلام به دوستان خوب و عزيزم قبل از هر چيز فرا رسيدن اين ماه مبارک رو به همه شما دوستان تبريک مي گم.و روزه نمازهاي همتون مورد قبول حق تعالي قرار بگيره.راستش مي خواهم يه گله اي بکنم از اين دوستاني که فقط مطالب رو مي خونن و نظر نمي دن  و بايد بگم اون دسته از عزيزاني که مطالب اين وبلاگ به دردشون مي خوره و مي خواهند که هر چه زودتر وبلاگ آپديت بشه بايد « توجه کرديد بايد » لطف کنن و تو قسمت نظرات نقاط قوت ، ضعف ، پيشنهادات و نظرات خودشونو رو بگن از الان گفته باشم تا قسمت نظرات اين پست حداقل ۱۰ نظر نداشته باشه از مطلب بعدي خبري نيست ها.... بعداً نگيد نگفتي.خوب از اين مسائل که بگذريم مي رسيم به پيکره بندي و استفاده از تايمر-کانترها در محيط 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 تا نظر داشته باشه تا پست بعدی رو بنویسم.

فعلاً یا حق

+ نوشته شده در  دوشنبه بیست و ششم شهریور 1386ساعت 15:13  توسط فرزان شجاعی  | 

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

خوب امروز (البته الان شبه) می خواهیم در مورد پیکره بندی امکانات 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

می گم خودمونیم دوستان الان آخر شبه منم خیلی خوابم  می آید میشه بقیشو فردا بنویسم......
آره؟ خیلی ممنون پس تا فردا..

یا حق

+ نوشته شده در  جمعه شانزدهم شهریور 1386ساعت 23:30  توسط فرزان شجاعی  | 

دوستان خوبم سلام:

راستش امروز اومده بودم که وبلاگو آپدیت کنم ولی دیدم که جمع آوری مطالب این پست خیلی کار داره منم چون داشتم می رفتم بیرون وقت نکردم که آپدیت کنم ولی به شما قول ٪۱۰۰  می دم که فردا حتماً آپدیت کنم و مطالب جالبی رو بذارم.

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

sos_love_k@yahoo.com

فعلاً یا حق

+ نوشته شده در  پنجشنبه پانزدهم شهریور 1386ساعت 14:18  توسط فرزان شجاعی  | 
سلام خدمت شما دوستان خوبامیوارم که حالتون خوب باشه.از اونجایی که دیدم قسمت نظرات با بحران روبه رو شده می خوام که دیگه وبلاگ رو آپدیت نکنم مگر اینکه تویه قسمت نظرات این پست بیش از بست نظر تمایل به ادامه وبلاگ وجود داشته باشه......

پس خوب فکراتونو بکنین

فعلا یا حق

+ نوشته شده در  دوشنبه پنجم شهریور 1386ساعت 13:37  توسط فرزان شجاعی  | 

دوستان خوبم سلام ان شاء الله که حالتون خوب باشه و تو دستورات پست قبلي مشکلي نداشته ايد البته اينجوري که شما نظر نميديد لابد خيلي خوب ياد گرفتيد ديگه البته اين ناشي از هوش بالاي شماست اما آخه بي معرفتا يه نظر بدين دل من هم براي نوشتن خوش باشه. خوب بگذريم تو اين پست ميخوام يه سري دستورات تبديل کدها به يکديگر و دستورات مربوط به حلقه هاي تکرار را آموزش بدم.

دستور 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

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

فعلاً یا حق

+ نوشته شده در  جمعه دوازدهم مرداد 1386ساعت 20:12  توسط فرزان شجاعی  | 

سلام دوستان اميدوارم که حالتون خوب باشه  و از مطالب پست قبل استفاده لازم رو برده باشيد. دوستان امروز(البته الان شبه) مي خوام کمي درباره توابع رياضي محيط 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

+ نوشته شده در  چهارشنبه دهم مرداد 1386ساعت 15:56  توسط فرزان شجاعی  | 

با سلام خدمت دوستان خوبم اميدوارم که حالتون خوب باشه. راستش تصميم داشتم که در پست قبل آموزش هاي ابتدايي رو به پايان برسونم ولي به خاطر طولاني شدن مطلب توضيح در مورد 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

+ نوشته شده در  دوشنبه هشتم مرداد 1386ساعت 12:11  توسط فرزان شجاعی  | 
+ نوشته شده در  دوشنبه هشتم مرداد 1386ساعت 9:10  توسط فرزان شجاعی 
+ نوشته شده در  دوشنبه هشتم مرداد 1386ساعت 9:7  توسط فرزان شجاعی  | 

*
*
*
*
*
*
*
+ نوشته شده در  یکشنبه هفتم مرداد 1386ساعت 23:45  توسط فرزان شجاعی 

با سلام خدمت دوستان گلخودم حالتون چطوره؟ان شاء الله که از مطالب پست قبل استفاده لازم رو برده باشین.بابا یه نظری چیزی به خدا دل ما وبلاگ نویسا به نظر شما خوشه.خوب تو این پست دیگه تقریباً مطالب ابتدایی رو به پایان می بریم و به امید خدا از پست های دیگه به برنامه نویسی حرفه ای بپردازیم قبل از توضیح دستورات این پست میخوام درباره پیکره بندی LCD در محیط bascom توضیح بدم چون حتماً در پست های فبلی با دستور{LCD } در متن مثالات برخورد کرده اید و برای شما جای سوال داردبنابراین به پیکره بندی 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

+ نوشته شده در  جمعه پنجم مرداد 1386ساعت 23:16  توسط فرزان شجاعی  | 

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

دستور 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

خوب دوستان فکر می کنم برای این جلسه دیگه کافی باشه امیدوارم که مطالب این پست به دردتون بخورهاگه در زمینه دستورات بالا مشکل یا سوالی داشتید می تونید تو قسمت نظرات بنویسید.       

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

+ نوشته شده در  جمعه پنجم مرداد 1386ساعت 19:37  توسط فرزان شجاعی  |