X
تبلیغات
گروه نرم افزاری حامیا - ..::.. Circuit Design ..::..

گروه نرم افزاری حامیا

Free Visual Basic Code,Free Visual Code,Free PHP Code,Free ASP Code,free Java Code,Free Mobile Softw

راهنمای استفاده از lcd

راهنمای استفاده از lcd

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



Lcd برای اطلاع دادن به کاربر سیستم و یا نمایش داده های پردازش شده و اخطار و... کاربرد دارد . سیستم ATM یا خود پرداز بانک را در نظر بگیرید پس از قرار دادن کارت در دستگاه سیستم از شما خواهد خواست تا زبان مورد نظر را وارد کنید و سپس کلمه رمز را از شما خواهد پرسید . در صورتی که کلمه رمز را اشتباه وارد کنید به شما اطلاع داده می شود و ... در اینجا LCD دقیقا به جای زبان دستگاه عمل می کند.
یکی از مشخصه های LCD ها تعداد سطر و ستون است، lCDها در انواع مختلف در بازار موجودند از منظر این تقسیم بندی ،LCD های 4*16, 4*20 و هر یک ازاین LCD ها می توانند دارای 14 یا 16 پایه می باشند شکل یک LCD را درشکل زیر می بینید.



LCD به طور استاندارد دارای 14 پایه است این 14 پایه برای کار کردن با LCD ضروری است در جدول زیر مشخصات پایه های LCD آمده است :



پایه شماره یک به زمین مدار متصل می شود. پایه شماره دو ولتاژ تغذیه LCD است که به ولتاژ 5 ولت متصل مشود.
Vo ولتاژ تنظیم کنتراست متن نمایشی را تنظیم می کند . این پایه هم می تواند به زمین متصل شود و هم می تواند به یک پتانسیو متر به صورت زیر متصل گردد.



RS : این پایه تعیین می کند که اطلاعاتی که به LCD فرستاده می شود دستور است یا داده . در صورتی که مقدار این پایه را HIGH قرار دهیم یعنی اطلاعات ارسالی داده است و در صورتی که این پایه صفر باشد یعنی اطلاعات ارسالی یک دستور است.

R/W :
این پایه LCD را در مد خواندن یا نوشتن قرار می دهد . هنگامی که می خواهیم اطلاعات LCD را بخوانیم آن را در مد Read قرار می دهیم این کار با استفاده از HIGH کردن این پایه انجام می شود .مد Write با استفاده از قرار دادن این پایه در حالتLOW ولتاژ صورت می گیرد.

E :
این پایه فعال ساز lcd است .(Enable)

DB0..DB8:

8 بیت اطلاعات ارسالی و دریافتی LCD با استفادهاز این 8 پایه صورت می گیرد .این 8 پایه باس داده برای LCD هستند.

بعضی LCD هادارای 16 پایه می باشند که علاوه بر 14 پایه تشریح شده در بالا دارای دو پایه برای نور زمینه LCD هستند پایه شماره 15 برای آند و پایه 16 برای کاتد LCD می باشد.

دستورات مربوط به LCD :

هنگام استفاده از میکرو یا کامپیوتر برای استفاده از LCD ،سه پایه از LCD دارای اتصالات ثابتی هستند . پایه شماره یک به زمین مدار پایه شماره دو به VCC و پایه شماره سه هم می تواند به یک پتانسیو متر یا به زمین مدار وصل شود .بقیه پایه ها که شامل 8 پین داده و 3 پین کنترلی است می تواند به میکروکنترلر یا به کامپیوتر متصل شود.دستورات LCD بااستفاده از این پایه ها به LCD فرستاده می شوند.

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



در جدول بالا ستون اول نام دستور و سپس مقادیری که به 9 پایه LCD باید اعمال شود آمده است این مقادیر مقادیر منطقی است که باید به سطح ولتاژ TTL تبدیل شود یعنی 1 معادل 5 ولت و 0 معادل صفر ولت است. در نهایت در ستون آخر تعداد سیکلهایی که هر کدام از دستورات برای اجرا لازم دارند تا اجرای دستور تکمیل شود آمده است.
در صورتی که به جدول بالا دقت کنید می بینید که هر کدام از دستورات با دستروات قبلی خود یک بیت فرق دارند این عمل خطای ارسال داده را برای تفکیک دو دستور از هم به حداقل می رساند .
توضیح بعضی از دستورات به صورت زیر خواهد بود.
دستور NOP هیچ عملیاتی را انجام نمی دهد 9 بیت این دستور همگی صفر هستند.
دستور Clear Display نمایشگر را پاک می کندو مکان نما را در ابتدای آن در مکان صفر قرار می دهد( گوشه ی چپ – بالا )

Entry Mod Set:
در این دستور LCD ، جهت حرکت مکان نما مشخص می شود.بیت S شیفت صفحه نمایش به صورت خودکار را مشخص می کند.

Display:
بیت D از 9 بیت این دستور Lcd را روشن می کند . و بیت C هم مکان نما را روشن یا خاموش می کند.. در صورتی که بیت B ،HIGH باشد مکان نما چشمک زن خواهد بود (blinking)

Busy Flag:
هنگامی که دستوری به LCD داده یم شود LCD در حین اجرای دستور ، BF را ست می کند تا نشان دهد فعلا مشغول پردازش است .به محض اینکه انجام دستور به پایان رسید بیت BF صفر می شود تا LCD آمادگی خود را برای گرفتن دستور بعدی اعلام کند.
READ،WRITE:
با استفاده از این دستورات در DDRAM،CGRAM می توان نوشت یا اطلاعات را از آنها خواند .این دو دستور جزء پر کاربرد ترین دستوراتLCD هستند.
در جدو ل بالا بیت هایی که با علامت X مشخص شده اند به این معنی است که مقدار بیت ، اینکه صفر است یا یک هیچ تاثیری در دستور ندارد.(Don’t Care)
راهنمای بیتهایی که در جدول بالا نوشته شده است در جدول زیر آمده است.



برای مثال در دستور Cursor Display Shift بیتR/L به این صورت معنی شده است که در صورتی که این بیت 1 باشد شیفت به راست صورت می گیرد و در صورتی که صفر باشد شیفت به چپ صورت می گیرد .

کاراکتر ها در LCD:

LCD ها می توانند 20*4 و یا 16*4 و... باشند LCD 20*4 یعنی اینکه تعداد سطر های LCD 4 و تعداد ستونهای آن 20 می باشد.که این LCD جمعا 80 کاراکتر را می تواند نمایش دهد (در هر صفحه بدون شیفت)
هر کاراکتر به وسیله روشن و خاموش کردن سلول های یک ماتریس 10*5یا 8*5 به نمایش در می آید . LCD می تواند با دو اندازه فونت کاراکتر ها را نمایش دهد در اندازه فونت کوچک از ماتریس 8*5 و در اندازه فونت بزرگ از ماتریس 10*5 استفاده می کند.اندازه فونت استفاده شده توسط بیتF دستور Function Set از مجموعه دستورات LCD تنظیم می شود (جدول دستورات و راهنمای آن را ببینید!)


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




فرض کنید که می خواهیم در ستون اول خط سوم LCD یک کاراکتر را بنویسیم قبل از ارسال کاراکتر به LCD باید آدرس خانه مورد نظر را شناسایی کنیم .مطابق شکل بالا می بینیم که آدرس مکان کاراکتر سطر سوم و ستون اول 14 در مبنای 16 می باشد.
مقدار دهی اولیه LCD:

LCD هم مانند اجزاء میکرو کنترلر قبل از استفاده باید مقدار دهی اولیه شود.یک سری تنظیمات همیشه باید قبل از استفاده از LCD انجام گیرد.فلو چارت زیر نحوه انجام این تنظیمات را نشان می دهد.این تنظیمات برای عملیات 8 بیتی و فلوچارت بعدی برای عملیات 4 بیتی می باشد توضیحات خود فلوچارت کاملا گویاست و نیازی به توضیح اضافی ندارد.



 



CGRAM OR DDRAM:

LCD دارای دو حافظه بانامهای CGRAM , DDRAM است ِDDRAM حافظه ای است که کاراکتر ها برای نمایش باید در آنجا قرار گیرند ( مانند حافظه نمایش در کامپیوتر ها ! قابل توجه برنامه نویسان اسمبلی). این امکان برای استفاده کنندگان دیگر زبانها هم گذاشته شده است تا بتوانند خود زبان دیگری را برای نمایش به LCD اضافه کنند این کار با تعریف تک تک کاراکتر ها و قرار دادن آن در CGRAM صورت می گیرد .(برای زبان فارسی هم این کار باد صورت گیرد)
جدول زیر کد کاراکتر های قرار گرفته در حافظه ی lcd را نمایش می دهد.عدد بالای ستونها ،چهار بیت پر ارزش آدرس کاراکتر در DDRAM و عدد ابتدای سطر ها چهار بیت پایین آدرس را مشخص می کند برای مثال اگر بخواهیم که کاراکتر B را نمایش دهیم از جدول تقاطع سطر و ستون B را نگاه کره ، چهاربیت بالای آن 0100 در مبنای دو و چهار بیت پایین آن 0010 است با قرار دادن این دو در کنار هم 01000010 حاصل می شود که آدرس حرف B است .کار خسته کننده ای است نه؟
کاملا!!!اگر قرار باشد برای نوشتن هر کاراکتر به جدول مراجعه کنیم و آدرس آن را استخراج کنیم که باید عطایش را به لقایش بخشید.(یاد برنامه نویسان ENIAC می افتم که مجبور بودند برنامه را با زبان ماشین بنویسند.)اما صبر کنید ! خوشبختانه کاراکتر های جدول بالا منطبق با استاندارد اسکی هستند و لازم نیست از جدول استفاده کنید مگر برای حروف یونانی و کاراکتر های ویژه.
فرضا عدد قبلی که از استخراج آدرس کاراکتر B به دست آوردیم(01000010)اگر آن را به مبنای دهدی تبدیل کنید معادل 66 خواهد بود که کد اسکی کاراکتر B است .

+ نوشته شده در  شنبه پانزدهم مهر 1385ساعت 22:39  توسط گرگینی  | 

یک برنامه عملی برای LCD

برنامه عملی برای نمایش متن بر روی LCD

در مقاله قبلی با LCD و پایه ها و دستورات آن آشنا شدیم .همانطور که قول داده بودم در این مقاله یک برنامه را تحلیل می کنیم که متنی 4 خطی را بر روی LCD نمایش می دهد .این برنامه از برنامه های آزمایشگاه میکرو کنترلر گروه الکترونیک دانشگاه کردستان انتخاب شده است ( زنده باد کپی رایت!!!).
در صورتی که کار پایه های LCD را بلد نیستید مقاله قبلی را یک نیم نگاهی بندازید هیچ ضرری نخواهید کرد.من در انتهای مقاله پروژه کامل این برنامه را که به فرمت KEIL است قرار داده ام و در اینجا توضیحات لازم را عرض می کنم .
این برنامه 4 خط متن را بر روی LCD نشان می دهد متن نشان داده شده این است:

'KURDISTAN UNIVERSITY'
ENGINEERING FACULTY'
ELECTRONIC GROUP LAB'
'7th SEMESTER STUDENT'


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

برای دانلود فایل کلیک کنید


در ابتداي برنامه دو دستور include و$nomod51 ]مده است اين دستورات به کامپايلر Keil اعلان مي کند که از تنظيمات پيش فرض 8051 استفاده نکند و دستور دوم فایل هدر 8052 را مورد استفاده قرار می دهد .( در این برنامه از 8052 استفاده شده است این دوتراشه فرق چندانی با هم ندارند به جز اینکه 8052 یک تایمر اضافه تر از 8051 به صورت درونساخت دارد)

ORG 00H
LJMP MAIN


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

RS EQU P3.0
RW EQU P3.1
EN EQU P3.2
LCD_PORT EQU P1
NUM_CHAR_LINE EQU 20D
ADDRESSLINE0 DATA 00H
ADDRESSLINE1 DATA 40H
ADDRESSLINE2 DATA 14H
ADDRESSLINE3 DATA 54H


یک برنامه نویس می داند که بهترین کار پس از تنظیمات ابتدایی برنامه ، تعیین ثوابت و سپس متغیر های برنامه است در این قسمت هم ما ثوابت برنامه را تعریف کرده ایم . مزیت استفاده از ثوابت به جای به کار بردن خود مقدار ثابت دراین است که در صورتی که بخواهیم برنامه را تغییر دهیم (مثلا LCD را به جای پورت یک به پورت 0 وصل کنیم لازم نیست که برنامه را دستور به دستور بخوانیم و همه p1 ها را به p0 تبدیل کنیم بلکه در جایی که ثابتی را برای p1 تعریف کرده ایم مقدار ثابت را یک بار از p1 به p0 تغییر می دهیم و دیگر تمام . ببینید چقدر کار آسان می شود؟ و از طرفی دیگر خوانایی برنامه n برابر می شود از دو کلمه p1 و LCD_PORT کدامیک با مسما تر است؟).

دستورات 1-3 محل اتصال پایه های کنترلی LCD به میکرو را تعیین می کند . دستور چهارم پورتی را که GCD باید به آن وصل باشد(منظور 8 پایه دیتا است)راتعیین می کند.و دستور سوم تعداد کاراکتر های نمایش داده شده در هر سطر یا به قولی تعداد ستون های LCD را نشان می دهد در اینجا ما از LCD 20*4 استفاده کرده ایم در صورتی که از LCD 16*4 استفاده می کردیم این مقدار را به 16 تغییر می دادیم.
چهار دستور بعدی آدرس DDRAM کاراکتر اول هر سطر LCD است .مکانی که اولین کاراکتر سطری که می خواهیم نمایش داده شود باید درآنجا قرار گیرد ( شکل DDRAM را در مقاله راهنمای LCD ببینید)

برنامه اصلی از اینجا شروع می شود :

ORG 40H
MAIN:
MOV SP,#40H
LCALL INIT_LCD
LCALL CLEAR_LCD
LCALL INIT_SHOW
JMP $


بدنه اصلی برنامه با برچسبMAIN از آدرس 40 هگزادسیمال شروع می شود . دستور MOV sp,#40h مقدار اشاره گر پشته را آدرس 40 قرار می دهد بنابراین رشد اشاره گر ، از 40 به بعد خواهد بود .
سه زیر برنامه INIT و CLEAR وINIT_SHOW فرا خوانی شده اند که تک تک را توضیح خواهیم داد و سپس دستور JMP $ آمده است این دستور یک حلقه بینهایت را بر روی خودش ایجاد می کند از این دستور هنگامی استفاده می کنیم که کنترل برنامه را بخواهیم به دست وقفه ها یا تایمر بدهیم.برنامه در اینجا منتظر ست شدن فلاگ ها می ماند .

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

INIT_LCD:
CLR RW
SETB EN
CLR RS
MOV LCD_PORT,#3Eh
CLR EN
LCALL WAIT_LCD
SETB EN
CLR RS
MOV LCD_PORT,#0Ch
CLR EN
LCALL WAIT_LCD
SETB EN
CLR RS
MOV LCD_PORT,#06h
CLR EN
LCALL WAIT_LCD
RET



چهار دستور اول یک دستور را به LCD می فرستد از روی جدول دستورات مقاله قبل این دستور را پیدا کنید مقدار باینری این دستور 0000111110 است . از روی جدول راهنمای دستورات و راهنمای بیتهای استفاده شده معلوم می شود که این دستور ، دستور FUNCTION SET است که مقدار بیتهای DL وN و F یک است بیت DL تعیین کننده این است که در این برنامه از 8 بیت برای ارسال داده استفاده می کنیم و N تعیین می کند که ما از حالت 4 سطری LCD استفاده می کنیم ( می توانیم 2 سطری هم استفاده کنیم ) و بیت F تعیین می کند که فونت بزرگ 10*5 نقطه را برای نمایش متن به کار گیر ( اگر یادتان باشد حالت دیگر فونت 8*5 بود) .
پس از هر دستوری که به LCD می دهیم باید صبر کنیم تا LCD دستور را اجرا کرده و برای پذیرش دستور بعدی اعلام آمادگی کند LCD اینکار را با استفاده از تغییر مقدار BUSY FLAG انجام می دهد . خودتان زیر برنامه WAIT_LCD را مطالعه کنید.
دستور MOV LCD_PORT,#0Ch را از روی جدول پیدا می کنیم در این دستور RW و RS صفر هستند و D0-D7 مقدار 0ch را دارند . این دستور ، دستور Display control است با بیت های D و B یک و بیت C صفر است و از روی راهنمای بیتها می فهمیم که این دستور LCD را روشن می کند و مکان نما را خاموش می کند .( چون ما متن ثابتی را نمایش می دهیم به مکان نما نیازی نیست )

دستور MOV LCD_PORT,#06h با Rs ,RW صفر را از روی جدول پیدا کنید. دستور ENTRY MOD SET است که جهت حرکت مکان نما را تعیین می کند ( با بیت l/d) این دستور جهت حرکت را افزایشی اعلام می کند .( حرکت از چپ به راست )



زير برنامه بعدي CLEAR_LCD است :

CLEAR_LCD:
SETB EN
CLR RS
MOV LCD_PORT,#01h
CLR EN
LCALL WAIT_LCD
RET


اين زير برنامه lcd را پاک مي کند و مکان نما را در گوشه چپ بالا ي صفحه نمايش قرار مي دهد ( يادش به خير Cls در داس!)

اما زير بر نامه INIT_SHOW که چند زير برنامه ديگر را فرا خواني مي کند :

INIT_SHOW:
MOV A,#ADDRESSLINE0
LCALL SET_ADDRESS
MOV DPTR,#MESSAGELINE0
LCALL SHOW_LINE

MOV A,#ADDRESSLINE1
LCALL SET_ADDRESS
MOV DPTR,#MESSAGELINE1
LCALL SHOW_LINE

MOV A,#ADDRESSLINE2
LCALL SET_ADDRESS
MOV DPTR,#MESSAGELINE2
LCALL SHOW_LINE

MOV A,#ADDRESSLINE3
LCALL SET_ADDRESS
MOV DPTR,#MESSAGELINE3
LCALL SHOW_LINE
RET

اين زير برنامه خود دو زير برنامه ديگر با نامهاي SET_ADDRESS و SHOW_LINE را فرا خواني ميکند .براي دک بهتر ابتدا اين دو زير برنامه را بررسي مي کنيم:
SET_ADDRESS:
SETB EN
CLR RS
SETB ACC.7
MOV LCD_PORT,A
CLR EN
LCALL WAIT_LCD
RET



اين زير برنامه يک پارامتر را با استفاده از رجيستر A دريافت مي کند اين پارامتر آدرس DDRAM مکاني است که متن بايد از آنجا به بعد (در يک سطر)نمايش داده شود .سپس با يک کردن بين هشتم (ACC.7) و مقدار Rs ,RW صفر ، اين بايت را به عنوان آدرس شروع به LCD مي فرستد.
و زير برنامه SHOW_LINE:
SHOW_LINE:
MOV R0,#NUM_CHAR_LINE
LINE:
MOV A,#00H
MOVC A,@A+DPTR
LCALL WRITE_TEXT
INC DPTR
DJNZ R0,LINE
RET


اين زير برنامه تعداد کاراکتر هايي را که بايد در يک سطر نمايش يابند را که در ابتداي برنامه با ثابت NUM_CHAR_LINE تعريف کرده بوديم را در R0 قرار مي دهد البته قبلا آدرس ابتداي کاراکتري که بايد نشان داده شود و در حافظه کد تعريف شده است در ثبات اشاره گر داده قرار مي گيرد :


MESSAGELINE0:DB 'KURDISTAN UNIVERSITY'
MESSAGELINE1:DB 'ENGINEERING FACULTY'
MESSAGELINE2:DB 'ELECTRONIC GROUP LAB'
MESSAGELINE3:DB '7th SEMESTER STUDENT'


سپس با افزايش DPTR کاراکتر هاي دوم و سوم و... تاکاراکتر بيستم به زير برنامه WRITE_TEXT از طريق ثبات A ارسال مي شود و در هر بار اجراي حلقه يکي از مقدار R0 کم مي گردد تا به صفر برسد و زير برنامه پايان مي يابد .

در زير روال WRITE_TEXT:
WRITE_TEXT:
SETB EN
SETB RS
MOV LCD_PORT,A
CLR EN
LCALL WAIT_LCD
RET


کاراکتري که کد اسکي آن در ثبات A قرار دارد به اضافه بيت RS که يک مي باشد و RW که صفر است به LCD فرستاده مي شود که معادل دستور WRITE DATA است اين دستور کاراکتر را در ادرسي که مکان نما در آن قرار دارد مي نويسد و مکان نما يک آدرس به جلو حرکت مي کند و بدين ترتيب زير برنامه INIT_SHOW هر بار آدرس DDRAM و آدرس متني را که بايد نوشته شود را براي هر سطر تعيين مي کند و زير برنامه هاي WRITE,SHOWLINE آن را نشان مي دهند .

برنامه در اينجا پايان يافت در صورتي که قسمتي از بزنامه را نفهميديد مي توانيد با من تماس بگيريد يا همين جا در قسمت نظرات آن را بيان کنيد .
موفق باشيد.
+ نوشته شده در  شنبه پانزدهم مهر 1385ساعت 22:36  توسط گرگینی  | 

مبدل آنالوگ به دیجیتال و 8051

مبدل آنالوگ به ديجيتال و8051



جهان اطراف ما آنالوگ است اما پردازش توسط ماشين بر روي داده هاي ديجيتال صورت مي گيرد .درصورتي که بخواهيم يکي از متغير هاي محيط را به عنوان ورودي به يک سيستم پردازشي مانند ميکروکنترلر يا ميکروپروسسور بدهيم چگونه متغير آنالوگ را به ديجيتال تبديل کنيم.
آي سي هايي وجود دارند که با نام مبدل آنالوگ به ديجيتال(Analog to Digital Converter) عمل مي کنند که خانواده ADC080X  از مشهورترين آنها هستند .
آي¬سي هاي ADC0801-ADC0804  مبدل آنالوگ به ديجيتال يک کاناله هستند و ADC0808  يک مبدل 8 کاناله است به اين معني که مي تواند 8 ورودي را با استفاده از 3 پايه سلکتور به ديجيتال تبديل کند.با استفاده از پايه هاي سلکتور  طراح تعيين مي کند که در هر زمان کدام ورودي به ديجيتال تبديل شود.


پس از معرفي آي سي از اين آي سي به همراه 8051 براي نمايش داده بر روي LCD استفاده خواهيم کرد


شکل IC  Adc0804 را در زير مي بينيد.اين IC 20 پايه است .



پایه های آی سی ADC0804



براي کار با اين IC ابتدا بايد کميتي را که مي خواهيد به ديجيتال تبديل کنيد را  به وسيله سنسور دريافت کرده و به ولتاژ تبديل کنيد.سپس اين ولتاژرا در پايه هاي ورودي IC به بازه 0-5 ولت انتقال دهيد.IC متغير مورد نظر را پس از تبديل کردن به ديجيتال به بازه 0-255  خواهد برد با استفاده از يک تناسب ساده از روي عدد تبديل شده خواهيد فهميد که مقدار واقعي عدد چقدر بوده است.
اختلاف ولتاژي که به عنوان ورودي بايد به IC داده شود توسط پايه هاي Vin(+) و Vin(-) دريافت خواهد شد.آي¬سي اختلاف ولتاژ اين دو پايه را اندازه خواهد گرفت و به ديجيتال تبديل خواهد کرد عموما اختلاف نسبت به زمين سنجيده مي شود در اين حالت پايه ي Vin(-)  را به زمين مدار متصل مي کنند و Vin(+) مقدار ولتاژ کميت مورد نظر را در ورودي دارد.
براي استفاده از IC پايه ي CS  با نام Chip select بايد به زمين مدار يا ولتاژ low متصل باشد تا آي سي  فعال باشد .در زماني که آي سي فعال است در صورتي که پايه ي WR با نام Write را صفر کنيم( اين پايه با لبه منفي يعني لبه اي که در آن ولتاژ  مثبت به منفي مي رود عمل مي کند) آي سي  اندازه اختلاف ولتاژ دو سر Vin(-)و Vin(+) رابه ديجيتال تبديل مي کند و بر روي پايه هاي DB0-DB7  قرار خواهد داد عمل تبديل چيزي حدود 100 ميکرو ثانيه به طول خواهد انجاميد   پس از کامل شدن عمليات آي سي  پايه INTR را صفر مي کند مقدار اين پايه در صورتي که صفر باشد يعني مقدار موجود بر روي  پايه هاي داده مقدار معتبري است از اين پايه براي اتصال به ميکرو پروسسور يا ميکروکنترلر به عنوان ورودي وقفه مي توان استفاده کرد که با صفر شدن، برنامه داده را بخواند .به ياد داشته باشيد که پايه هاي Wr,CS ,INTR همگي فعال صفر هستند.
دو پايه با نامهاي AGND وDGND  در شکل مشخص هستند اين دو پايه زمين آنالوگ و ديجيتال مدار  هستند در اکثر موارد هر دو را به تنها زمين مدار متصل مي کنند.
پايه ديگر اين آي سي پايه ي Vref/2 است با اين پايه تعيين مي کنيد که رنج ورودي آي سي در چه گستره اي است اين پايه به Vmax/2 ورودي متصل خواهد شد براي مثال در صورتي که آي سي قرار است ورودي 0-5 ولت داشته باشد اين پايه بايد به ولتاژ 2.5 ولت متصل شود .در تعيين سطح ولتاژ ورودي در قسمت طراحي، محدوده مجاز براي اين آي¬سي  را در نظر داشته باشيد.


Vref/2=(Vmax-Vmin)/2;


در بيشتر کاربرد ها پايهCs را به زمين متصل مي کنند و هر زمان که بخواهند داده موجود بر رودي را به ديجيتال تبديل کنندپايه ي WR را ابتدا set و سپسCLR مي کنند تا لبه منفي ايجاد شود.
بسته به کاربرد هاي مختلف نويز ورودي با توجه به مدار مورد استفاده متغير است بهتر است هميشه از خازن هايي به عنوان نويز گير استفاده کنيد .هميشه به پايه VCC يک خازن الکتروليتي 10 ميکرو فاراد را زمين کنيد.
اگر احتمال داديد که پايه ي ورودي آنالوگ در معرض ولتاژ بيش از 5 ولت است با استفاده از يک ديود زنر و مطابق شکل زير پايه ي ورودي آنالوگ را محافظت کنيد .
 


محافظت پایه ای که احتمال دارد ولتاژ آن افزایش یابد



در صورتي که ولتاژ ورودي از ولتاژ شکست ديود زنر کمتر باشد اين ديود قطع بوده و تاثيري در مدار ندارد اما به محض اينکه ولتاژ ورودي از ولتاژ شکست ديود زنر بيشتر شود اين ديود وارد ناحيه شکست شده و به عنوان يک منبع ولتاژ با ولتاژ Vz عمل خواهد کردو ولتاژ پايه ورودي از Vz بيشتر نخواهد شد.
آي سي داراي يک تايمر داخلي است که پالس هاي توليدي توسط اين تايمر را مي توان با استفاده از CLKIN و CLKR کنترل کرد . خازن و مقاومتي که به اين دو پايه متصل ميشوند مسير دشارژ را تعيين مي کنند و درنتيجه پهناي پالس کنترل   مي شود.


فکر کنم به اندازه کافي در مورد ADC0804 بحث کرديم در اين مثال مي خواهيم يک ورودي آنالوگ را به ديجيتال تبديل کرده و با استفاده از 8051 آن را بر روي LCD نمايش دهيم .در صورتي که در مورد کار با LCD مشکل داريد مي تواند مقالات قبلي ميکرو کنترلر را که در مورد استفاده از LCD است مطالعه کنيد.
متغير ورودي را براي سادگي با استفاده از يک پتانسيومتر و در رنج 0-5 ولت مي سازيم .با استفاده از VCC  با مقدار 5 ولت و دو مقاومت هم اندازه ولتاژ 2.5  را به پايه Vref/2 خواهيم داد.مقدار مقاومت ها را 10 کيلو انتخاب کنيد و آنها را با استفاده از  اهم متر اندازه بگيريد چون مقاومتها داراي تولرانس هستند و دو مقاومت با رنگهاي يکسان لزوما داراي اندازه يکسان نيستند. حتما بايد تا دقت معيني دو مقاومت داراي اندازه يکسان باشند .
 



مدار



در اين مثال از LCD با رابط داده 4 بيتي استفاده شده است سورس برنامه را از لينک زير دريافت کنيد .
در قسمت تعاريف، در ابتداي برنامه مشخص شده است که از کدام پايه هاي ميکرو  بايد استفاده شود .و به کجا بايد متصل باشند.


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


یک کاربرد از کاربردهای ADC0804



لينک دانلود سورس برنامه ADC  با ميکرو کنترلر 8051 :


براي دانلود سورس بر روي اين لينک کليک کنيد

+ نوشته شده در  شنبه پانزدهم مهر 1385ساعت 22:34  توسط گرگینی  | 

ارتباط سریال 8051 با کامپیوتر

تبدیل سطوح ولتاژ TTL  و RS232 به یکدیگر


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


 


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


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


پورت Com دارای 9 پایه است برای ارتباط سریال کامپیوتر به کار می رود از این 9 پایه 4 پایه برای ارتباط استفاده می شود یکی از پایه ها برای Send و یکی  برای Recieve   مهمترین پایه ها هستند.


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


برای ارتباط سریال هم IEEE استانداردی با نام  RS232 ایجاد کرده است که نحوه عمل ارتباط سریال را نشان می دهدبه واسطه همین استاندارد ها است که میتوانیم به وسیله کامپیوتر با یک وسیله دیگر همانند 8051 که هیچ شباهتی به کامپیوتر ندارد ارتباط برقرار کنیم .


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


برای مثال در منطق TTL  سطح ولتاژ0 تا 2.7 به معنای صفر  و سطح ولتاژ 3 تا 5 ولت به معنای یک استفاده می شود.در استاندارد RS232  سطح ولتاژ -12 تا -3 ولت برای منطق یک و سطح ولتاژ 3 تا 12 ولت برای منطق صفر استفاده می شود.


rs232


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


حتما می پرسید که سطح ولتاژ -3 تا 3  بیانگر چه چیزی است ؟این بازه در سطح ولتاژ بیانگر هیچ منطقی نیست .مثلا ولتاژی که برای مثال 2 ولت باشد نادیده گرفته می شود. این بازه به عنوان یک gap یا یک فاصله برای جدا سازی دو منطق صفر یا یک در نظر گرفته شده است . فرض کنید اگر برای صفر -12 تا ولتاژ 0 در نظر گرفته می شد و برای منطق یک 0.1 تا 12 در نظر گرفته می شداحتمال اینکه در اثر  افت ولتاژ سیم رابط یک بیت صفر به یک و یا بالعکس تبدیل شود بسیار بالا می بود.اما با 6 ولت (-3 تا 3) به عنوان فاصله این احتمال بسیار کاهش یافته است.


 


اما در طرف 8051 ، می دانیم که 8051 با سطح ولتاژ TTL  عمل می کند یعنی مقدار 0 تا 2.7 را به عنوان صفر و 3 تا 5 ولت را به عنوان یک در نظر می گیرد.اکنون اگر 8051 را مستقیما به پورت Com وصل کنیم مطمئنا IC دچار مشکل خواهد شد( این را از من بپذیرید و یک IC زبان بسته را نسوزانید)با فرستادن اولین بایت تعداد یک بر روی پورت Com  ظاهر می شود در Rs232 یک معادل ولتاژی بین -12 تا -3  است و Ic برای ولتاژ های منفی محافظت نشده است در نتیجه سریعا IC داغ می کند و اگر دیرتر بجنبید ....!!!


 


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


 



rs232


مدار زیر هم همین کار را انجام می دهد


 


rs232


 


آقای اصغر چرمین (Asghar Charmin) هم مدار زیر را پیشنهاد کرده اند . تحلیل مدار را به عهده خودتان می گذارم کار زیاد سختی نیست .


 


rs232


 


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


برای میکرو کنترلر هم دو پایه با نامهای TxD و RxD  در نظر گرفته شده است .این نکته را فراموش نکنید پایه ی RxD میکروکنترلر باید به پایه ی TxD  پورت Com متصل شود .و بر عکس .


این نوع اتصال را در اصطلاح Cross  یا ضربدری گویند.

+ نوشته شده در  شنبه پانزدهم مهر 1385ساعت 22:30  توسط گرگینی  |