بازگشت   پی سی سیتی > تالار علمی - آموزشی و دانشکده سایت > دانشگاه ها > فنی و مهندسی

فنی و مهندسی در این زیر تالار به بحث و گفتگو در مورد رشته های فنی و مهندسی پرداخته میشود

پاسخ
 
ابزارهای موضوع نحوه نمایش
  #1  
قدیمی 10-31-2007
SonBol آواتار ها
SonBol SonBol آنلاین نیست.
معاونت

 
تاریخ عضویت: Aug 2007
محل سکونت: یه غربت پر خاطره
نوشته ها: 11,775
سپاسها: : 521

1,688 سپاس در 686 نوشته ایشان در یکماه اخیر
پیش فرض ميكروكنترلر - دستورات برنامه نویسی میکروکنترلر microcontroller

ميكروكنترلر - دستورات برنامه نویسی میکروکنترلر microcontroller
microcontroler
میکروکنترلر چیست؟

1- معرفی میکروکنترلرها :

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

2- بخشهای مختلف میکروکنترلر :
میکروکنترلر ها از بخشهای زیر تشکیل شده اند
Cpu واحد پردازش
Alu واحد محاسبات
I /O ورودی ها و خروجی ها
Ram حافظه اصلی میکرو
Rom حافظه ای که برنامه روی آن ذخیره می گردد
Timer برای کنترل زمان ها
و . . .
3- خانواده های میکروکنترلر
خانواده : Pic - AVR - 8051
4- یک میکروکنترلر چگونه برنامه ریزی میشود .
میکرو کنترلر ها دارای کامپایلرهای خاصی می باشد که با زبان های Assemblybasic, c می توان برای آنها برنامه نوشت سپس برنامه نوشته شده را توسط دستگاهی به نام programmer که در این دستگاه ای سی قرار می گیرد و توسط یک کابل به یکی از در گاه های کامپیوتر وصل می شود برنامه نوشته شده روی آی سی انتقال پیدا میکند و در Rom ذخیره می شود .
5- با میکرو کنترلر چه کارهایی می توان انجام داد .
این آی سی ها حکم یک کامپیوتر در ابعاد کوچک و قدرت کمتر را دارند بیشتر این آی سی ها برای کنترل و تصمیم گیری استفاده می شود چون طبق الگوریتم برنامه ی آن عمل می کند این آی سی ها برای کنترل ربات ها تا استفاده در کارخانه صنعتی کار برد دارد .
6- امکانات میکرو کنترلرها :
امکانات میکرو کنترلرها یکسان نیست و هر کدام امکانات خاصی را دارا می باشند و در قیمت های مختلف عرضه می شود .

7- شروع کار با میکرو کنترلر:
برای شروع کار با میکرو کنترلر بهتر است که یک زبان برنامه نویسی مثل c یا basic را بیاموزید سپس یک برد programmer تهیه کرده و برنامه خود را روی میکرو ارسال کنید سپس مدار خود را روی برد برد بسته و نتیجه را مشاهده کنید.
چنان چه در مدارهای الکترو نیکی تجربه ندارید بهتر است از برنامه های آ موزش استفاده کنید.
8- مقایسه خانواده های مختلف میکرو وکنترلرها:
خانواده 8051 :
این خانواده از میکرو کنترولر ها جزو اولین نوع میکرو کنترولر ها یی بود که رایج شده و جزو پیشکسوتان مطرح میشود . معروف ترین کامپایلر برای این نوع میکرو keil یا franklin می باشد میکرو های این خانواده به نوسان ساز نیاز مند هستند و درمقابل خانواده pic یا AVR از امکانات کمتری برخور دار می باشد معروف ترین آی سی ها این خانواده 89S51 یا 89C51 می باشد .
خانواده AVR :
این خانواده از میکرو کنترلرها تمامی امکانات 8051 را دارا می باشد و امکاناتی چون ADC (مبدل آنالوگ به دیجیتال) نوسان ساز داخلی و قدرت و سرعت بیشتر EEPROM (حافظه) از جمله مزایای این خانواده می باشد مهم ترین آی سی این خانواده Tiny و Mega است.
خانواده pic :
این خانواده از نظر امکانات مانند AVR میباشد و در کل صنعتی تر است .
9- مزایای میکرو کنترلر نسبت به مدار های منطقی :
1- یک میکرو کنترلر را می توان طوری برنامه ریزی کرد که کار چندین گیت منطقی را انجام دهد.
2- تعداد آی سی هایی که در مدار به کار میرود به حداقل میرسد .
3- به راحتی می توان برنامه میکرو کنترلر را تغییر داد و تا هزاران بار میتوان روی میکرو برنامه های جدید نوشت و یا پاک کرد .
4- به راحتی میتوان از روی یک مدار منطقی کپی کرد و مشابه آن را ساخت ولی در صورتی که از میکرو کنترلر استفاده شود و برنامه میکرو را قفل کرد به هیچ عنوان نمی توان از آن کپی گرفت
__________________

ویرایش توسط دانه کولانه : 10-19-2008 در ساعت 11:16 PM دلیل: عنوان رو تغییر دادم اینطوری مفیدتر خواهد بود
پاسخ با نقل قول
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید




  #2  
قدیمی 08-17-2008
chooooobin2000 آواتار ها
chooooobin2000 chooooobin2000 آنلاین نیست.
کاربر عادی
 
تاریخ عضویت: Aug 2008
نوشته ها: 25
سپاسها: : 0

2 سپاس در 2 نوشته ایشان در یکماه اخیر
chooooobin2000 به Yahoo ارسال پیام
پیش فرض

سلام تشکر میکنم از مطلب آموزندتون در مورد میکرو کنترولرها
من دانشجوی الکترونیکم
خواهش میکنم در صورتی که منبعی به زبان اصلی در مورد متون تخصصی الکترونیک دارید ارائه کنید ممنون میشم.
این هم لینک دانلود دو شماره از مجله محبوب Elektor تقدیم به علاقه مندان الکترونیک (به صورت تورنت میباشند.)

http://ebookshare.net/download.php?id=4124


http://ebookshare.net/download.php?id=4330
پاسخ با نقل قول
  #3  
قدیمی 10-19-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض

میکروکنترلر چیست :

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

کلمه میکروکنترلر:

این کلمه از دو کلمه 1- میکرو2-کنترلرتشکیل شده

1-میکرو : میدونین که این یک واحد یونانی است و برابر با 10 به توان منفی 6 متر است. یعنی یک ملیونیوم متر واحده خیلی کوچیکیه نه....ولی واحدهای خیلی کوچیکتر از این هم داریم که در الکترونیک مورد استفاده قرار میگیرند در قسمتهای بعدی توضیحیهاتی راجع به این واحد ها و موارد استفاده آنها داده میشه.

2-کنترلر : که همه معنی و مفهومشو میدونین . یعنی کنترل کننده به تعبیری یعنی "مغز " البته بدون تفکر فقط دستوراتی که به اون داده میشه به نحو احسن انجام میده.


حالا چرا این کلمات ؟

به نظر من کلمه میکرو به دو منظور استفاده شده منظور اول و مهم سرعت عمل میکروکنترلر است که میتواند تا یک ملیونیوم ثانیه باشد و دستوارتی که به اون میدیم با این سرعت انجام بده به همین خاطر واژه میکرو رو به اون اختصاص دادن البته معنی دوم آن شاید کوچیکی این قطعه باشد که تا یک ملیونیوم متر کوچیک شده شاید باور کردنی نباشه ولی در یک تراشه ممکنه بیش از یک ملیون تراتزیستور به کار رفته باشه. این کلمه وقتی اهمیتش کامل میشه که با واژه کنترلر عجین بشه تا معنیش کامل بشود .

حالا نحوه انجام دادن کار میکروکنترلر را به صورت کلی بررسی میکنیم :

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

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

ساختمان دخلی میکروکنترلر:

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

تفاوت میکروپروسسور و میکروکنترلر:

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

آیا میکروکنترلر چیز جدیدی را با خود آورده است ؟

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

عیب میکروکنترلر:

میکروکنترلر با این همه مزایا که گفتیم دارای یک عیب کوچیک است .و آن سرعت پایین ! است آیا سرعتی معادل یک ملیونیوم ثانیه سرعت کمی است ؟ سرعت کمی نیست ولییک مثال شاید بحثو بهتر باز کند

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

معرفی انواع میکروکنترلر

تمام میکروکنترلرها جزء این 5 قسمت هستنند:
1) 8051
2) Pic
3) Avr
4) 6811
5) Z8

البته مدل های 6811 ساخت شرکت موتورلا و z8 ساخت شرکت زایلوگ حداقل در ایران خیلی کم استفاده می شوند و رقابت اصلی بین سه نوع دیگر است.
تا به امروز هر میکروکنترلری که ساخته شده زیر مجموعه یکی از این5 نوع است. البته کارخانه های خیلی زیادی با مارک های مختلف میکرو کنترلر تولید میکنند ولی همه اونها زیر مجموعه یکی از این 5 قسمت هستنند .شما برای هر کدام از این5 نوع میکروکنترلر میتوانید میکروکنترلر های مختلفی از شرکت های مختلفی را پیدا کنید.(البته در بازار ایرن کمی با مشکل).
اما خوشبختانه همه میکروکنترلر هایی که جزء هر کدام از 5 نوع بالا باشند از یک برنامه پیروی میکنند. بدین معنا که اگر شما کار با یکی از مدل های آن میکرو را یاد گرفته باشید مثل اینکه کار با تمام میکروکنترلرهای آن نوع را یاد گرفته اید.مثلا شما اگر با یکی از مدل های میکروکنترلر avr مثلا atmega8 را یاد گرفته باشید دیگر با صد ها مدل دیگر میکروکنترلر avr مشکلی ندارید وتقریبا بدون هیچ مشکلی میتوانید با دیگر مدل های این میکرو کار کنید.
اما یه مشکل که در میکروکنترلر ها وجود دارد این است که این5 نوع از لحاظ برنامه نویسی به هیچ وجه با هم دیگر سازگاری ندارند . به طور مثال اگر شما میکروکنترلر های avr و 8051 را کامل یاد گرفته باشید حتی ساده ترین برنامه رو روی یک میکروکنترلر pic نمیتوانید اجرا کنید. واین یکی از بزرگترین عیب و مشکل برای یاد گیری میکرو است .بنابراین از همون اول باید یک انتخاب درست داشته باشید و میکروکنترلر مناسب را برگزینید تا با یادگیری آن میکروکنترلر بتوانید بعدا به سادگی پروژه های خود را اجرا کنید . البته بسیاری از دوستان هستنند که کار با چند میکروکنترلر را میدونند و حتما این هم از هوش بالای ایرانی هاست. ولی اگر به صورت خیلی حرفه ای نخواهید وارد این بحث بشوید باید یکی از این میکروکنترلرها را انتخاب کنید و کار با آن را آغاز کنید. در قسمت بعدی شما را برای این انتخاب کمک خواهم کرد.

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

از آن جای که 6811 و z8 خیلی کمتر استفاده میشوند به معرفی سه نوع دیگر میپردازم.

1) : اول از 8051 که اولین میکروکنترلری بود که به دست بشر ساخته شد شروع میکنیم . همانطور که در مقاله قبلی گفته شد ابتدا این میکروکنترلر توسط شرکت بزرگ intel ساخته شد .اما بعدا intel این امکان را به دیگر شرکت ها داد که این میکروکنترلر را تولید کنند و شرکت هایی مانند ATMEL , PHILIPS , SIEMENS , DALLAS و... به تولید این میکروکنترلر پرداختنند یکی از شرکت هایی که به صورت گسترده به تولید این تراشه پرداخت ATMEL بود که مدل های مختلف میکروکنترلر ساخت این شرکت در سرار جهان و در ایران به خوبی یافت می شود. اما اگربخواهیم به صورت کلی سیر پیشرفت این نوع میکروکنترلر رو در نظر بگیریم اولین میکروکنترلر هایی که ساخته شد با جدیدترین میکروکنترلرهای 8051 که الان تولید میشود با توجه به این پیشرفت شگفت در تمام زمینه ها که صنایع دیگر در دنیا دارند پیشرفت زیادی ندارد به طور مثال AT89S5X که میکروکنترلر 8051 جدید ساخت ATMEL است نسبت به مدل های اولیه 8051 پیشرفت آنچنانی ندارد . امکانات این میکرو نسبت به AVR و PIC قابل مقایسه نیست . به صورتی که که همین مدل جدید 8051 تقریبا حافظه ای برابر یک صدم (0.001 ) میکروکنترلر های AVR را دارد و سرعتش 4 برابر کمتر از میکروکنترلر های PIC و 12 بار کمتر از میکروکنترلر های AVR است . از لحاظ امکانات دیگر هم چنین ضعفی احساس میشود. اما برای کارهای ساده تر که پیچیدگی زیادی در آن نباشد به خاطر قیمت بسیار پایینی که این میکروکنترلر دارد بسیار مناسب است . قیمت همین مدل جدید AT89S5X حول و حوش 1000 تومان است که قیمت بسیار مناسبی است.
این میکرو کنترلر از زبان اسمبلی و C پشتیبانی میکند که زبان برنامه نویسی اصلی آن اسمبلی است که واقعا نوشتن با این زبان برنامه نویسی نسبت به زبان های برنامه نویسی دیگر هم مشکل تر و هم طولانی تر است. در کل این میکروکنترلر امروزه دیگر توانای رقابت با AVR و PIC رو ندارد و امروزه رقابت اصلی بین این دو میکروکنترلر است.

2) میکروکنترلر PIC
واقعا میکروکنترلر خیلی قوی است که بر اساس بعضی آمار ها بیشترین کاربر را به خود اختصاص داده است البته متذکر شوم که در ایران این آمار به نفع AVR است. این میکروکنترلر ساخت شرکت میکرو چیپ است که PIC رو در مدل های خیلی زیادی با امکانات مختلف برای کارهای مختلف میسازد . این میکروکنترلر با مدل های مختلفPIC16XXX و PIC12XXXX که به جای X دوم از چپ به راست حروف C ,X,E,F قرار میگره که هر کدام مفهوم خاصی داره که چون بحث ما آموزش AVR است از روی اون سریع میگزریم X های بعدی هم اعدادی هستنند که نشان دهنده مدل های مختلف هستنند.

3)میکروکنترلر AVR
به میکروکنترلر AVR میرسیم که به نظر من و خیلی از دیگر بهترین میکروکنترلر موجود در بازار است البته خود من با 8051 و AVR بخصوص AVR خیلی کار کردم ولی تجربه ای با PIC ندارم و قضاوت من ممکنه یه طرفه باشه ولی این نظر بسیاری از کسانی است که با AVR کار کرده اند .به دلایلی.....
اول از همه سرعت این میکروکنترلر بسیار بالاست و به قولی دستوراتی که بهش داده میشه در یک سیکل کلاک انجام میده در صورتی که این سیکل کلاک برای 8051 باید تقسیم بر12شودو برای PIC باید تقسیم بر 4 بنابراین AVR سریعترین میکروکنترلر موجود در بازار است . AVR از زبان های برنامه نویسی سطح بالا یا به اصطلاح (HIGH LEVEL LANGUAGE) HLL پشتیبانی میکند که باعث تولید کدهای بیشتری میشود که در کل برنامه نوشته شده نسبت به برنامه هایی که برای 8051 و PIC نوشته میشود کوتاهتر است. امکانات جانبی این میکروکنترلر بسیار مناسب است و شما را از خرید بعضی لوازم جانبی مانند چیپ های آنالوگ به دیجیتال (ADC) , مقایسه گر آنالوگ و... راحت میکند .در ضمن AVR از بسیاری از استاندارد های ارتباطی مانند SPI,UART,12C,JTAG پشتیبانی میکند که به راحتی میتوان این میکروکنترلر را با میکروکنترلر دیگر یا و سایل دیگر وصل کرد و با وسایل دیگر به راحتی ارتباط برقرار کند. قیمت این میکروکنترلر هم به نسبت امکانات فراوانی که داره بسیار پایین است به طوری که یک میکروکنترلر AVR تقریبا پیشرفته رو با قیمت حول و حوش 3 تا 4 هزار تومان خرید .
خلاصه من که خیلی با این میکرو ور رفتم و پروژه های خیلی زیاد و پیچیده ای رو باهاش اجرا کردم بسیار راضی هستم و هیچ مشکلی باهاش نداشتم.اگر هم مشکلی بوده از جانب من بوده نه میکروکنترلر . خلاصه اگر برنامه نویسی و کار با این میکروکنترلر رو خوب یاد بگیرید هر کاری رو میتونید باهاش انجام بدید.

پروگرام میکروکنترلر

شاید تا حالا به نظرتون رسیده باشه که این میکروکنترلر رو چگونه میشه برنامه ریزی کرد تا کار مورد نظرمان را انجام بده در صورتی که یک میکروکنترلر برنامه ریزی نشده هیچ کاری رو نمیتونه انجام بده و هیچ کاربردی نداره در واقع برنامه هر میکرو روح وجانی است که در اون دمیده میشه و اون رو زنده میکنه.
برای برنامه ریزی میکروکنترلر نیاز به دستگاه یا بردی هست به نام پروگرامر که یه پل ارتباطیه بین کامپیوتر و میکروکنترلر . پروگرامر را هم میشه از بازار تهیه کرد و هم میشه اون رو ساخت.
البته پروگرامرهای مختلفی در بازار هستنند که متانسب با کاربردشان قیمت های مختلفی دارند بعضی ها فقط چند مدل رو پروگرام میکنند بعضی از پروگرامر ها همه فن حریفند و تمام میکروکنترلر های 8051,AVBR , PIC , رو برنامه ریزی میکنند به طبع قیمت زیادتری دارند.
اما میشه براحتی برای میکروکنترلری که داریم یه پروگرامر ساخت اغلب نقشه هایی هستنند که میشه یه پروگرامر ساخت که در همین سایت آقا حامد نقشه مدل STK300-200 رو توضیح داده.
ولی توصیه من اینه که خودتون رو به دردسر نندازین و برای همیشه یه پروگرامر بخرین ارزششو داره چون همیشه کاربرد داره و همیشه به اون احتیاج دارین.

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

اگر برگه اطلاعاتی atmega32 نوشته شرکت atmel (بزرگترین شرکت تولیکننده میکروکنترلر avr )
رو دیده باشید این مطالب در صفحه اول آن درج شده است :

Features
• High-performance, Low-power AVR® 8-bit Microcontroller
• Advanced RISC Architecture
– 131 Powerful Instructions – Most Single-clock Cycle Execution
– 32 x 8 General Purpose Working Registers
– Fully Static Operation
– Up to 16 MIPS Throughput at 16 MHz
– On-chip 2-cycle Multiplier
• Nonvolatile Program and Data Memories
– 32K Bytes of In-System Self-Programmable Flash
Endurance: 10,000 Write/Erase Cycles
– Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
– 1024 Bytes EEPROM
Endurance: 100,000 Write/Erase Cycles
– 2K Byte Internal SRAM
– Programming Lock for Software Security
• JTAG (IEEE std. 1149.1 Compliant) Interface
– Boundary-scan Capabilities According to the JTAG Standard
– Extensive On-chip Debug Support
– Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface
• Peripheral Features
– Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
– One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
Mode
– Real Time Counter with Separate Oscillator
– Four PWM Channels
– 8-channel, 10-bit ADC
8 Single-ended Channels
7 Differential Channels in TQFP Package Only
2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
– Byte-oriented Two-wire Serial Interface
– Programmable Serial USART
– Master/Slave SPI Serial Interface
– Programmable Watchdog Timer with Separate On-chip Oscillator
– On-chip Analog Comparator
• Special Microcontroller Features
– Power-on Reset and Programmable Brown-out Detection
– Internal Calibrated RC Oscillator
– External and Internal Interrupt Sources
– Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby
and Extended Standby
• I/O and Packages
– 32 Programmable I/O Lines
– 40-pin PDIP, 44-lead TQFP, and 44-pad MLF
• Operating Voltages
– 2.7 - 5.5V for ATmega32L
– 4.5 - 5.5V for ATmega32
• Speed Grades
– 0 - 8 MHz for ATmega32L
– 0 - 16 MHz for ATmega32
• Power Consumption at 1 MHz, 3V, 25°C for ATmega32L
– Active: 1.1 mA
– Idle Mode: 0.35 mA
– Power-down Mode: < 1 µA

************************************************************ ***********

1- (High-performance, Low-power AVR® 8-bit Microcontroller) :
ترجمه : میکروکنترلر AVR 8 بیتی با کارایی بالا و توان کم
میکرو 8 بیتی اشاره به این دارد که این میکروکنترلر حداکثر با 8 بیت کار میکند و این میکرو حداکثر 8 بیت را به صورت همزمان میتواند انتقال دهد. اکثر میکروهایی که تا کننون ساخته شده اند 8 بیتی هستنند این توان هم برای کارهای عمومی و پیشرفته به صورت کامل جوابگوست ولی برای کارهای فوق پیشرفته به نسبت توان انتقال پایینی است .

در رابطه با کارایی بالا این میکروها در مقاله های قبل بحث شده در ضمن میکروکنترلر های avr توان خیلی کمی مصرف میکنند که در ادامه مقاله خواهیم دید.

2-( Advanced RISC Architecture ) :
ترجمه : دارای طراحی پیشرفته RISC
کلمه RISC ((REDUCED INSTRUCTION SET COMPUTER به معنای طراحی CPU که مجموعه دستورات آن حاوی دستورات سریع و ساده است که نوشتن برنامه را مشکل ولی سریعتر میکند. اما طراحی پیشرفته RISC در میکروکنترلرهای AVR ضمن این که دستورات ساده وسریع هستنند، نوشتن برنامه هم راحت و بدون مشکل است.

3-(131 Powerful Instructions – Most Single-clock Cycle Execution ):
ترجمه : دارای 131 دستور العمل قوی که بیشترشان در یک سیکل کلاک اجرا می شوند. اشاره به همان معماری
RISC دارد که دستورات سریع اجرا میشوند.
یعنی برای ATMEGA32 که دارای سرعت 16 MHZ است. این میکرو میتواند در هر ثانیه تقریبا 16 ملیون دستور را اجرا کند.

4- ( 32*8 GENERAL Purpose Working Registers ) :
ترجمه : با 8*32 ثبات عمومی کار میکند.

5-(Fully Static Operation) :
ترجمه : عملکر کاملا ثابت .

6-(Up to 16 MIPS Throughput at 16 MHz ) :
ترجمه : تا 16 ملیون (MIPS) توان عملیاتی در 16MHZ
چند خط بالا دربارش توضیح داده بودم.

7- (On-chip 2-cycle Multiplier ) :
ترجمه : تقویت کننده 2 سیکل بر روی چیپ.

Nonvolatile Program and Data Memories


حافظه ، برنامه و داده غیر فرار

8- (32K Bytes of In-System Self-Programmable Flash
Endurance: 10,000 Write/Erase Cycles)
ترجمه : 32KB حافظه داخلی FLASH قابل برنامه ریزی . ماندگاری : 10000 بار نوشتن و پاک کردن.

حافظه FLASH نوعی حافظه غیر فرار مشابه EEPROM که با بلاکهای داده کار میکند. حافظه FLASH این میکروکنترلر قابلیت 10000 بار نوشتن و پاک کرن را دارد که برای تمرین و آزمایش بسیار عالیست.
از لحاظ حجم هم 32 کیلو بایت میتواند نیاز های ما را برآورده کند و در بین سایر میکروکنترلر ها به نسبت حجم خوبی است.در واقع شما باید برنامه را در این حافظه بنویسید.
هر BIT شامل یک (0و1) میشود ،هر BYTE ،1024 BIT است و هر KB (KILO BYTE ) 1024
BYTE است.
(هر حرف یک BYTE است.)

9- Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation

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

10- (1024 Bytes EEPROM) :
: ( Endurance: 100,000 Write/Erase Cycles)

ترجمه : 1024 بایت حافظه EEPROM . ماندگاری : 100000 بار نوشتن و پاک کردن.
اکثر مدل های میکروکنترلر AVR دارای حافظه EEPROM داخلی میباشند که یکی از مزیت های خوب این میکروکنترلر هاست . در این حافظه که اطلاعات داخلش تا حدود 100 سال باقی میماند میشود به اکرار (صد هزار بار) نوشت و پاک کرد و میتوانیم اطلاعات زیادی رو در این حافظه قرار بدهیم.
این حافظه را در هنگام اجرای برنامه میتوان نوشت و خواند و بر گرفته از اول کلمات ELECTRICALLY ERASABLE READ ONLY MEMORY است.

11- (2K Byte Internal SRAM) :
ترجمه : 2 کیلو بایت حافظه SRAM داخلی
این نوع از حافظه یک حافظه با دسترسی تصادفی است. مثل حافظه RAM کامپیوتر.

12- ( Programming Lock for Software Security) :
ترجمه : قفل برای برنامه برای ایمنی

JTAG (IEEE std. 1149.1 Compliant) Interface

قابلیت اتصال با پروتکل JTAG تحت استاندارد IEEE


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

13-(Boundary-scan Capabilities According to the JTAG Standard ):
ترجمه : امکان مقایسه برخی از ثبات ها در استاندارد JTAG

14- ( Extensive On-chip Debug Support) :
ترجمه : پشتیبانی چیپ از یک اشکل زدایی گسترده

15-( Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface ) :
ترجمه : برنامه ریزی حافظه های FLASH , EEPROM و FUSES و فیوز بیت ها با پروتکل .JTAG

امکان خوبی که این پروتکل ارتباطی دارد این است که انواع حافظه ها و فیوز بیت ها را میتوان با آن برنامه ریزی کرد از این رو پروگرامرهای زیادی با استفاده از این پروتکل کار میکنند.
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #4  
قدیمی 10-19-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض برنامه ريزي ميكرو كنترلر ها

برنامه ريزي ميكرو كنترلرها :

براي آشنايي با ميكرو كنترلر مي خواهيم يك برنامه ساده براي ميكرو كنترلر بنويسيم. بنابراين يك برنامه ساده مي نويسيم كه Led های (چراغ خطر!) ربات را روشن و خاموش كند. قسمت اخطار را قبل از هر كاري بخوانيد.
آشنايي با برنامه CodeVision:

CodeVision يك IDE براي ميكرو كنترلر AVR است. به وسيله اين برنامه مي توان از زبان C براي برنامه ريز ميكرو استفاده كرد. براي شروع ابتدا برنامه را از اينجا دانلود كنيد و آن را نصب كنيد. برنامه را اجرا كنيد. يك پروه TestAVR بسازيد.
در قسمت Setting->Programmer نوع Programmer را انتخاب كنيد. (Kanda Systems STK200+/300)
براي تنظيمات اوليه ميكرو از Code wizard استفاده مي كنيم. به وسيله اين wizard كدهاي ‍C‌ لازم براي تنظيماتي از قبيل Crystal Clock, Timer Setting, Port Setting, … توليد و به كد برنامه شما اضافه مي شود. پس از هر تغيير در اين تنظيمات بايد آن را به وسيله منو File->Generate, Save and Exit ذخيره كرد.
پس از تنظيمات اوليه كد برنامه را در Code Vision به زبان C‌ مي نويسيم. (مي توان از توابع كتابخانه اي Code Vision‌نيز در اين كار استفاده كرد.) سپس دكمه Make the project را براي توليد كد اسمبلي برنامه شما براي ميكرو كنترلر AVR بزنيد.
حالا مي توانيد ميكرو كنترلر خود را برنام ريزي كنيد. براي اين كار از Chip Programmer استفاده مي كنيم.
تنظيمات اوليه ميكرو:

به وسيله Tools->CodeWizardAVR منو تنظيمات اوليه را ظاهر كنيد. حالا اين تنظيمات را انجام دهيد:
Chip Tab:
Chip: Atmega16L
Clock: 1.0000
Prot Tab:
Port B tab:
Bit 0: out
Bit 1: out
ما با اين تنظيمات نوع ميكرو كنترلر و همچنين فركانس 1MHz را براي آن انتخاب كرديم.(ما به ميكرو يك كريستال وصل كرديم تا فركانس 8MHz (يا MHz7.3728) توليد كند. ولي يك Oscillator نيز در داخل AVR قرار دارد كه فركانس آن 1MHz است. ما در اين قسمت از اين Oscillator استفاده مي كنيم).
در ضمن بيت 0 و 1 پورت B را به صورت خروجي تنظيم كرديم تا سيگنال روشن و خاموش شدن را در آن توليد كنيم.
حال به وسيله منو File->Generate, Save and Exit تنظيمات خود را ذخيره كنيد.
برنامه ميكرو كنترلر:

پس از مراحل بالا بايد يك فايل كه در آن قسمت هايي به زبان C نوشته شده است به همراه توضيحاتي در مورد آنها به صورت شكل زير توليد شده باشد.


حال اين خط را به برنامه اضافه كنيد:
Line 26:
#include <delay.h>
و سپس برنامه خود را در جايي كه //Place your code here بنويسيد:
void main(void)
{
.
.
.
While(1)
{
// Place your code here
delay_ms(100);
PORTB.0 = 1;
PORTB.1 = ~PORTB.0;
delay_ms(100);
PORTB.0 = 0;
PORTB.1 = ~PORTB.0;
};
}

در اين برنامه در هر 100 ميلي ثانيه خروجي را در بيت صفر و يك پورت B تغيير مي دهيم.

برنامه ريزي ميكرو كنترلر:

ابتدا یک Programmer را به پورت LPT کامپیوتر متصل کرده و کابل Flat آن را به کانکتور JP4 روی مدار خود وصل کنید. به وسيله منو Tools->Chip Programmer منو تنظيمات Programmer ميكرو كنترلر را ظاهر كنيد. VCC و GND را به مدار وصل كنيد و كليد را روشن كنيد.

ابتدا به وسيله منو Read->Chip Signature اتصالات VCC و GND به ميكرو و اتصالات Programmer به بورد را چك مي كنيم. پس از اجرا دستور بالا بايد پيغام زير ظاهر شود:

در غير اين صورت اتصالات خود را چك كنید.
حالا مي خواهيم برنامه خود را به ميكرو وارد كنيم. براي اين كار دستورات زير را به ترتيب اجرا مي كينم:
Program->Erase Chip
Program->Blank Check (optional)
Program->Flash
حالا بايد ديودها روشن و خاموش شوند.
اگر در Chip Programmer در تب Fuse Bit(s):، BootSZ0=0 و BootSZ1=0 را تيك بزنيم و اجرا Program->Fuse(s) Bit ، ميكرو از كلاك Crystal استفاده مي كند. بنابر اين بايد تنظيمات ميكرو را با توجه به كريستال تغيير دهيد.


اخطار: حتما در تب Fuse Bit(s):، BootSZ0=0 و BootSZ1=0 را تيك بزنيد در غير اين صورت ميكرو شما در حالتي قرار مي گيرد كه ديگر نمي توانيد آن را به وسيله CodeVision برنامه ريزي كنید.

__________________
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #5  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض How Microcontrollers Work

How Microcontrollers Work

Microcontrollers are hidden inside a surprising number of products these days. If your microwave oven has an LED or LCD screen and a keypad, it contains a microcontroller. All modern automobiles contain at least one microcontroller, and can have as many as six or seven: The engine is controlled by a microcontroller, as are the anti-lock brakes, the cruise control and so on. Any device that has a remote control almost certainly contains a microcontroller: TVs, VCRs and high-end stereo systems all fall into this category. Nice SLR and digital cameras, cell phones, camcorders, answering machines, laser printers, telephones (the ones with caller ID, 20-number memory, etc.), pagers, and feature-laden refrigerators, dishwashers, washers and dryers (the ones with displays and keypads)... You get the idea. Basically, any product or device that interacts with its user has a microcontroller buried inside.
In this article, we will look at microcontrollers so that you can understand what they are and how they work. Then we will go one step further and discuss how you can start working with microcontrollers yourself -- we will create a digital clock with a microcontroller! We will also build a digital thermometer. In the process, you will learn an awful lot about how microcontrollers are used in commercial products.


If you are not familiar with digital logic, electronic gates and wiring them together, then you will want to read about them first: ==================================
In-depth Explanation of How Microcontrollers Work
In-depth Explanation of How Microcontrollers Work

Microcontrollers are hidden inside a surprising number of products these days. If your microwave oven has an LED or LCD screen and a keypad, it contains a microcontroller. All modern automobiles contain at least one microcontroller, and can have as many as six or seven: The engine is controlled by a microcontroller, as are the anti-lock brakes, the cruise control and so on. Any device that has a remote control almost certainly contains a microcontroller: TVs, VCRs and high-end stereo systems all fall into this category. Nice SLR and digital cameras, cell phones, camcorders, answering machines, laser printers, telephones (the ones with caller ID, 20-number memory, etc.), pagers, and feature-laden refrigerators, dishwashers, washers and dryers (the ones with displays and keypads)... You get the idea. Basically, any product or device that interacts with its user has a microcontroller buried inside.

In this edition of HowStuffWorks, we will look at microcontrollers so that you can understand what they are and how they work. Then we will go one step further and discuss how you can start working with microcontrollers yourself -- we will create a digital clock with a microcontroller! We will also build a digital thermometer. In the process, you will learn an awful lot about how microcontrollers are used in commercial products.

What is a Microcontroller?
A microcontroller is a computer. All computers -- whether we are talking about a personal desktop computer or a large mainframe computer or a microcontroller -- have several things in common:

All computers have a CPU (central processing unit) that "executes programs." If you are sitting at a desktop computer right now reading this article, the CPU in that machine is executing a program that implements the Web browser that is displaying this page.

The CPU loads the program from somewhere. On your desktop machine, the browser program is loaded from the hard disk.

The computer has some RAM (random-access memory) where it can store "variables."

And the computer has some input and output devices so it can talk to people. On your desktop machine, the keyboard and mouse are input devices and the monitor and printer are output devices. A hard disk is an I/O device -- it handles both input and output.

The desktop computer you are using is a "general purpose computer" that can run any of thousands of programs. Microcontrollers are "special purpose computers." Microcontrollers do one thing well. There are a number of other common characteristics that define microcontrollers. If a computer matches a majority of these characteristics, then you can call it a "microcontroller":

Microcontrollers are "embedded" inside some other device (often a consumer product) so that they can control the features or actions of the product. Another name for a microcontroller, therefore, is "embedded controller."



Microcontrollers are dedicated to one task and run one specific program. The program is stored in ROM (read-only memory) and generally does not change.

Microcontrollers are often low-power devices. A desktop computer is almost always plugged into a wall socket and might consume 50 watts of electricity. A battery-operated microcontroller might consume 50 milliwatts.

A microcontroller has a dedicated input device and often (but not always) has a small LED or LCD display for output. A microcontroller also takes input from the device it is controlling and controls the device by sending signals to different components in the device.

For example, the microcontroller inside a TV takes input from the remote control and displays output on the TV screen. The controller controls the channel selector, the speaker system and certain adjustments on the picture tube electronics such as tint and brightness. The engine controller in a car takes input from sensors such as the oxygen and knock sensors and controls things like fuel mix and spark plug timing. A microwave oven controller takes input from a keypad, displays output on an LCD display and controls a relay that turns the microwave generator on and off.

A microcontroller is often small and low cost. The components are chosen to minimize size and to be as inexpensive as possible.

A microcontroller is often, but not always, "ruggedized" in some way.

The microcontroller controlling a car's engine, for example, has to work in temperature extremes that a normal computer generally cannot handle. A car's microcontroller in Alaska has to work fine in -30 degree F weather, while the same microcontroller in Nevada might be operating at 120 degrees F. When you add the heat naturally generated by the engine, the temperature can go as high as 150 or 180 degrees F in the engine compartment.

On the other hand, a microcontroller embedded inside a VCR hasn't been ruggedized at all.

The actual processor used to implement a microcontroller can vary widely. For example, the cell phone shown on this page contains a Z-80 processor. The Z-80 is an 8-bit microprocessor developed in the 1970s and originally used in "home computers" of the time. The Garmin GPS shown in How GPS Receivers Work contains a low-power version of the Intel 80386, I am told. The 80386 was originally used in desktop computers.

In many products, such as microwave ovens, the demand on the CPU is fairly low and price is an important consideration. In these cases, manufacturers turn to dedicated microcontroller chips -- chips that were originally designed to be low-cost, small, low-power, embedded CPUs. The Motorola 6811 and Intel 8051 are both good examples of such chips. There is also a line of popular controllers called "PIC microcontrollers" created by a company called Microchip. By today's standards, these CPUs are incredibly minimalistic; but they are extremely inexpensive when purchased in large quantities and can often meet the needs of a device's designer with just one chip.

A typical low-end microcontroller chip might have 1,000 bytes of ROM and 20 bytes of RAM on the chip, along with eight I/0 pins. In large quantities, the cost of these chips can sometimes be just pennies. You certainly are never going to run Microsoft Word on such a chip -- Microsoft Word requires perhaps 30 megabytes of RAM and a processor that can run millions of instructions per second. But then, you don't need Microsoft Word to control a microwave oven, either. With a microcontroller, you have one specific task you are trying to accomplish, and low-cost, low-power performance is what is important.

Using Microcontrollers

In How Electronic Gates Work, you learned about 7400-series TTL devices, as well as where to buy them and how to assemble them. What you found is that it can often take many gates to implement simple devices. For example, in the digital clock article, the clock we designed might contain 15 or 20 chips. One of the big advantages of a microcontroller is that software -- a small program you write and execute on the controller -- can take the place of many gates. In this article, therefore, we will use a microcontroller to create a digital clock. This is going to be a rather expensive digital clock (almost $200!), but in the process you will accumulate everything you need to play with microcontrollers for years to come. Even if you don't actually create this digital clock, you will learn a great deal by reading about it.

The microcontroller we will use here is a special-purpose device designed to make life as simple as possible. The device is called a "BASIC Stamp" and is created by a company called Parallax. A BASIC Stamp is a PIC microcontroller that has been customized to understand the BASIC programming language. The use of the BASIC language makes it extremely easy to create software for the controller. The microcontroller chip can be purchased on a small carrier board that accepts a 9-volt battery, and you can program it by plugging it into one of the ports on your desktop computer. It is unlikely that any manufacturer would use a BASIC Stamp in an actual production device -- Stamps are expensive and slow (relatively speaking). However, it is quite common to use Stamps for prototyping or for one-off demo products because they are so incredibly easy to set up and use.

They are called "Stamps," by the way, because they are about as big as a postage stamp.

Parallax makes two versions of the BASIC Stamp: the BS-1 and the BS-2. Here are some of the differences between the two models:

Spec BS-1 BS-2

RAM 14 bytes 26 bytes

EEPROM 256 bytes 2 kilobytes

Max program length about 75 instructions about 600 instructions

Execution speed 2,000 lines/sec 4,000 lines/sec

I/O pins 8 16

The specific BASIC Stamp we will be using in this article is called the "BASIC Stamp Revision D" (pictured below).

The BASIC Stamp Revision D is a BS-1 mounted on carrier board with a 9-volt battery holder, a power regulator, a connection for a programming cable, header pins for the I/O lines and a small prototyping area. You could buy a BS-1 chip and wire the other components in on a breadboard. The Revision D simply makes life easier.

You can see from the previous table that you aren't going to be doing anything exotic with a BASIC stamp. The 75-line limit (the 256 bytes of EEPROM can hold a BASIC program about 75 lines long) for the BS-1 is fairly constraining. However, you can create some pretty neat stuff, and the fact that the Stamp is so small and battery operated means that it can go almost anywhere.

Programming the BASIC Stamp

You program a BASIC Stamp using the BASIC programming language. If you already know BASIC, then you will find that the BASIC used in a Stamp is straightforward but a little stripped-down. If you don't know BASIC, but you do know another language like C, Pascal or Java, then picking up BASIC will be trivial. If you have never programmed before, you probably want to go learn programming on a desktop machine first. Here is a quick rundown on the instructions available in Stamp BASIC. (For complete documentation, go to the Parallax site and click on the "Downloads" button in the toolbar on the left.)

Standard BASIC instructions:

for...next - normal looping statement

gosub - go to a subroutine

goto - goto a label in the program (e.g. - "label:")

if...then - normal if/then decision

let - assignment (optional)

return - return from a subroutine

end - end the program and sleep

Instructions having to do with I/O pins:

button - read a button on an input pin, with debounce and auto-repeat

high - set an I/O pin high

input - set the direction of an I/O pin to input

low - set an I/O pin low

output - set the direction of an I/O pin to output

pot - read a potentiometer on an I/O pin

pulsin - read the duration of a pulse coming in on an input pin

pulsout - send a pulse of a specific duration out on an output pin

pwm - perform pulse width modulation on an output pin

reverse - reverse the direction of an I/O pin

serin - read serial data on an input pin

serout - write serial data on an output pin

sound - send a sound of a specific frequency to an output pin

toggle - toggle the bit on an output pin

Instructions specific to the BASIC Stamp:

branch - read a branching table

debug - send a debugging string to the console on the desktop computer

eeprom - download a program to EEPROM

lookdown - return the index of a value in a list

lookup - array lookup using an index

nap - sleep for a short time

pause - delay for the specified time

random - pick a random number

read - read a value from EEPROM

sleep - power down for the specified time

write - write data to EEPROM

Operations:

+ - addition

- - subtraction

* - multiplication (low-word)

** - multiplication (high-word)

/ - division

// - mod

max - return maximum of 2 values

min - return minimum of 2 values

& - AND

| - OR

^ - XOR

&/ - NAND

|/ - NOR

^/ - XNOR

If statement logic:

=

<>

<

<=

>

>=

AND

OR

Variables

All variables in the BS-1 have pre-defined names (which you can substitute with names of your own). Remember that there are only 14 bytes of RAM available, so variables are precious. Here are the standard names:

w0, w1, w2...w6 - 16-bit word variables

b0, b1, b2...b13 - 8-bit byte variables

bit0, bit1, bit2...bit15 - 1-bit bit variables

Because there are only 14 bytes of memory, w0 and b0/b1 are the same locations in RAM, and w1 and b2/b3 are the same, and so on. Also, bit0 through bit15 reside in w0 (and therefore b0/b1 as well).

I/O pins

You can see that 14 of the instructions in the BS-1 have to do with the I/O pins. The reason for this emphasis is the fact that the I/O pins are the only way for the BASIC Stamp to talk to the world. There are eight pins on the BS-1 (numbered 0 to 7) and 16 pins on the BS-2 (numbered 0 to 15).

The pins are bi-directional, meaning that you can read input values on them or send output values to them. The easiest way to send a value to a pin is to use the HIGH or LOW functions. The statement high 3 sends a 1 (+5 volts) out on pin 3. LOW sends a 0 (Ground). Pin 3 was chosen arbitrarily here -- you can send bits out on any pin from 0 to 7.

There are a number of interesting I/O pin instructions. For example, POT reads the setting on a potentiometer (variable resistor) if you wire it up with a capacitor as the POT instruction expects. The PWM instruction sends out pulse-width modulated signals. Instructions like these can make it a lot easier to attach controls and motors to the Stamp. See the documentation for the language for details. Also, a book like Scott Edward's Programming and Customizing the BASIC Stamp Computer can be extremely helpful because of the example projects it contains.

Playing with a BASIC Stamp

If you would like to play with a BASIC Stamp, it's very easy to get started. What you need is a desktop computer and a BASIC Stamp starter kit. The starter kit includes the Stamp, a programming cable and an application that you run on your desktop computer to download BASIC programs into the Stamp.

You can get a starter kit either from Parallax (the manufacturer) or from a supplier like Jameco (who should be familiar to you from the electronic gates and digital clock articles). From Parallax, you can order the BASIC Stamp D Starter Kit (part number 27202), or from Jameco you can order part number 140089. You will receive the Stamp (pictured below), a programming cable, software and instructions. The kit is $79 from both suppliers. Occasionally, Parallax runs a special called "We've Bagged the Basics" that also includes Scott Edward's Programming and Customizing the BASIC Stamp Computer.

Hooking up the Stamp is easy. You connect it into the parallel port of your PC. Then you run a DOS application to edit your BASIC program and download it to the Stamp. Here is a screenshot of a typical editor (in this case, the one from Scott Edward's book):

To run the program in this editor, you hit ALT-R. The editor application checks the BASIC program and then sends it down the wire to the EEPROM on the Stamp. The Stamp then executes the program. In this case, the program produces a square wave on I/O pin 3. If you hook up a logic probe or LED to pin 3 (see the electronic gates article for details), you will see the LED flash on and off twice per second (it changes state every 250 milliseconds because of the PAUSE commands). This program would run for several weeks off of a 9-volt battery. You could save power by shortening the time that the LED is "on" (perhaps it is on for 50 milliseconds and off for 450 milliseconds), and also by using the NAP instruction instead of PAUSE.

Creating a Really Expensive Digital Clock

Spending $79 to flash an LED may seem extravagant to you. What you would probably like to do is create something useful with your BASIC stamp. By spending about $100 more you can create a really nice digital clock! This may seem extremely extravagant, until you realize that the parts are reusable in a variety of other projects that you may want to build later.

Let's say that we would like to use the I/O pins on the BASIC Stamp to display numeric values. In the digital clock article, we saw how to interface to a 7-segment LED display using a 7447 chip. 7447s would work just as well with the BASIC Stamp. You could wire four of the I/O pins straight into a 7447 and easily display a number between 0 and 9. Since the BS-1 Stamp has eight I/O pins, it is easy to drive two 7447s directly like this.

For a clock, we need a minimum of four digits. To drive four 7447s with eight I/O pins, we have to be slightly more creative. The following diagram shows you one approach:

In this diagram, the eight I/O lines from the Stamp enter from the left. This approach uses four lines that run to all four 7447s. Then the other four lines from the Stamp activate the 7447s in sequence ("E" on the chips means "Enable" -- on a 7447, that would be the blanking input on pin 5). To make this arrangement work, the BASIC program in the Stamp would output the first digit on the four data lines and activate the first 7447 by toggling its E pin with the first control line. Then it would send out the value for the second digit and activate the second 7447, sequencing through all four of the 7447s like this repeatedly. By wiring things slightly differently, you could actually do this with only one 7447. By using a 74154 demultiplexer chip and some drivers, you could drive up to 16 digits using this approach.

This is, in fact, a standard way to control LED displays. For example, if you have an old LED calculator, turn it on and shake it while watching the display. You will actually be able to see that only one digit is ever illuminated at once. The approach is called multiplexing the display.

While this approach works fine for clocks and calculators, it has two important problems:

LEDs consume a lot of power.

7-segment LEDs can only display numeric values.

An alternative approach is to use an LCD screen. As it turns out, LCDs are widely available and can be easily hooked to a Stamp. For example, the two-line by 16-character alphanumeric display shown below is available from both Jameco (part number 150990) and Parallax (part number 27910). A typical display is shown here, mounted on a breadboard for easier interfacing:

This sort of LCD has several advantages:

The display can be driven by a single I/O pin. The display contains logic that lets a Stamp communicate with it serially, so only one I/O pin is needed. In addition, the SEROUT command in Stamp BASIC handles serial communication easily, so talking to the display is simple.

The LCD can display alphanumeric text: letters, numbers and even custom characters.

The LCD consumes very little power -- only 3 milliamps.

The only problem is that one of these displays costs $59. Obviously, you would not embed one of these in a toaster oven. If you were designing a toaster oven, however, you would likely prototype with one of these displays and then create custom chips and software to drive much cheaper LCDs in the final product.

To drive a display like this, you simply supply it with +5 volts and ground (the Stamp supplies both from the 9-volt battery) and then hook one of the I/O pins from the Stamp to the display's input line. The easiest way I have found to connect the Stamp's I/O pins to a device like an LCD is to use a wire-wrap tool (Jameco part number 34577) and 30-gauge wire wrap wire (Jameco part number 22541 is typical). That way, no soldering is involved and the connections are compact and reliable.

The following BASIC program will cause a BASIC Stamp to behave like a clock and output the time on the LCD (assuming the LCD is connected to I/O pin 0 on the Stamp):

pause 1000 'wait for LCD display to boot

serout 0, n2400, (254, 1) 'clear the display

serout 0, n2400, ("time:") 'Paint "time:" on the display

'preset before loading program

b0 = 0 'seconds

b1 = 27 'minutes

b2 = 6 'hours



again:

b0 = b0 + 1 'increment seconds

if b0 < 60 then minutes

b0 = 0 'if seconds=60

b1 = b1 + 1 ' then increment minutes

minutes:

if b1 < 60 then hours

b1 = 0 'if minutes=60

b2 = b2 + 1 ' then increment hours

hours:

if b2 < 13 then show

b2 = 1 'if hours=13 reset to 1



show:

serout 0, n2400, (254, 135) 'position cursor on display,

'then display time

serout 0, n2400, (#b2, ":", #b1, ":", #b0, " ")

pause 950 'pause 950 milliseconds

goto again 'repeat



In this program, the SEROUT commands send data to the LCD. The sequence (254, 1) clears the LCD (254 is the escape character and 1 is the command to clear the screen). The sequence (254, 135) positions the cursor. The other two SEROUT commands simply send text strings to the display.

This approach will create a reasonably accurate clock. By tweaking the PAUSE statement you can get the accuracy to within a few seconds a day. Obviously, in a real clock you would like to wire up a push-button or two to make setting it easier -- in this program, you preset the time before you download the program to the Stamp.

While this approach is simple and works, it is not incredibly accurate. If you want better accuracy, one good approach would be to wire a real-time clock chip up to your Stamp. Then, every second or so, you can read the time from the chip and display it. A real-time clock chip uses a quartz crystal to give it excellent accuracy. Clock chips also usually contain date information and handle leap year correction automatically.

One easy way to interface a real-time clock to a stamp is to use a component called the Pocket Watch B.

Pocket Watch B Module

The Pocket Watch B is available from both Jameco (part number 145630) and Parallax (part number 27962). This part is about as big as a quarter and contains the clock chip, crystal and a serial interface so that only one I/O pin is necessary to communicate with it. This component costs about $30 -- again, not something you want to embed in a toaster oven, but easy to play with when constructing prototypes.
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #6  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض میکروکنترلر : دستورات برنامه نویسی میکروکنترلر Avr برای راه اندازی Lcd

میکروکنترلر : دستورات برنامه نویسی میکروکنترلر AVR برای راه اندازی LCD

دستورات برنامه نویسی میکروکنترلر AVR برای راه اندازی ال سی دی



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


(avr(4
درباره توابع رياضي محيط 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 توسط فرزان شجاعی | نظر بدهید

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


منبع http://www.vis.ir
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #7  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض دستورات مربوط به Lcd - میکروکنترلرها

دستورات مربوط به LCD - میکروکنترلرها





در این قسمت ادامه دستورات کامپایلر PIC Simulator IDE شرح داده می شود. این دستورات مربوط به ارتباط میکروکنترلر با LCD می باشد. برای اینکه بتوانید در این نرم افزار به زبان بیسیک برنامه نویسی نمائید ابتدا برنامه را باز کنید و روی منوی TOOLS رفته و سپس Basic Compiler را انتخاب نمائید.
اکنون ادامه دستورات:
دستورات:
قبل از مطالعه این دستورات بهتر است که با LCD و روش های ارتباط با آن آشنایی داشته باشید.
DEFINE
فرم کلی دستور:
DEFINE command
قبل از هر چیز درباره دستور DEFINE توضیح می دهم. برخی از دستورات دارای مقادیر پیش فرض هستند که با دستور DEFINE می توان مقدار دلخواه را مشخص نمود. در مثال ها کاربرد این دستور را مشاهده خواهید نمود.
________________________________________
LCD_BITS
فرم کلی دستور:
DEFINE LCD_BITS = 4 OR 8
این دستور مشخص می سازد که پورت اطلاعات LCD چهاربیتی است یا هشت بیتی (به روش های ارتباط با LCD مراجعه نمائید.)
مقدار پیش فرض 4 است.
________________________________________
LCD_DREG
فرم کلی دستور:
DEFINE LCD_DREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که خطوط دیتای LCD به کدام پورت میکرو متصل است . که یکی از پورت های فوق باید انتخاب شود.
مقدار پیش فرض PORTB است.
________________________________________
LCD_DBIT
فرم کلی دستور:
DEFINE LCD_DBIT = 0 or 4
این دستور زمانی کاربرد دارد که BUS چهار بیتی باشد. و برای باس 8 بیتی تعریف نشده .
این دستور مشخص می سازد که BUS به 4 بیت کم ارزشتر از پورت میکرومتصل است هرگاه صفر انتخاب شود و همچنین باس به 4 بیت با ارزش تر از پورت میکرو متصل است ، هرگاه 4 انتخاب شود.
مقدار پیش فرض 4 است.
________________________________________
LCD_RSREG
فرم کلی دستور:
DEFINE LCD_RSREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه RS از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض PORTB است.
________________________________________
LCD_RSBIT
فرم کلی دستور:
DEFINE LCD_RSBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه RS از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 3 است.
________________________________________
LCD_EREG
فرم کلی دستور:
DEFINE LCD_EREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه Enable از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض PORTB است.
________________________________________
LCD_EBIT
فرم کلی دستور:
DEFINE LCD_EBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه Enable از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 2 است.
________________________________________
LCD_RWREG
فرم کلی دستور:
DEFINE LCD_RWREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه R/W از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض 0 است.
________________________________________
LCD_RWBIT
فرم کلی دستور:
DEFINE LCD_RWBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه R/W از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 0 است.
________________________________________
LCD_COMMANDUS
فرم کلی دستور:
DEFINE LCD_COMMANDUS = زمان برحسب میکروثانیه
مدت زمان تاخیر که پس از اجرای هر فرمان لازم است را مشخص می سازد.
مقدار پیش فرض 5000 میکروثانیه است.
________________________________________
LCD_DATAUS
فرم کلی دستور:
DEFINE LCD_DATAUS = زمان بر حسب میکروثانیه
مدت زمان تاخیر که پس از هربار ارسال اطلاعات روی LCD لازم است را مشخص می سازد.
مقدار پیش فرض 50 است.
________________________________________
LCD_INITMS
فرم کلی دستور:
DEFINE LCD_INITMS = زمان بر حسب میلی ثانیه
این دستور مدت زمان تاخیر برای دستور LCDINIT را مشخص می کند.
مقدار پیش فرض 100 است.
________________________________________
توجه: در هنگام استفاده از سه دستور اخیر در هنگام شبیه سازی با برنامه ، کمترین مقدار ممکن را برای آن ها در نظر بگیرید.
هر یک از دستورات فوق دارای مقادیر پیش فرض هستند لذا هرگاه هر یک از دستورات فوق را تایپ نکردید ، کامپایلر مقدار پیش فرض را برای آن پارامتر یا متغیر در نظر می گیرد. به عنوان مثال هرگاه دستور LCD_RWREG را در برنامه تایپ ننمودید کامپایلر هیچ پینی از پورت های میکروکنترلر را به پایه R/W از LCD اختصاص نمی دهد.
________________________________________
LCDINIT
فرم کلی دستور:
LCDINIT 0 or 1 or 2 or 3
این دستور باید قبل از اولین دستورفرمان (LCDCMDOUT) و اولین دستور ارسال اطلاعات (LCDOUT) قرار گیرد
اگر هیچ مقداری برای این دستور مشخص نشود و یا مقدار صفر برای آن مشخص شود ، مکان نمای LCD خاموش خواهد بود.
اگر مقدار 1 برای این دستور مشخص شود ، مکان نمای LCD چشمک زن خواهد بود.
اگر مقدار 2 برای این دستور مشخص شود ، مکان نمای LCD به صورت underline ثابت خواهد بود.
گر مقدار 3 برای این دستور مشخص شود ، مکان نمای LCD به صورت underline چشمک زن خواهد بود.
________________________________________
LCDOUT
این دستور برای ارسال اطلاعات روی LCD به کار می رود. با این دستور می توان مقادیرعددی ثابت ، متغیر رشته ای و متغیر ارسال نمود. و با استفاده از علامت (,) می توان ترکیبی از موارد فوق را ارسال نمود:
LCDOUT "mehdi_mosafard" عبارت داخل گیومه را روی LCD نمایش می دهد.
LCDOUT #A محتوای متغیر A را به صورت دسیمال روی LCD نمایش می دهد.
LCDOUT "vis.ir,#A

LCDOUT A کاراکتر اسکی محتوای متغیر A راروی LCD نمایش می دهد
________________________________________
LCDCMDOUT
این دستور برای ارسال فرمان روی LCD به کار می رود. با این دستور می توان مقادیرعددی ثابت ، متغیر رشته ای و متغیر ارسال نمود. و با استفاده از علامت (,) می توان ترکیبی از موارد فوق را ارسال نمود.
مثلا دستور زیر مشخص می سازد که مکان نما پس از نوشتن هر حرف یا عدد به سمت راست شیفت پیدا کند:
DIM A AS BYTE
A = 6
LCDCMDOUT #A
درسته که با روش فوق می توان فرمان ها را به LCD ارسال نمود اما این کامپایلر روش دیگری نیز برای این عمل در نظر گرفته است و آن استفاده از کلمات و دستورات کلیدی زیر است:
LCDCLEAR صفحه LCD پاک شود:
LCDHOME مکان نما در بالاترین سطر و در آخرین ستون سمت چپ قرار می گیرد
LCDLINE2HOME مکان نما در سطر دوم و آخرین ستون سمت چپ قرار می گیرد
LCDLEFT با هربار اجرای این دستور مکان نما یک کاراکتر به سمت چپ می رود
LCDRIGHT با هربار اجرای این دستور مکان نما یک کاراکتر به سمت راست می رود
LCDSHIFTLEFT با هربار اجرای این دستور تمامی کاراکترها به اندازه یک کاراکتر به سمت چپ شیفت پیدا می کنند
LCDSHIFTRIGHT با هربار اجرای این دستور تمامی کاراکترها به اندازه یک کاراکتر به سمت راست شیفت پیدا می کنند
LCDLINE1CLEAR تمامی کاراکترهای سطر اول را پاک می کند
LCDLINE2CLEAR تمامی کاراکترهای سطر دوم را پاک می کند
موقعیت مکان نما در سطر اول را مشخص می سازد. داخل پرانتز باید عددی بین 1 تا 40 باشد که شماره خانه ای که مکان نما در آن قرار می گیرد را (از سمت چپ) مشخص می سازد:
LCDLINE1POS( )
موقعیت مکان نما در سطردوم را مشخص می سازد. داخل پرانتز باید عددی بین 1 تا 40 باشد که شماره خانه ای که مکان نما در آن قرار می گیرد را (از سمت چپ) مشخص می سازد
LCDLINE2POS( )
________________________________________
LCDDEFCHAR
فرم کلی دستور:
LCDDEFCHAR v,a1,a2,a3,a4,a5,a6,a7,a8
از این دستور برای تعریف کاراکتر دلخواه کاربراستفاده می شود. مثلا اگر شما بخواهید که کاراکتر یک عدد پارسی و یا حرف پارسی را ایجاد نمائید و در پروژه تان از آن استفاده نمائید ، می توانید با استفاده از این دستور این کار را انجام دهید. اما محدودیتی وجود دارد و آن این است که بیش از 8 کاراکتر نمی توانید تعریف کنید دلیل این موضوع هم مربوط می شود به خود LCD های کاراکتری. این LCD ها دارای ثباتی با نام CGRAM می باشند که CG مخفف عبارت Character Cenerator (سازنده کاراکتر) می باشد. تعداد این ثبات ها 8 عدد می باشد ( cgram0 - cgram7) لذا بیشتر از 8 کاراکتر نمی توان ساخت. هر یک از این CGRAM ها دارای 8 بایت می باشد که این هشت بایت در واقع نقاط روشن و خاموش را در مکان کاراکترها مشخص می سازند:

شکل فوق مکان یک کاراکتر روی LCD را نشان می دهد. هر مکانی از 5 ستون و 8 سطر متشکل از نقاط ریز تشکیل شده است.
همانطور که قبلا گفته شد ثبات CGRAM دارای هشت بایت می باشد که هر یک از این 8 بایت به یکی از سطرهای شکل فوق مربوط می شود و 5 بیت کم ارزش هر یک از آن 8 بایت به ستون های فوق مربوط می شود. مقدار 1 منطقی نقطه ای را روشن می سازد و مقدار 0 منطقی نقطه ای را خاموش می سازد.
اما دستور LCDDEFCHAR (LCDDEFCHAR v,a1,a2,a3,a4,a5,a6,a7,a8 ) اولین آرگومان این دستور یعنی v می تواند مقادیری از 0 تا 7 داشته یاشد که در واقع شماره n امین کاراکتر تعریف شده را مشخص می سازد و قبلا ذکر شده بود که فقط 8 کاراکتر می توان تعریف نمود.
اما مقادیر a1 تا a8 هر یک به یکی از ستون های شکل فوق مریوط می شود- از بالا به پایین- بطوریکه a1 به بالاترین ستون و a8 به پایین ترین ستون. مقادیر a1 تا a8 هم می تواند به صورت دسیمال باشد و هم یه صورت باینری.
برای ارسال هریک از کاراکترهای تعریفی کافیست که از دستور lcdout استفاده شود. به این صورت که ابتدا دستور LCDOUT را نوشته و سپس شماره کاراکتر تعریف شده را می نویسیم. در مثال زیر 2 کاراکتر تعریف نمده ایم یکی عدد 3 و دیگری حرف ب :
Lcddefchar 0, %00000, %10101, %11111, %10000, %10000, %10000, %10000, %00000
Lcddefchar 1, %00000, %00000, %00000, %10001, %11111, %00100, %00000, %00000
lcdout 0
lcdout 1
نکته ی مهمی که درباره این کاراکترها باید مورد توجه قرار گیرد اینست که اولین کاراکتر ارسالی از این نوع در home (بالاترین و اولین خانه از سمت چپ lcd) قرار می گیرد و سپس می توان با دستورات شیفت دهنده کاراکتر مورد نظر را به خانه دلخواه انتقال داد.

________________________________________
چند مثال:
1:
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DEFINE LCD_COMMANDUS = 10000
DEFINE LCD_DATAUS = 100
DEFINE LCD_INITMS = 1000
LCDINIT
loop:
LCDOUT "vis.ir!"
WAITMS 1000
LCDCMDOUT LcdClear
WAITMS 1000
GOTO loop
2:
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DEFINE LCD_COMMANDUS = 10000
DEFINE LCD_DATAUS = 100
DEFINE LCD_INITMS = 1000
DIM A AS WORD
A = 65535
LCDINIT 3
WAITMS 1000
loop:
LCDOUT "I am counting!"
LCDCMDOUT LcdLine2Home
LCDOUT #A
A = A - 1
WAITMS 250
LCDCMDOUT LcdClear
GOTO loop
3:
LCDDEFCHAR 0, 10, 10, 10, 10, 10, 10, 10, 10
LCDDEFCHAR 1, %11111, %10101, %10101, %10101, %10101, %10101, %10101, %11111
LCDOUT 0, 1, "Hello!", 1, 0

________________________________________
نرم افزار PIC Simulator IDE دارای 6 نوع LCD از نوع کاراکتر و عدد می باشد که در قسمت SETUP ماژول LCD این نرم افزار می توان هر یک از آن ها را بسته به نوع پروژه ، برای شبیه سازی انتخاب نمائید. این 6 نوع عبارتند از:
1 X 16 - 2 X 16 - 4 X 16 - 2 X 20 - 4 X 20 - 2 X 40
تمامی دستورات فوق برای هر یک از این 6 نوع LCD صادق است.


منبع http://www.vis.ir
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #8  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض میکروکنترلر 8051 - آزمایش میکروکنترلر 8051

میکروکنترلر 8051 - آزمایش میکروکنترلر 8051

آزمایش اول : اتصال یک LED به میکروکنترلر



خوب اگه وسایل و قطعات لیست مذکور را تهیه کردید ، نرم افزار Keil را دانلود و نصب کرده و به راحتی میتونید یک پروژه ی جدید ایجاد کنید ، پروگرامر شرح داده شده در بالا را ساخته و تست کردید و منبع تغذیه ی 5+ولت را هم ساختید ، میریم سراغ اولین و در واقع ساده ترین آزمایش که اتصال یک LED به میکروکنترلر و روشن و خاموش کردن آن است . در این آزمایش ما دو هدف را دنبال میکنیم : 1_ اتصال صحیح یک LED به میکرو و 2_ ایجاد یک تأخیر یک ثانیه ای نسبتاً دقیق با استفاده از تایمر صفر . قبل از اینکه به سراغ آزمایشهای بعدی بریم ، باید این تذکر را بدم که من توی این وبلاگ قصد آموزش برنامه نویسی اسمبلی را ندارم و فرض را بر این میگذارم که شما با دستورات اسمبلی و نحوه ی کاربرد اونها کاملاً آشنا هستید .

از اونجائیکه پورتهای میکروکنترلرهای سری 8051 فقط در حالت خروجی صفر جریاندهی خوبی دارند و جریان دهی پورتها در حالت خروجی یک ، برای روشن کردن یک LED کافی نیست ، در اینجا پایه ی کاتد LED را به میکرو وصل کرده و پایه ی آند LED را هم با یک مقاومت 470 اهم به 5+ولت وصل می کنیم . لازمه به این نکته اشاره کنم که LED هایی مورد استفاده من از نوع مرغوب هستند که حتی با یک مقاومت 7/4 کیلو اهم هم روشن می شوند و فکر کنم در اکثر شهرها هم از این نوع LED پیدا میشه .

برتامه ی میکرو را هم در زیر مشاهده می کنید . در این برنامه از تایمر صفر در مود یک استفاده شده که با توجه به مقداردهی اولیه پس از 62500 میکرو ثانیه سر ریز می کند و پس از هر بار سر ریز محتوای رجیستر R2 با دستور Djnz یک واحد کم می شود . با توجه به مقداردهی اولیه این رجیستر که عدد 16 هست ، سرانجام پس از 16 بار تکرار حلقه مذکور زمانی برابر 62500*16 میکرو ثانیه یا 1000000 میکروثانیه سپری خواهد شد که همان یک ثانیه می باشد . پس از گذشت زمان یک ثانیه وضعیت پایه ی P0.0 که LED به آن متصل است معکوس می شود و پس از مقدار دهی دوباره ی R2 برنامه مجدداً وارد حلقه ی تاخیر می شود .

Org 0H

Sjmp Main



Main: Mov Tmod,#01H

Mov r2,#16

Initialize: Mov Th0,#0BH

Mov Tl0,#0DBH

Setb Tr0

Jnb Tf0,$

Clr Tr0

Clr Tf0

Djnz r2,Initialize

Cpl P0.0

Mov r2,#16

Sjmp Initialize



End
==================
========================
========================
==================


آزمایش دوم : اتصال سون سگمنت به میکروکنترلر

با امید به اینکه اولین آزمایش را با موفقیت انجام دادید ، میریم سراغ آزمایش دوم که اتصال یک سون سگمنت به میکرو کنترلر و ساختن یک شمارنده هست . البته سون سگمنتی که من در لیست قطعات مورد نیاز آورده بودم از نوع 4 تایی مالتی پلکس شده هست و لازم میدونم تا قبل از اینکه به سراغ مطالب بعدی بریم مختصری در مورد تکنیک مالتی پلکس برای روشن کردن چندین سون سگمنت روی یک مسیر a ،b ،c ،d ،e ،f و g مشترک توضیح بدم .

برای اتصال مستقیم و بدون واسطه ی چندین سون سگمت به میکروکنترلر (بدون استفاده از تراشه های مبدل BCD به سون سگمنت مانند 7448 ) که سون سگمنتها به همون دلیلی که در مورد اتصال LED به میکروکنترلر گفتم حتماً بایستی از نوع آند مشترک باشند دو روش وجود دارد . روش اول اینه که هر سون سگمنت را به یکی از پورتهای میکرو وصل کنید . البته مقاومتهای محدود کننده ی جریان را هم که بین پایه های a تا g سون سگمنت و پورتهای میکرو قرار میگیرند نباید فراموش کنید . در صورت عدم قرار دادن این مقاومتها که مقدار آنها بسته به کیفیت سون سگمنت مورد استفاده بین 470اهم تا 5/1 کیلو اهم میتونه باشه ، هم سون سگمنتها و هم پورتهای میکرو آسیب میبینه . آند سون سگمنتها هم مستقیماً به 5+ ولت تغذیه وصل میشه . استفاده از این روش وقتی که تعداد سون سگمنتها بیشتر از یکی باشه و بخواهیم قطعات دیگه ای مثل صفحه کلید و یا مبدل آنالوگ به دیجیتال(ADC) و یا بالعکس (مبدل دیجیتال به آنالوگ یا DAC) را هم به میکرو متصل کنیم ، غیر ممکنه . زیرا میکروکنترلر 4 تا پورت بیشتر نداره و نمیشه همزمان چند تا سون سگمنت ، یک صفحه کلید و یک ADC را به میکرو وصل کرد . البته وقتی هر یک از سون سگمنتها را به یکی از پورتها وصل کنیم برنامه نویسی خیلی آسون میشه ولی در مقایسه با محدودیتی که از نظر سخت افزار برای ما ایجاد میکنه اهمیتی نداره .

راهکار دوم در اتصال بدون واسطه ی چندین سون سگمنت به میکروکنترلر استفاده از روش مالتی پلکس هست که صرفه جویی قابل توجهی را در تعداد پایه های مورد استفاده از میکروکنترلر به همراه داره . در این روش ابتدا پایه های مشابه سون سگمنتها به هم و سپس این پایه ها از طریق مقاومتهای محدود کننده ی جریان که مقدار آنها در مقایسه با حالتی که از روش مالتی پلکس استفاده نکنیم کمتر هست ، به میکرو متصل میشه . مقدار مقاومتها در این حالت برای 4 عدد سون سگمنت مالتی پلکس شده از نوع مرغوب 470 اهم می باشد . هر یک از پایه های آند سون سگمنتها هم از طریق یک ترانزیستور منفی بعنوان یک بافر ولتاژ به منظور افزایش جریاندهی پایه های میکرو در حالت منطق خروجی یک به یکی از پایه های میکرو وصل میشه . جزئیات بیشتر در این مورد را میتونید با دانلود کردن نقشه ی شماتیک از اینجا مشاهده کنید .

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

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



B A2 A3 f a A4





A1 g c p d e

بعد از توضیحاتی در مورد نحوه ی اتصال سون سگمنت به میکروکنترلر به سراغ نحوه ی اتصال یک کلید فشاری که در بازار به تاچ سوئیچ معروف هست میریم . به طور کلی اتصال کلید های فشاری به میکرو کنترلر برای وارد کردن مقادیر ورودی و تنظیم پارامترهای یک مدار ساخته شده توسط میکروکنترلر بسیار مرسوم است . عمل این کلیدها بدین صورت است که با فشرن کلید اتصال بین پایه های آن برقرار شده و با قطع فشار بر روی کلید این اتصال نیز قطع می شود . این کلیدها در دو نوع 2 و 4 پایه در بازار موجود می باشند که در نوع 4 پایه ، 2 تا از پایه ها از داخل کلید به همدیگر متصل هستند و در مجموع همان 2 پایه را عرضه میکنند که شما بهتر است برای آسانی کار از همان نوع 2 پایه استفاده کنید . برای اتصال کلید های 2 پایه به میکرو یکی از پایه ها را به زمین تغذیه یا همان صفر ولت و پایه ی دیگر را هم به یکی از پایه های میکرو وصل کنید . بهتر است این پایه متعلق به یکی از پورتهای 1 ، 2 یا 3 باشد . زیرا این پورتها مقاومتهای بالا کش درونی دارند و به همین دلیل پایه ی مورد نظر که کلید به آن وصل است در حالت عادی که کلید فشرده نشده در سطح منطقی یک بوده و پس از آنکه کلید فشرده شود به سطح منطقی صفر می رود و از اینرو میتوان توسط کنترل وضعیت منطقی پایه ای که کلید به آن متصل است به فشرده شدن کلید پی برد . البته شما می توانید از پورت P0 نیز برای اتصال کلید استفاده کنید به شرطی که مقاومت بالا کش خارجی به کار ببرید یعنی توسط یک مقاومت حدوداً 7/4 کیلو اهمی از خارج پایه ای که کلید به آن متصل شده را به 5+ ولت وصل کنید . سخت افزارکامل این آزمایش را که یک شمارنده ی پالس هست میتونید از اینجا دانلود کنید .

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



Zero Equ 0C0H

One Equ 0F9H

Two Equ 0A4H

Three Equ 0B0H

Four Equ 99H

Five Equ 92H

six Equ 82H

Seven Equ 0F8H

Eight Equ 80H

Nine Equ 90H

Timer0_Preload Equ -5000

seven_segment Data P0

anode1 Bit P3.0

anode2 Bit P3.1

anode3 Bit P3.2

anode4 Bit P3.3

Pulse_Input Bit P1.0



Org 0H

Sjmp Main

;----------------

Org 0BH

Ajmp Multiplex

;-----------------

Main: Mov Tmod,#01H

Mov IE,#82H

Mov Tl0,#low Timer0_Preload

Mov Th0,#high Timer0_Preload

Mov Dptr,#Number_Codes

Mov r2,#0

Mov 30H,#0

Mov 31H,#0

Mov 32H,#0

Mov 33H,#0

Mov 34H,#0

Mov 35H,#zero

Mov 36H,#zero

Mov 37H,#zero

Mov 38H,#zero

Setb Tr0

Pulse_Check: Jb Pulse_Input,$

Acall Delay

Jb Pulse_Input, Pulse_Check

Mov a,30H

Add a,#1

Da a

Mov 30H,a

jnz Updade_Numbers

Mov a,31H

Add a,#1

Da a

Mov 31H,a



Mov 32h,31H

Acall Decode

Mov 37H,33H

Mov 38H,34H



Updade_Numbers: Mov 32h,30H

Acall Decode

Mov 35H,33H

Mov 36H,34H



Jnb Pulse_Input,$

Sjmp Pulse_Check

;-----------------

Decode: Mov a,32H

Anl a,#0Fh

Movc a,@a+dptr

Mov 33H,a



Mov a,32H

Swap a

Anl a,#0Fh

Movc a,@a+dptr

Mov 34H,a



Ret

;-----------------

Delay: Mov 39H,#50

Back: Mov 3AH,#100

Djnz 3AH,$

Djnz 39H,Back

ret

;-----------------------------

Multiplex: Clr Tr0

Mov Tl0,#low Timer0_Preload

Mov Th0,#high Timer0_Preload

Setb Tr0

Inc r2



Cjne r2,#1,Show_Dahgan

Clr anode4

Mov seven_segment,35H

Setb anode1

Reti



Show_Dahgan: Cjne r2,#2,Show_Sahgan

Clr anode1

Mov seven_segment,36H

Setb anode2

Reti



Show_Sahgan: Cjne r2,#3,Show_Yekanhezar

Clr anode2

Mov seven_segment,37H

Setb anode3

Reti



Show_Yekanhezar: Mov r2,#0

Clr anode3

Mov seven_segment,38H

Setb anode4

Reti

;----------------------------

Cseg at 180H

Number_Codes: db Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine

End



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

قسمت اول دستوراتی هست که تا قبل از دستور Org 0H قرار داره . این دستورات اصطلاحاً دایرکتیو نامیده میشه ، زیرا دستورات واقعی اسمبلی نیست و فقط به منظور افزایش خوانایی و قابلیت استفاده از زیر روالها در برنامه های مشابه به کار میره . مثلاً با دستور Zero equ 0C0H مقدار C0H به ثابت Zero ، با دستور Seven_Segment Data P0 نام مستعار Seven_Segment به پورت P0 و با دستور Anode1 bit P3.0 نام مستعار Anode1 به پایه ی P3.0 انتساب داده میشه . در واقع بعد از این دستورات هر جا اسمبلر به نامهای مستعار برخورد کنه ، مقادیر واقعی را جایگذاری میکنه .

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

قسمت سوم همون حلقه ی اصلی برنامه هست که در این قسمت دائماً وضعیت منطقی پایه ی P1.0 برای دریافت یک لبه ی پاین رونده بررسی میشه و نرم افزار حذف چندین فشردگی پشت سر هم یا اصطلاحاً Debounce هم برای آن نوشته شده که با کمی بررسی میتونید به نحوه ی عملکرد آن پی ببرید . در صورت تشخیص یک پالس صحیح محتوای خانه ی 30H به داخل انباره(رجیستر A) کپی شده ، پس از جمع انباره با عدد 1 و تصحیح اعشاری آن ، محتوای انباره مجدداً به داخل خانه ی 30H کپی می شود . خانه ی 30H از حافظه محتوی اعداد یکان و دهگان شمارنده است که به فرم BCD بوده و به ترتیب در نیبلهای پایین و بالای آن قرار دارند . در صورتی که محتوای این خانه صفر شود که به منزله ی دریافت 100 پالس می باشد ، اعمالی که ذکر آنها در مورد خانه ی 30H گفته شد ، در مورد خانه ی 31H صورت می گیرد که در بردارنده ی صدگان و یکان هزار شمارنده است . پس از آن زیر برنامه ی Decode به منظور به هنگام کردن عددی که سون سگمنتها نشان می دهند فراخانی میشود که در ذیل توضیح داده میشود .

قسمت چهارم برنامه را به لحاظ اهمیتی که از نظر ساختار و نحوه ی عملکرد دارد میتوان زیر برنامه ی Decode دانست . نوشتن این زیر برنامه به روش زبانهای برنامه نویسی سطح بالا مانند C صورت گرفته است . این زیر برنامه یک ورودی و دو خروجی دارد که ورودی به خانه ی 32H ارسال شده و خروجیها در خانه های 33H و 34H از حافظه قرار داده می شوند . عملکرد این زیر برنامه به این صورت است که کد متناظر برای نمایش اعداد BCD روی سون سگمنت را برای نیبلهای بالا و پایین بایت ورودی (خانه ی 32H) با استفاده از دستور Movc a,@a+dptr از جدولی که در انتهای برنامه است استخراج کرده ، کد متناظر با نیبل پایین را در خانه ی 35H و کد متناظر با نیبل بالا را هم در خانه ی 36H قرار میدهد . قبل از فراخوانی این زیر برنامه بایستی بایت ورودی در خانه ی 32H قرارداده شود و پس از دستور فراخوانی (Acall Decode) ، محتوای خانه های 33H و 34H به خانه های مورد نظر برای نمایش روی سون سگمنت منتقل شود . همان طوری که می بینید این زیر برنامه پس از دریافت هر پالس و افزایش خانه های 30H و در صورت لزوم 31H که محتوی اعداد BCD هستند ، فراخوانی می شود تا اعداد نمایش داده شده روی سون سگمنت ها به هنگام شوند .

قسمت پنجم و در واقع آخرین قسمت برنامه زیر روال وقفه ی تایمر صفر هست که وظیفه ی مالتی پلکس کردن سون سگمنتها را بر عهده دارد و با برچسب Multiplex مشخص گردیده . این زیر روال با توجه به مقدار دهی اولیه ثباتهای تایمر یعنی TL0 و TH0 ، پس از هر 5 میلی ثانیه (در صورت استفاده از کریستال 12MHZ) ، یکبار اجرا می شود و یکی از سون سگمنتها را به مدت 5 میلی ثانیه روشن می کند . پس از هر سرریز تایمر و رخ دادن وقفه ، محتوای ثبات r2 یک واحد افزایش پیدا می کند و با توجه به مقدار آن که بین 1 تا 4 است ، ابتدا آند سون سگمنت قبلی صفر شده ، سپس محتوای خانه ی مورد نظر برای نمایش روی سون سگمنت مورد نظر بر روی پورت P0 که به پایه های a تا g سون سگمنتها متصل است قرار گرفته و در پایان پایه ی آند سون سگمنت مورد نظر ، یک می شود . در واقع در هر لحظه فقط یکی از سون سگمنتها و به مدت 5 میلی ثانی روشن است که چون اثر آن تا زمانی که دوباره روشن شود روی شبکیه باقی می ماند ، عمل مالتی پلکس توسط چشم تشخیص داده نمی شود و روشنی سون سگمنتها پیوسته به نظر می رسد . در صورت افزایش مقدار اولیه ثباتهای TL0 و TH0 یعنی تغییر عدد 5000- به 8000- که به ثابت Timer0_Preload انتساب داده شده ، میتونید عمل مالتی پلکس را ببینید .

امیدوارم از این آزمایش و توضیحاتی که در مورد سخت افزار و نرم افزار آن دادم استفاده ی لازم را برده باشید و این مطالب برای شما سودمند واقع شده باشه . با اعمال تغییرات کمی در سخت افزار و نرم افزار این آزمایش ، یک ساعت دیجیتالی درست کردم که دوستان علاقمند میتونند با ارسال یک Email به من به آدرس stobaei@yahoo.com مبنی بر درخاست نقشه شماتیک و نرم افزار میکرو ، نقشه و نرم افزار را از طریق Email دریافت کنند .

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



آزمایش سوم : اتصال صفحه کلید به میکروکنترلر

با امید به اینکه آزمایشهای قبلی را با موفقیت انجام داده اید و با پوزش از عزیزانی که منتظر آپدیت شدن وبلاگ بوده اند به سراغ آزمایش سوم می رویم که اتصال صفحه کلید ماتریسی 16 تایی به میکروکنترلر می باشد و کاربردهای زیادی در اکثر پروژه های مبتنی بر مییکروکنترلر دارد . نقشه ی شماتیک سخت افزار را می توانید از اینجا دانلود کنید و نرم افزار را هم که در زیر مشاهده می کنید همان نرم افزاری است که در کتاب «میکروکنترلر 8051» نوشته ی محمد علی مزیدی برای اتصال صفحه کلید ماتریسی 16 تایی به میکروکنترلر پیشنهاد شده است . با این تفاوت که نرم افزار موجود در کتاب از 2 پورت استفاده می کند ولی نرم افزاری که در اینجا مشاهده می کنید برای استفاده از یک پورت بهینه شده است و برای نمایش اعداد مربوط به کلید های فشرده شده نیز از 4 عدد سون سگمنت که به روش مالتی پلکس بسته شده اند بهره می برد . توضیحات لازم در مورد نرم افزار صفحه کلید را در ذیل آن مشاهده می کنید و در مورد نرم افزار مالتی پلکس هم در آزمایش قبل به طور مفصل توضیح داده شده است .



Zero Equ 0C0H

One Equ 0F9H

Two Equ 0A4H

Three Equ 0B0H

Four Equ 99H

Five Equ 92H

six Equ 82H

Seven Equ 0F8H

Eight Equ 80H

Nine Equ 90H

_A Equ 88H

_B Equ 83H

_C Equ 0C6H

_D Equ 0A1H

_E Equ 86H

_F Equ 8EH



Timer0_Preload Equ -5000

seven_segment Data P0

KeypadPort Data P1

Yekan Data 35H

Dahgan Data 36H

Sadgan Data 37H

Yekan_Hezar Data 38H

Anode1 Bit P3.0

Anode2 Bit P3.1

Anode3 Bit P3.2

Anode4 Bit P3.3

;*******************************

Org 0H

Sjmp Main

;*******************************

Org 0BH

Ajmp Multiplex

;*******************************

Main: Mov Tmod,#01H

Mov IE,#82H

Mov r2,#0

Mov Yekan,#Zero

Mov Dahgan,#Zero

Mov Sadgan,#Zero

Mov Yekan_Hezar,#Zero

Mov Tl0,#low Timer0_Preload

Mov Th0,#high Timer0_Preload

Setb Tr0



Back1: Mov KeypadPort,#11110000B

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Back1

Back2: Acall Delay

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Over

Sjmp Back2

Over: Acall Delay

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Over1

Sjmp Back2

;* * * * * * * * * * * * * * * *

Over1: Mov KeypadPort,#11111110B

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Row_0

;* * * * * * * * * * * * * * * *

Mov KeypadPort,#11111101B

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Row_1

;* * * * * * * * * * * * * * * *

Mov KeypadPort,#11111011B

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Row_2

;* * * * * * * * * * * * * * * *

Mov KeypadPort,#11110111B

Mov a,KeypadPort

Anl a,#11110000B

Cjne a,#11110000B,Row_3

Ajmp Back2

;* * * * * * * * * * * * * * * *

Delay: Mov 40h,#50

Back3: Mov 41h,#100

Djnz 41h,$

Djnz 40h,Back3

Ret

;* * * * * * * * * * * * * * * *

Row_0: Mov Dptr,#Kcode0

Sjmp Find

Row_1: Mov Dptr,#Kcode1

Sjmp Find

Row_2: Mov Dptr,#Kcode2

Sjmp Find

Row_3: Mov Dptr,#Kcode3

;* * * * * * * * * * * * * * * *

Find: Rlc a

Jnc Match

Inc dptr

Sjmp Find

;* * * * * * * * * * * * * * * *

Match: Clr a

Movc a,@a+Dptr



Mov Dptr,#NumberCodes

Movc a,@a+Dptr

Mov Yekan_Hezar,Sadgan

Mov Sadgan,Dahgan

Mov Dahgan,Yekan

Mov Yekan,a

Ajmp Back1

;*******************************

Multiplex: Clr Tr0

Mov Tl0,#low Timer0_Preload

Mov Th0,#high Timer0_Preload

Setb Tr0

Inc r2



Cjne r2,#1,Show_Dahgan

Clr Anode4

Setb Anode1

Mov seven_segment,Yekan

Reti



Show_Dahgan: Cjne r2,#2,Show_Sahgan

Clr Anode1

Setb Anode2

Mov seven_segment,Dahgan

Reti



Show_Sahgan: Cjne r2,#3,Show_Yekanhezar

Clr Anode2

Setb Anode3

Mov seven_segment,Sadgan

Reti



Show_Yekanhezar: Mov r2,#0

Clr Anode3

Setb Anode4

Mov seven_segment,Yekan_Hezar

Reti

;*******************************

Cseg at 170H

Kcode0: Db 3,2,1,0

Kcode1: Db 7,6,5,4

Kcode2: Db 11,10,9,8

Kcode3: Db 15,14,13,12

;*******************************

Cseg at 180H

NumberCodes: Db Zero,One,Two,Three,Four,Five,Six,seven,Eight,Nine,_A,_B,_C,_ D,_E,_F

End



به طوری که در نقشه ی شماتیک مشاهده می کنید سطرها به 4 بیت کم ارزشتر و ستونها نیز به 4 بیت پرارزشتر پورت P1 متصل شده اند . نرم افزار مربوط به صفحه کلید را می توان به 4 قسمت تقسیم کرد که عملکرد هر قسمت به شرح ذیل است .

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

در قسمت دوم نرم افزار ، برای یافتن کلید فشرده شده ستونها بوسیله یک حلقه نامتناهی مکرراً پویش می شوند تا یکی از آنها حاوی صفر شود . ذکر این نکته ضروری است که لچ های خروجی متصل به سطرها هنوز صفرهای خود را که در مرحله ی قبل تهیه شده اند دارند . نرم افزار پس از تشخیص فشردگی کلید ، با فراخوانی زیر روال Delay ، 20 میلی ثانیه برای حذف جهش ناشی از اتصال کلید صبر کرده و دوباره ستونها را پویش می کند . این کار دو مزیت دارد : 1- اطمینان از اینکه اولین تشخص فشردگی به دلیل پارازیت و نویز نبوده و 2- تأخیر 20 میلی ثانیه ای موجب می شود تا تا فشردن کلید مذکور بعنوان چندین فشردگی تعبیر نشود . اگر بعد از تأخیر 20 میلی ثانیه ، باز هم کلید فشرده شده تشخیص داده شد ، برنامه برای یافتن سطری که کلید فشرده شده در آن است به مرحله ی بعدی می رود و در غیر این صورت به حلقه ی تشخیص کلید فشرده شده ی واقعی بر می گردد .

در قسمت سوم ، نرم افزار به منظور تشخیص سطری که کلید فشرده شده در آن است ، هر بار فقط به یکی از سطرها صفر اعمال کرده و ستونها را بررسی می کند . اگر همه ی ستون ها در سطح بالا باشند بدین معناست که کلید فشرده شده متعلق به این سطر نیست . بنابراین به سطر بعدی صفر اعمال کرده و این عمل را تا یافتن سطر متعلق به کلید تکرار می کند . پس از مشخص شدن سطر متعلق به کلید فشرده شده ، ابتدا آدرس برچسبی که کدهای مربوط به آن سطر در آن تعریف شده اند به درون ثبات Dptr بار شده (مثلاً به صورت Mov Dptr,#Kcode0) و سپس برنامه برای یافتن کد مربوط به کلید فشرده شده به مرحله بعد می رود .

برای شناسایی کلید فشرده شده ، ثبات a که محتوی پورت متصل به صفحه کلید است ، از طریق پرچم نقلی به چپ چرخانده شده (با دستور Rlc a) و صفر بودن پرچم نقلی بررسی می شود . اگر پرچم نقلی صفر باشد ابتدا محتوای ثبات a صفر شده و سپس با دستور Movc a,@a+Dptr کد مربوط به کلید فشرده شده به درون ثبات a منتقل می شود . در صورتی که پرچم نقلی صفر نباشد ثبات Dptr برای اشاره به مکان بعدی در آدرس مورد نظر یک واحد افزایش می یابد .

در این مرحله ثبات a حاوی کد مربوط به کلید فشرده شده است که عددی بین 0 تا 15 می باشد . ولی برای نمایش این کد روی سون سگمنت می بایست به کد متناظر آن تبدیل شود که این کار نیز با استفاده از روش آدرس دهی اندیسی صورت می گیرد . البته می توان کدهای مربوط به اعداد و کاراکترها برای نمایش روی سون سگمنت را مستقیماً در محلهایی که با برچسب های Kcode0 تا 3 مشخص شده اند قرار داد تا دیگر به فرآیند تبدیل کد نیازی نباشد ولی در صورتی که بخواهیم با کدهای صفحه کلید عملیات محاسباتی انجام دهیم بایستی به همین روشی که در برنامه به کار رفته عمل کنیم .

اگر ترتیب اتصال سطرها و ستونها به پورتP1 مطابق نقشه ی شماتیک باشد ، با فشردن هر کلید عدد و یا کاراکتری که در نقشه ی شماتیک در زیر هر کلید است بر روی سون سگمنت نشان داده می شود . در صورتی که شما ترتیب دیگری را برای کلیدها انتظار دارید می توانید با دستکاری جدولی که در انتهای برنامه و با آدرسهای Kcode0 تا 3 تعریف شده به ترتیب مورد نظر برسید

منبع http://www.vis.ir
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست




ویرایش توسط دانه کولانه : 12-22-2008 در ساعت 05:01 PM
پاسخ با نقل قول
  #9  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض میکروکنترلرهای AVR و مدارات منطقی AVR Microcontroller Quick Reference Guide

میکروکنترلرهای AVR و مدارات منطقی AVR Microcontroller Quick Reference Guide

اين مقاله اطلاعات كلي در مورد ساختار داخلي و انواع مختلف ميكروهاي AVR و همچنين مزاياي آنها نسبت به نمونه هاي قبلي 8051 پرداخته است.در ترجمه آن سعي كردم بيشتر از لغات فارسي معادل استفاده كنم با اينكه خودم زياد راضي نيستم ولي چاره اي نداشتم بايد فارسي را پاس بداريم ! حتما مي دانيد كه براي برخي لغات تخصصي انگليسي هيچ معادل فارسي وجود ندارد به خاطر همين در بعضي از قسمتها خود لغت انگيسي را آورده ام كه فهم صحيح آن بستگي به تجربه ي خواننده دارد.مسلم است كه اگر شما درباره ي ميكروكنترلرها پيش زمينه اي داشته باشيد آنگاه آمادگي بيشتري براي فهم اين مقاله خواهيد داشت پس اگر يك خواننده مبتدي در ميكروكنترلرها هستيد ممكن است در درك برخي مطالب كمي دچار مشكل شويد البته كمي ! كه با پرسيدن چند سوال كوچك از كسي كه اينكاره است مي توانيد بعضي ابهامات را برطرف كنيد.اميدوارم هميشه پيروز و شاد باشيد .

مقدمه اي بر ميكروكنترلرهاي AVR
ميكروهاي AVR داراي انعطاف پذيري غير قابل مقايسه و بي همتايي هستند.آنها قادر به تركيب هر نوع كدي با يك معماري كارامد از طريق زبانهاي C و Assembly هستند و قادرند از طريق اين برنامه ها تمام پارامترهاي ممكن در يك سيكل يا چرخه ماشين را با دقت بسيار بالا هماهنگ كنند.ميكرو AVR داراي معماريي است كه ميتواند در تمام جهات مورد استفاده شما،عمل كند ميكرو AVR معماريي دارد كه براي شما كارايي 16 بيتي ارائه مي دهد كه البته قيمتش به اندازه يك 8 بيتي تمام مي شود.
بهره هاي كليدي AVR :
داراي بهترين MCU براي حافظه فلش در جهان ! (MCU: Master Control Unit)
داراي سيستمي با بهترين هماهنگي
داراي بالاترين كارايي و اجرا در CPU (يك دستورالعمل در هر سيكل كلاك)
داراي كدهايي با كوچكترين سايز
داراي حافظه خود برنامه ريز
داراي واسطه JTAG كه با IEEE 1149.1 سازگار است
(IEEE: Institute of Electrical and Electronics Engineers.)
داراي سخت افزار ضرب كننده روي خود
داراي بهترين ابزارها براي پيشرفت و ترقي
داراي حالات زيادي براي ترفيع دادن يا Upgrade .
واژگان كليدي AVR :
ميكرو كنترلر AVR به منظور اجراي دستورالعملهاي قدرتمند در يك سيكل كلاك(ساعت) به اندازه كافي سريع است و مي تواند براي شما آزادي عملي را كه احتياج داريد به منظور بهينه سازي توان مصرفي فراهم كند.
ميكروكنترلر AVR بر مبناي معماري RISC(كاهش مجموعه ي دستورالعملهاي كامپيوتر) پايه گذاري شده و مجموعه اي از دستورالعملها را كه با 32 ثبات كار ميكنند تركيب مي كند.
به كارگرفتن حافظه از نوع Flash كه AVR ها به طور يكسان از آن بهره مي برند از جمله مزاياي آنها است.
يك ميكرو AVR مي تواند با استفاده از يك منبع تغذيه 2.7 تا 5.5 ولتي از طريق شش پين ساده در عرض چند ثانيه برنامه ريزي شود يا Program شود.
ميكروهاي AVR در هرجا كه باشند با 1.8 ولت تا 5.5 ولت تغذيه مي شوند البته با انواع توان پايين (Low Power)كه موجودند.
راه حلهايي كه AVR پيش پاي شما مي گذارد، براي يافتن نيازهاي شما مناسب است:
با داشتن تنوعي باور نكردني و اختيارات فراوان در كارايي محصولات AVR، آنها به عنوان محصولاتي كه هميشه در رقابت ها پيروز هستند شناخته شدند.در همه محصولات AVR مجموعه ي دستورالعملها و معماري يكسان هستند بنابراين زماني كه حجم كدهاي دستورالعمل شما كه قرار است در ميكرو دانلود شود به دلايلي افزايش يابد يعني بيشتر از گنجايش ميكرويي كه شما در نظر گرفته ايد شود مي توانيد از همان كدها استفاده كنيد و در عوض آن را در يك ميكروي با گنجايش بالاتر دانلود كنيد.
خانواده هاي محصولات AVR :
Tiny AVR:
ميكروكنترلري با اهداف كلي و با بيش از 4 كيلو بايت حافظه فلش و 128 بايت حافظه استاتيك و قابل برنامه ريزي است.(منظور از حافظه استاتيك SRAM و حافظه قابل برنامه ريزي EEPROM است.)
Mega AVR:
اين نوع ميكروها قابليت خود برنامه ريزي دارند و مي توان آنها را بدون استفاده از مدارات اضافي برنامه ريزي كرد همچنين بيش از 256K بايت حافظه فلش و 4K بايت حافظه استاتيك و قابل برنامه ريزي دارند.
LCD AVR:
اين نوع ميكرو داراي درايور براي نمايشگر LCD با قابليت كنترل اتوماتيك تباين و مقايسه تصوير مي باشد.باعث تمديد عمر باتري مي شود و در حالت فعال داراي توان مصرفي پاييني است.
توان مصرفي پايين:
توان مصرفي پايين آنها براي استفاده بهينه از باتري و همچنين كاربرد ميكرو در وسايل سيار و سفري طراحي شده كه ميكروهاي جديد AVR با توان مصرفي كم از شش روش اضافي در مقدار توان مصرفي ، براي انجام عمليات بهره مي برند.
اين ميكروها تا مقدار 1.8 ولت قابل تغذيه هستند كه اين امر باعث طولاني تر شدن عمر باتري مي شود.
در ميكروهاي با توان پايين ، عمليات شبيه حالت Standby است يعني ميكرو مي تواند تمام اعمال داخلي و جنبي را متوقف كند و كريستال خارجي را به همان وضعيت شش كلاك در هر چرخه رها كند!
ابعاد مختلف ميكروهاي AVR را در اشكال زير مشاهده مي كنيد:
AVR هاي مدل tiny:
به خود اجازه ندهيد كه نام آن شما را گول بزند... ميكروهاي مدل tiny توانايي هاي عظيمي دارند.به خاطر كوچك بودن و داشتن MCU بسيار پر قدرت به اينگونه ميكروها نياز فراواني هست آنها به هيچ منطق خارجي نياز نداشته و به همراه يك مجتمع مبدل آنالوگ به ديجيتال و يك حافظه قابل برنامه ريزي EEPROM قابليتهاي خود را ثابت مي كنند.
نكات كليدي و سودمند مدل Tiny :
آنها به منظور انجام يك عمليات ساده بهينه سازي شده و در ساخت وسايلي كه به ميكروهاي كوچك احتياج است كاربرد فراوان دارند.
كارايي عظيم آنها براي ارزش و بهاي وسايل موثر است.
AVR هاي مدل Mega:
اگر شما به ميكرويي احتياج داريد كه داراي سرعت و كارايي بالا باشد و توانايي اجراي حجم زيادي از كد برنامه را داشته و بتواند داده هاي زيادي را سروسامان دهد بايد از AVR هاي مدل Mega استفاده كنيد آنها به ازاي هر يك مگا هرتز سرعت ، توانايي اجراي يك ميليون دستورالعمل در هر يك ثانيه را دارند همچنين قابل برنامه ريزي و بروزرساني كدها با سرعت و امنيت بسيار بالايي هستند.
نكات كليدي و سودمند مدل Mega :
حافظه سريع از نوع فلش با عملكرد خود برنامه ريز و بلوكه ي بوت (Boot Block)
دقت بسيار بالاي 8-كانال در تبديل آنالوگ به ديجيتال 10 بيتي
USART و SPI و TWI بر طبق واسطه هاي سريال
واسطه ي JTAG بر طبق IEEE 1149.1
TWI: Two Wire Interface is a byte oriented interface
USART: Universal Serial Asynchronous Receiver/Transmitter
SPI: Serial Peripheral Interface
JTAG available only on devices with 16KB Flash and up
واسط JTAG فقط در ميكروهاي با بيش از 16 كيلوبايت حافظه فلش موجود است.
AVR هاي مدل LCD:
آنها با بالاترين يكپارچگي و انعطاف پذيري ممكن طراحي شده اند و با داشتن درايور LCD و كنترلر اتوماتيك وضوح تصوير ،بهترين واسطه را با انسان دارند و داراي توان مصرفي پايين و كارايي بالايي هستند.اولين عضو اين خانواده 100 سگمنت داشت و داراي يك UART و SPI به منظور ارتباط به صورت سريال بود.
نكات كليدي وسودمند مدل LCD :
كارايي فوق العاده با سرعت يك ميليون دستورالعمل در ثانيه به ازاي يك مگاهرتز
واسطه ها براي ارتباط با انسان: وقفه هاي صفحه كليد و درايور نمايشگر LCD
آنها اين اجازه را به طراح سيستم مي دهند كه توان مصرفي را در برابر سرعت پردازش تا جايي كه امكان دارد بهينه كند.
نكات كليدي و سودمند حافظه ي فلش خود برنامه ريز:
قابليت دوباره برنامه ريزي كردن بدون احتياج به اجزاي خارجي
128 بايت كوچك كه به صورت فلش سكتور بندي شده اند
داشتن مقدار متغير در سايز بلوكه ي بوت (Boot Block)
خواندن به هنگام نوشتن
بسيار آسان براي استفاده
كاهش يافتن زمان برنامه ريزي
كنترل كردن برنامه ريزي به صورت سخت افزاري
راههاي مختلف براي عمل برنامه ريزي:
موازي يا Parallel :
يكي از سريعترين روشهاي برنامه ريزي
سازگار با برنامه نويس هاي(programmers) اصلي
خود برنامه ريزي توسط هر اتصال فيزيكي:
برنامه ريزي توسط هر نوع واسطه اي از قبيل TWI و SPI و غيره
دارا بودن امنيت صد درصد در بروزرساني و كدكردن
ISP:
واسطه سه سيمي محلي براي بروزرساني سريع
آسان و موثر در استفاده
واسطه JTAG :
واسطه اي كه تسليم قانون IEEE 1149.1 است و مي تواند به صورت NVM برنامه ريزي كند يعني هنگام قطع جريان برق داده ها از بين نروند.استفاده از فيوزها و بيتهاي قفل.
بيشتر براي ديباگ كردن آنچيپ و به منظور تست استفاده مي شود
نرم افزار ارائه شده توسط شركتATMEL به نام AVR Studio 4 :
اين نرم افزار به صورت رايگان در سايت شركت ATMEL قرار دارد مي توانيد با رجوع به آدرس http://www.atmel.com آن را دانلود كنيد.
اين نرم افزار در حقيقت يك اسمبلر براي محصولات AVR اتمل است و به صورت كاملا ويژوالي است.
مي تواند با انواع دستگاههاي برنامه نويس ميكرو ارتباط برقرار كند و كدها را در ميكرو دانلود كند.و قابليت ترجمه كدها به زبانهاي C و Assembly را دارد .

منبع http://avr-logicalcircuit.blogspot.com
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
  #10  
قدیمی 10-20-2008
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض پروگرامر ميكروكنترلر هاي سري 8051

پروگرامر ميكروكنترلر هاي سري 8051
اين پروگرامر قابليت برنامه ريزي ميکروهاي سري 8051 را دارا ميباشد.
از قابليتهاي اين پروگرامر مي توان به موارد زير اشاره کرد:
-
قابليتاتصال از طريق پورت سريال
-
شناسايي ميکروکنترلر بصورت خودکار
-
بازبينياطلاعات
-
شناسايي سخت افزار بصورت خودکار
ميکروکنترلري که روي چيپ نياز است را بايد با برنامه EZ52.hex برنامه ريزي کرد .
بقيه قطعات را طبق شماتيک تهيه و از آن لذت ببريد. برگرفته از سایت IC4IR.com


http://electronic.persiangig.com/Sof...loader8051.zip
منبع اینجا
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست



پاسخ با نقل قول
پاسخ


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 

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

BB code is فعال
شکلک ها فعال است
کد [IMG] فعال است
اچ تی ام ال غیر فعال می باشد



اکنون ساعت 01:45 AM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.



Powered by vBulletin® Version 3.8.4 Copyright , Jelsoft Enterprices مدیریت توسط کورش نعلینی
استفاده از مطالب پی سی سیتی بدون ذکر منبع هم پیگرد قانونی ندارد!! (این دیگه به انصاف خودتونه !!)
(اگر مطلبی از شما در سایت ما بدون ذکر نامتان استفاده شده مارا خبر کنید تا آنرا اصلاح کنیم)


سایت دبیرستان وابسته به دانشگاه رازی کرمانشاه: کلیک کنید




  پیدا کردن مطالب قبلی سایت توسط گوگل برای جلوگیری از ارسال تکراری آنها