طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
در این پروژه با استفاده از یک ساعت نجومی و محاسبات ریاضی، دو عدد سروو موتور یکی در جهت XY و دیگری در جهت Z پنل خورشیدی را به صورت اتوماتیک در موقیعتی قرار می دهید که بیشترین تابش خورشید را دریافت کند.این پروژه بدون نیاز به دریافت نور می تواند بر اساس تاریخ، ساعت، عرض جغرافیایی و طول جغرافیایی هر استان زمان طول و غروب خورشید را محاسبه کرده و به طور دقیق در این بازه زمانی لامپ های روشنایی را فعال کند. همچنین دارای یک تایمر داخلی می باشد که قابلیت فعال و غیر فعال کردن آن وجود دارد. دستگاه کلا با 3 کلید قابل تنظیم و برنامه ریزی می باشد.این پروژه در اصل یک شمارنده می باشد که می توان عبور مرور افراد از یک گیت را شمارش کرد، شمارنده هم می تواند به صورت بالا شمار و هم پایین شمار کار کند. همچنین توسط شدت نور یک عدد LED می‌توان سنسور فرستنده و گیرنده را در یک راستای مستقیم تنظیم کرد. سنسورها ار نوع مادون قرمز با برد تقریبی 120cm می باشد.این پروژه یک مدار گیرنده رادیویی 433 یا 315 مگاهرتز می باشد که قابلیت تعریف و ذخیره سازی انواع ریموت کنترل هایی از قبیل (ریموت دزدگیر ماشین، پارکینگ، بالابر و ...) را دارد. می توان رله مربوطه را روی هر کلید دلخواه تعریف نمود.این پروژه یک فاصله سنج می باشد که می توان در مواردی نیز به عنوان عمق سنج از آن استفاده نمود. حداقل فاصله قابل تشخیص 10cm و حداکثر 80cm تا 100cm می باشد.
پروژه کنترلر پنل خورشیدی با استفاده از ساعت نجومی

MCP-25

پروژه کنترلر پنل خورشیدی با استفاده از ساعت نجومی
پروژه تایمر-ساعت نجومی (فتوسل بدون نور)

MCP-26

پروژه تایمر-ساعت نجومی (فتوسل بدون نور)
پروژه شمارش افراد با سنسور مادون قرمز و avr

MCP-6

پروژه شمارش افراد با سنسور مادون قرمز و avr
پروژه ریموت کنترل 433-315 مگاهرتز تک کاناله با قابلیت لرنینگ

MCP-30

پروژه ریموت کنترل 433-315 مگاهرتز تک کاناله با قابلیت لرنینگ
پروژه فاصله سنج با سنسور مادون قرمز شارپ Sharp

MCP-37

پروژه فاصله سنج با سنسور مادون قرمز شارپ Sharp

آموزش ميكرو كنترلر 8051 قسمت ششم (تايمرها و شمارنده ها)

تايمرهاي 8051
8051 دو تايمر به نام هاي تايمر صفر 0و تايمر 1 دارد. همانطور كه در مطالب بلي گفتيم براي ايجاد يك تاخير دقيق نمي توان از حلقه و ساير دستورات استفاده كرد به همين دليل اگر ما تايمر هاي 8051 را فعال كنيم قادر هستيم تا زمانهايي با دقت بسيار بالا توليد كنيم. براي راه اندازي تايمرها بايد ابتدا ثبات TMOD و خود ثبات تايمر ها را بشناسيم.
ابتدا ثبات تايمرهاي 0 و 1:
در 8051 ثبات هاي تايمر 16 بيتي هستد كه به TL بايت سبك و TH بايت سنگين تجزيه مي شوند. كه اگر ما از تايمر صفر استفاده كنيم اين ثبات ها TL0 و TH0 ناميده مي شود و اگر از تايمر يك استفاده كنيم اين ثبات ها TL1‌و TH0 ناميده مي شود.

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


TL
TH
تايمر
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
D13
D14
D15
T0
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
D13
D14
D15
T1

ثبات TMOD
TMOD يك ثبات همه كاره در 8051 مي باشد. كه با تنظيم كردن اين ثبات مي توان تايمر صفر يا يك و يا شمارندهو غير.. را انتخاب كرد در جدول زير اين ثبات توضيح داده شده است.!

 بيت GATE:
هرگاه اين بيت صفر شود بسته به شرايط ديگر بيت ها تايمر يا شمارنده فعال مي شود.
بيت C/T :
اگر اين را صفر كنيم تايمر انتخاب مي شود و هرگاه اين بيت را يك كنيم شمارنده انتخاب مي شود.
M1 و M2 مد عمليات
اين دو بيت براي انتخاب مد تايمر استفاده مي شود كه به كمك اين دو بيت چهار حالت خواهيم داشت كه در جدول زير اين حالت ها برسي مي شود.

عملكرد تايمر
مد
M0
M1
مد تايمر 13 بيتي
0
0
0
مد تايمر 16 بيتي
1
1
0
مد 8 بيتي با بار شدن خودكار. يعني با هر بار سريز دوباره مقدار TLx بار گذاري مي شود
2
0
1
مد دو نيم كردن تايمر
3
1
1

براي تنظيم تايمر يعني زمان دقيق بايد ابتدا سرعت ميكرو را بر اساس اسيلاتور آن يعني همان كريستال محاسبه كرد و سپس با محاسباتي ساده آن را در ثبات هاي TLX و THX قرار داد. در 8051 بشتر از كريستال 11.0592MHZ استفاده مي شود كه تو بازار هم فراون مي باشد.انتخاب اين عدد براي اين است كه ميكرو بتواند با كامپوتر هاي IBM تبادل اطلاعات كند پس با اين كريستال داريم:
سرعت ميكرو را با تقسيم كردن مقدار كريستال بر عدد 12 (عدد ثباتي مي باشد) فركانس كاري بدست مي آيد حال براي محاسبه زمان عدد يك را بر اين فركانس تقسيم مي كنيم تا سرعت بر حسب ثانيه بدست آيد.
12/11.0592=921.6KHZ    1/921.6K=1.085 Us
از اين پس ما با عدد 1.085 ميكرو ثانيه سروكار داريم. براي مثال ما مي خواهيم  با استفاده از مد يك تايمر 0، زمان 50 ميلي ثانيه را توليد كنيم براي محاسبه اعدادي كه بايد در ثبات ها قرار گيرد به صورت زير عمل مي كنيم.
محاسبه اعددي كه بايد در TL0 و TH0 قرار گيرد:
ابتدا زماني كه لازم داريم را بر زمان سرعت ميكرو تقسيم مي كنيم: 50ms/1.085Us=46083 كه اين عدد بدست آمده از از عدد 65536 (ffff=65536) كم كرده و به هگز تبديل مي كنيم و در ثبات ها قرار مي دهيم.
65536-46083=19453  19453=4DFD  H   TH0=4DH  TL0=FDH
برنامه:


تايمر صفر و مد يك انتخاب مي شود          MOV   TMOD,#00000001B
          MOV    TL0,#0FDH
          MOV    TH0,#4DH
         تايمر 0 روشن شود             SETB     TR0
پرچم تايمر را رديابي كن تا مدت زمان 50 ميلي ثانيه تمام شود LOOP: JNB     TF0,LOOP
           تايمر 0 خاموش شود           CLR     TR0
           پرچم تايمر 0 را ريست كن (جهت استفاده مجدد از اين تايمر)           CLR      TF0

 

8 بيت ثبات TMOD را بايد دقيقا طبق جداول بالا پر كنيم تا تايمر برنامه ريزي شود چون ما مي خواهيم از تايمر صفر استفاده كنيم پس چهر بيت مربوط به تايمر يك را صفر قرار مي دهيم و چهار بيت مربوط به تايمر صفر ار هم با استفاده از جدول مد انتخاب كرده و در TMOD قرار مي دهيم.
دستور LOOP: JNB  TF0,LOOP تا زماني كه زمانه خاتمه نيافته است ميكرو هيچ كاري انجام نمي دهد يعني در حلقه LOOP مي ماند تا زمان 50 ميلي ثانيه ايجاد شود بعد از اتمام اين زمان پرچم تايمر صفر يك شده و ميكرو از اين حلقه بيرون آمده و ادامه دستورات را اجرا مي كند. بعد از اتمام زمان ما بايد توسط دو دستور آخري يكي تايمر را خاموش كنيم و ديگري اينكه پرچمي قبلا يك شد را دوباره صفر كنيم. اين كار ها براي استفاده مجدد از تايمر مي باشد.
تايمر 1
جهت برنامه ريزي تايمر يك تنها بايد ثبات TMOD را براي اين تايمر تنظيم كنيم و بقيه دستورات شبيه به تايمر صفر مي باشد با اين تفاوت كه هر جا كه از صفر استفاده كرديم بايد آن را به يك تبديل كنيم براي مثال TL0TL1 و  ... همچنين TMOD=00010000=10H
MGH


تايمر يك و مد يك انتخاب مي شود          MOV   TMOD,#00010000B
          MOV    TL1,#0FDH
          MOV    TH1,#4DH
         تايمر 1 روشن شود             SETB     TR1
پرچم تايمر را رديابي كن تا مدت زمان 50 ميلي ثانيه تمام شود LOOP: JNB     TF1,LOOP
           تايمر 1خاموش شود           CLR     TR1
           پرچم تايمر 1 را ريست كن (جهت استفاده مجدد از اين تايمر)           CLR      TF1

 

شمارنده:
از شمارنده هاي 8051 براي كاربرد هاي زيادي استفاده مي شود از جمله براي شمارش پديدها .مثلا براي شمارش تعدا نفراتي كه از درب خارج شده اند يا وارد شده اند. يا اندازه گيري تعداد پالس هاي يك سيگنال و خيلي كاربرهاي ديگر...
براي فعال كردن شمارنده بايد در ثبات TMOD بيت C/T را يك كنيم تا تايمر به شمارنده تبديل شود. حال برنامه ريزي اين شمارنده شبيه به برنامه ريزي تايمر ها مي باشد البته با كمي تفاوت. ما از شمارنده زماني استاد مي كنيم كه بخواهيم از بيرون سيگنالي به ميكرو بدهيم و ميكرو تعدا اين پالس ها را بشمارد. براي اينكا در 8051 پايه P3.4 براي تايمر/شمارنده صفر بيروني در نظر گرفته شده و پايه P3.5 براي تايمر/شمارنده يك بيروني در نظر گرفته شد لذا ما براي وارد كردن يك سيگنال از بيرون به داخل ميكرو جهت شمارش تعدا پالس ها مجاز هستيم از اين دو پايه استفاده كنيم. در مثال زير اين قضيه را روشن مي كنيم:
برنامه اي براي شمارنده يك 1 در مد يك 1 بنويسيد تا يك كليد مادون قرمز كه در جلوي يك درب قرار دارد تعداد نفرات را بشمارد. بايد سبك شمارنده در R1 و بايت سنگين شمارنده در R2 قرار گيرد؟
توضيح برنامه:
وقتي كه مي گوييم شمارنده يك باشد يعني سيگنال ورودي ما روي پايه P3.5 مي باشد و وقتي كه مي گوييم شمارنده در مد يك باشد يعتي شمارنده ما 16 بيت بوده لذا قادر است تا FFFFH=65536 نفر را بشمارد.
برنامه:


             شمارنده 1 و مد 1 انتخاب مي شود               MOV   TMOD,#01010000B
             مقدار اوليه شمارنده صفر باشد               MOV   TL1,#00H
                          مقدار اوليه شمارنده صفر باشد               MOV   TH0,#00H
             اين بيت يك شود تا به عنوان ورودي استفاده گردد               SETB   P3.5
شمارنده را روشن كن START:   SETB   TR1
بايت سبك شمارنده را در R1 قرار بده LOOP:    MOV   R1,TL1
             بايت سبك شمارنده را در R2 قرار بده               MOV   R2,TH1
            تا زماني كه شمارند پر نشده تعدا نفرات را بشمار              JNB   TF1, LOOP
            شمارنده را خاموش كن              CLR   TR1
            پرچم شمارنده را صفر كند براي استفاده مجدد              CLR  TF1
            برنامه را دو باره تكرار كن              SJMP  START


 با استفاده از جدول بالا مقدار ثبات TMOD را با توجه به خواسته مسئله پر مي كنيم در خط 2 و 3 برنامه مقدار اوليه شمارنده را صفر قرار مي دهيم البته اگر بخواهبم مي توانيم مقدار اوليه را مثلا از عدد 1000 شروع كنيم. در خط 4 برنامه بيت P3.5 را به عنوان ورودي معذفي مي كنيم ما در ميكرو هرگاه بخواهيم پيني را به عنوان ورودي معرفي كنيم بايد آن پين را يك كنيم و اگر بخواهيم خروجي باشد بايد آن بيت را صفر كنيم.
در خط 5 برنامه ما شمارنده را به صورت نرم افزاري روشن مي كنيم و در خط 6و7 مقدار ثبات هاي شمانده در ثبات هاي مربوطه كپي مي گردد. در خط 8 برنامه CPU به صورت مدام پرچم شمارنده را براي يك شدن چك مي كند و اين پرچم زماني يك مي شود كه شمارنده به عدد 65536 رسيده باشد وقتي به اين عدد رسيد ديگر پرش نمي كند و  دستورات بعدي يعني دستورات خاموش كردن شمارنده و صفر كردن پرچم شمارده را اجرا مي كند و به START پرش مي كند تا دوباره اين روند را تكرار كند.

نكته اي در مورد بيت  GATE از ثبات TMOD
تا الان ما اين بيت را در هر نوع مدي صفر در نظر مي گرفتيم علت اين كار اين است كه اگر GATE=0 باشد خاموش يا روشن شدن تايمر/شمارنده به صورت نرم افزاري توسط دستورات SETB,CLR انجام مي گرفت. حال اگر ما بيت GATE=1 كنيم در نتيجه روشن يا خاومش دن شمارنده/تايمر به صورت سخت افزاري توسط پين هاي P3.5  P3.4 انجام مي گيرد يعني به كمك اين بيت ها ما مي توانيم از بيرون همان دستورات روشن شده يا خاموش شدن را اجرا كنيم. كه در نهايت به صورت سخت افزاري كنترل مي شود.
براي برنامه ريزي تايمرها و شمارنده ها در ديگر مد ها مي توانيد به كمك جدول بالا اين كار را انجام دهيد. البته بستگي با نياز ما مي توانيم از هر كدام استفاده كنيم مثلا در مد 0 تايمر يا شمارنده 13 بيتي بوده مي تواند تا عدد 8191 بشمارد و ديگر مد ها هم به همبن صورت مي باشد.

با تشكر سید محسن قاسميان

 

M0
M1
C/T
GATE
M0
M1
C/T
GATE
تايمر 0
تايمر1

 

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال يكشنبه، 4 بهمن ماه، 1388    نویسندهنویسنده: مدیریت    نظرات 2 نظر    بازدید بازدید [ 13507 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان   

پروژه کنترلر پنل خورشیدی با استفاده از ساعت نجومی
کد پروژه: MCP-25
عنوان: پروژه کنترلر پنل خورشیدی با استفاده از ساعت نجومی
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
در این پروژه با استفاده از یک ساعت نجومی و محاسبات ریاضی، دو عدد سروو موتور یکی در جهت XY و دیگری در جهت Z پنل خورشیدی را به صورت اتوماتیک در موقیعتی قرار می دهید که بیشترین تابش خورشید را دریافت کند.
پروژه تایمر-ساعت نجومی (فتوسل بدون نور)
کد پروژه: MCP-26
عنوان: پروژه تایمر-ساعت نجومی (فتوسل بدون نور)
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این پروژه بدون نیاز به دریافت نور می تواند بر اساس تاریخ، ساعت، عرض جغرافیایی و طول جغرافیایی هر استان زمان طول و غروب خورشید را محاسبه کرده و به طور دقیق در این بازه زمانی لامپ های روشنایی را فعال کند. همچنین دارای یک تایمر داخلی می باشد که قابلیت فعال و غیر فعال کردن آن وجود دارد. دستگاه کلا با 3 کلید قابل تنظیم و برنامه ریزی می باشد.

مرتبط باموضوع :          مطالب بیشتر در این موضوع

 تولید اعداد طبیعی با چهار بیت و نمایش روی 4 تا 7 سگمنت  [ پنجشنبه، 6 خرداد ماه، 1389 ] 13415 مشاهده
 شمارنده دو رقمی با 8051 و به زبان اسمبلی  [ چهارشنبه، 29 ارديبهشت ماه، 1389 ] 12761 مشاهده
 شمارنده سه رقمی همراه با بوق  [ پنجشنبه، 6 خرداد ماه، 1389 ] 11670 مشاهده
 شمارنده 4 رقمي به زبان اسمبلی با 8051  [ پنجشنبه، 6 خرداد ماه، 1389 ] 14329 مشاهده
 شمارنده 3رقمي به زبان اسمبلي COUNTER  [ سه شنبه، 20 بهمن ماه، 1388 ] 7989 مشاهده
نام شما: hamid
ایمیل شما: hamidzarey21@yahoo.com
در مورخه : شنبه، 3 دي ماه، 1390

اگه میشه برنامه ای برای تولید دو فرکانس 20khz و100hz با استفاده ازتایمر رو برام بفرستید.که بر روی دو پایه یک پورت 8951 نمایش داده میشن .با تشکر

ارسال جوابیه

نام شما: mahdi
ایمیل شما: mehdi_v97@yahoo.com
در مورخه : جمعه، 21 تير ماه، 1392

با سلام من شمارنده میخواستم که در چند مرحله تنظیم شود و رله را قطع وصل کند

ارسال جوابیه

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]