سلام دوستان
من برای پروژه دانشگام با نرم افزار متلب یه سری پردازش روی عکس انجام دادم و داده هامو با پورت سریال به میکرو انتقال دادم.داده هام یه سری عدده که نشانگر زمان بر حسب میلی ثانیه است.من کلی تلاش کردم که سه تا پینه میکرو رو بر اساس زمان حساب شدشون روشن کنم و هر کدوم بعد از روشن شدن به مدت مثلا 500 میلی ثانیه روشن بمونه و خاموش شه.ولی نشد.واسه اینکارم از تایمر میکرو هم استفاده کردم ولی نتونستم جواب بگیرم.اخه من نیاز دارم که 3 تا پین میکرو همزمان فعال شن ولی میکرو به ترتیب اینکارو انجام میده.
[/align][/font]
سلام.
خوب دستورات فعال شدن 3تا پين رو پشت سر هم بنويسيد يا مستقيم ريجستر مقدار دهي كنيد و بعد تاخير مثلا 500 ميلي ثانيه رو بذاريد. الان مشكلش چيه؟
كدهاتون رو بذاريد ، تا دوستان كمكتون كنن ...
راستش بایستی هر پین در زمان خودش روشن شه که این زمانها ممکنه با هم تداخل هم داشته باشند.اخه میکرو میاد برنامه رو خط به خط اجرا میکنه.چه جور بگم
الان مشکلم اینه که میکرو بیاد توو زمانه 1 ثانیه پین 1 رو روشن کنه و 500 میلی ثانیم صبر کنه.حالا توو همین بین باید پین 2 رو هم روشن کنه.مثلا توو زمان 1200 میلی ثانیه و بازم 500 میلی ثانیه صبر کنه.چجور میکرو این دو تا کارو همزمان انجام بده؟
اخه میکرو تا اون خطه قبلو اجرا نکنه سراغ این نمیاد.و اوونوقت زمانی که پین 2 باید فعال شه دستخوش تغییر میشه!
خوب پس ربطي به همزماني ندارهه ...
چند روش هست ، يكي استفاده از وقفه هست. اگر با دستور wait تاخيراتتون رو درست مي كنيد و وسط اين تاخير نياز به فعال كردن پايه ي ديگه داريد ، بايد از وقفه استفاده كنيد. اگر اطلاعات رو به صورت سريال دريافت مي كنيد ، كه حتما همينطور هست ، بايد وقفه ي سريال رو فعال كنيد.
وقفه اين امكان رو مي دهه كه از خط كه هستي ، بپري به يه بخشي از حافظه و دستورات مد نظرت رو اجرا كني و دوبارهه برگردي سر همون خطي كه بودي.
روش ديگه استفاده از تايمر هست. وقتي از وقفه ي تايمر استفاده كني ، خود تايمر بدون درگير كردن CPU زمان ها رو مي سازهه و از طريق وقفه CPU رو با خبر مي كنه ، در اين حين CPU هم دارهه دستورات رو اجرا مي كنه و معطل نمي شه ...
اما من همون روش اول رو توصيه مي كنم.
البته هنوز خيلي كارها مي توني كني ، مي توني اطلاعاتي رو كه به ميكرو مي فرستي هوشمندتر كني و كمي خلاقيت به خرج بدي ...
موفق باشيد.
با تشکر از شما.روو توضیحاتتون کار میکنم تا ب جواب برسم
یعنی شما میخوای از زمانی که اولین پین 1 میشه پین بعدی از همون زمان 1ثانیه بعدش پین 2 یک بشه و از زمان اولین پین 500میلی ثانیه پین 3 یک بشه؟
نه.هر زمانی که هر کدوم از پینها روشن شدند.هر کردم بعد از 500 میلی ثانیه خاموش شن.ممکنه هر سه تا زمان به هم تداخل داشته باشن.من الان با وقفه سعی کردم اینکارو کنم.ولی ظاهرا با یک وقفه فقط میشه به یک زیر برنامه پرید!
راشتش الان واسه یه پین با تایمر 0 اینکارو کردم ولی چطوری با همون تایمر 0 واسه دو تا پینه دیگمم شروع کنه به شمارش؟
(داخله پرانتز عرض کنم من رشتم مکانیکه-اگه یه مقداری شوتی میدم نادیده بگیرید)
دوست عزیز این کار خیلی ساده است نه تنها سه پین میکرو بلکه همه پایه هارامی توانی کنترل کنی
البته بااستفاده وقفه تایمر
وقفه را طوری تنظیم می کنی که هر یک میلی ثانیه یکبار اجرا شود
سه تا متغیر در سطح گلوبال تعریف می کنیم
در داخل دستورات وقفه به هرکدام از متغییرها بشرطی که از پانصد کمتر باشند یکی اضافه می کنی
$regfile = "m8def.dat"
$crystal = 11059200
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Dim A As Integer
Dim B As Integer
Dim C As Integer
دستورات وقفه
if A<500 then A=A+1
if B<500 then B=B+1
if C<500 then C=C+1
If A < 500 Then Set Portb.0
If B < 500 Then Set Portb.1
If C < 500 Then Set Portb.2
If A >= 500 Then ReSet Portb.0
If B >= 500 Then ReSet Portb.1
If C >= 500 Then ReSet Portb.2
حالا اگر در قسمتی از برنامه هر کدام از متغیر ها را برابر صفر کنید پین مربوطه یک شده وبعد از پانصد میلی ثانیه صفر خواهد شد
در ضمن چون بنده با سی برنامه می نویسم احتمال کمی دارد که نحوه نوشتن دستورات اشتباه باشد
سلام
یکمی هنگ کردم.میشه بیشتر توضیح بدی؟
$regfile = "m8def.dat"
$crystal = 11059200
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.1 , Rs = Portc.0
Cursor Off : Cls
Config Pinb.1 = Output
Dim A As Integer
Config Timer0 = Timer , Prescale = 64
Enable Interrupts
Enable Ovf0
On Ovf0 Q
Do
A = 0
Locate 1 , 1
Lcd "t:" ; A
Loop
End
Q:
Incr A
If A > 500 Then A = A + 1
If A < 500 Then Set Portb.1
If A >= 500 Then Reset Portb.1
Return
اینو نوشتم ولی فقط پین b.1 روشن میشه.خاموش نمیشه!
هم اکنون نیازمند یاری گرمتان هستیم...