تالار گفتمان


  منوی اصلی

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

  آموزش ها

· آموزش PLC_S7_S5
· آموزش h-pspice
· آموزش MATLAB
· آموزش سیمولینک قدرت
· آموزش پروتئوس
· آموزش بی نظیر کامپیوتر
· آموزش کامل AVR
· آموزش مالتی مدیا PLC -learning

  جستجوی گوگل

گوگل
Google


در كل اينترنت
در اين سايت

 
 

  نظرسنجی

قالب جدید سایت

خیلی عالیه
میتونه بهتر باشه
جای کار داره
بهترین سایته
نظری ندارم!



نتایج
نظرسنجی ها

تعداد آراء: 145
نظرات : 1

  پیغام کوتاه


فقط کاربران عضو سايت ميتوانند پيغام کوتاه ارسال نمايند لطفا وارد سيستم شويد يا اينکه عضو شويد.

  آخرین ارسالها

کل موضوعات 563
کل ارسال ها 981
کل بازديد ها 34821
کل پاسخ ها 418
کل اعضا 502
آخرين 20 ارسال انجمن

درخواست جزوه
ارسال شده توسط admin در مورخه : پنجشنبه، 19 دي ماه ، 1387

مقالات کنفرانس دانشجویی برق 87
ارسال شده توسط admin در مورخه : دوشنبه، 16 دي ماه ، 1387

طراحی lead-lag
ارسال شده توسط admin در مورخه : دوشنبه، 9 دي ماه ، 1387

درخواست جزوه
ارسال شده توسط admin در مورخه : دوشنبه، 9 دي ماه ، 1387

فایلpower point درس حفاظت
ارسال شده توسط mohammad_8583 در مورخه : يكشنبه، 8 دي ماه ، 1387

آموزش کامل میکروکنترلر AVR
ارسال شده توسط admin در مورخه : يكشنبه، 8 دي ماه ، 1387

سايت هاي سودمند حسابداري
ارسال شده توسط admin در مورخه : جمعه، 6 دي ماه ، 1387

شبكه هاي عصبي مصنوعي
ارسال شده توسط admin در مورخه : جمعه، 6 دي ماه ، 1387

چاه ارت
ارسال شده توسط admin در مورخه : جمعه، 6 دي ماه ، 1387

هر روز دو مقاله خارجی
ارسال شده توسط admin در مورخه : پنجشنبه، 5 دي ماه ، 1387

روباتیک
ارسال شده توسط admin در مورخه : سه شنبه، 3 دي ماه ، 1387

؟؟؟
ارسال شده توسط admin در مورخه : دوشنبه، 2 دي ماه ، 1387

proteus
ارسال شده توسط admin در مورخه : شنبه، 30 آذر ماه ، 1387

مخابرات free download IEEE
ارسال شده توسط admin در مورخه : شنبه، 30 آذر ماه ، 1387

سوالات ارشد برق سال 1383
ارسال شده توسط hosseinferdowsi در مورخه : پنجشنبه، 28 آذر ماه ، 1387

سوالات کنکور ارشد برق 1384
ارسال شده توسط hosseinferdowsi در مورخه : پنجشنبه، 28 آذر ماه ، 1387

سوالات کنکور ارشد برق 1385
ارسال شده توسط hosseinferdowsi در مورخه : پنجشنبه، 28 آذر ماه ، 1387

نمونه سوال کنکور ارشد برق 86
ارسال شده توسط hosseinferdowsi در مورخه : پنجشنبه، 28 آذر ماه ، 1387

آموزش فارسیPLC _ S5 _ S7
ارسال شده توسط admin در مورخه : چهارشنبه، 27 آذر ماه ، 1387

PSpice
ارسال شده توسط admin در مورخه : سه شنبه، 26 آذر ماه ، 1387

تالار گفتمان جستجو
مرجع متخصصین گناباد: تالار گفتمان

مرجع متخصصین گناباد :: نمايش موضوعات - اتصال سون سگمنت به میکروکنترلر

`

اتصال سون سگمنت به میکروکنترلر

 

ارسال موضوع جديد  پاسخ به اين موضوع    

   مرجع متخصصین گناباد صفحه اول انجمن -> فنی و مهندسی -> مهندسی برق الکترونیک

نمايش موضوع قبلي :: نمايش موضوع بعدي  
نويسنده پيغام

mahdihassannia
مدیر سایت
مدیر سایت

وضعيت: آفلاين
3 تير ماه ، 1387
تعداد ارسالها: 165
امتياز: 422
تشکر کرده: 0
تشکر شده 0 بار در 0 پست

محل سكونت: استان خراسان رضوي

ارسالارسال شده در: جمعه، 3 آبان ماه ، 1387 11:46:58    موضوع مطلب: اتصال سون سگمنت به میکروکنترلر پاسخ همراه با اعلان

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

امروزه دیگر لازم نیست که شما 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 انتساب داده شده ، میتونید عمل مالتی پلکس را ببینید .

بازگشت به بالا

رويت مشخصات كاربر ارسال پيغام شخصي
تمامي مطالب ارسال شده:   
ارسال موضوع جديد   پاسخ به اين موضوع   

   مرجع متخصصین گناباد صفحه اول انجمن -> فنی و مهندسی -> مهندسی برق الکترونیک

زمان پيشفرض سايت: ساعت گرينويچ + 3.5 ساعت
صفحه 1 از 1
  
نام کاربري:      کلمه عبور:     

~ يا ~
عضويت در سايت

  


 


Powered by phpBB © 2001, 2008 phpBB Group
Forums ©
Farsi Project By [Gonabadexpert] gonabadexpert.com