ايران ويج

نسخه‌ی کامل: مشکل با ادامه چرخه میکرو
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
من برنامه ای به شکل زیرنوشته ام ومی خواستم که وقتی D.0 صفرشدآنگاه D.1 یک شود واگردوباره D.0 صفرشدآنگاه D.2 یک شود وچرخه همینطورادامه یابد(البته منظورم چرخه سوخت هسته ای نیستا!Wink )/D.0 رابایک مقاومت پول آپ 10کیلویی به مثبت وصل کرده ام/اما مشکلی که دارم اینه که دقیق کارنمیکنه(ازمیکرو جدید هم استفاده کرده ام)/فکرمی کنم که مشکل ازتاخیریه که برای صفر شدن پورتهای D.1/D.2 گذاشته ام(چونکه باتغییرآنها مدارهم کمی درست می شود)!
نظرشما چیه؟
کد php:
if(PIND.0==0){
 
PORTD.1=1;
 
delay_ms(1000);
 
PORTD.1=0;
 
delay_ms(500);
 };
 if(
PIND.0==0){
 
PORTD.2=1;
 
delay_ms(1000);
 
PORTD.2=0;
 
delay_ms(500);
 }; 
سلام دوست عزیز.
الگوریتم برنامه کلاً مشکل داره. چون این برنامه توی یه حلقه مدام در حال تکراره و هر وقت شرط برقرار بشه بسته به اینکه میکرو اول کدوم شرط رو ببینه، انجام میشه.
بهتره شما توی حلقه while(1) یه شرط بذاری که به ازای هربار اجرا بک شماره به صورت تک تک اضافه شود. و در شروط بعدی اگر عدد مورد نظر زوج بود شرط اول(که وقتی D.0 صفرشدآنگاه D.1 یک شود) و اگر فرد بود شرط دوم(0 صفرشدآنگاه D.2 یک شود) را اجرا کنه.
در ضمن DDR رو درست set کن و مقاومت pull up میکرو رو فعال کن.

اگه توی نوشتن برنامه مشکل داشتی بگو تا برات بنویسمش.
موفق باشی
الان برنامت با اون حرفهایی که میگی فرق داره !!!

الان اگه PIND.0 صفر باشه که PORTD.1 و PORTD.2 چشمک زن میشه !!!!!

طبق صحبت هات برنامت این میشه !! ( تحت بسکام )

کد php:
$regfile "m32def.dat"
$crystal 1000000
Ddrd 
Portd 3
Do
   
Debounce Pind.0 Ant Gosub
Loop

Ant
:
   
Toggle Portd.1 Toggle Portd.2
Return 
علی جون این برنامه بیسیک رو بامیکرو اجرا کردم ولی مشکلی که داره اینه که درابتدا بدون اینکه d.0 صفرشود d.1 روشن می شود!
منظورمن درکل اینه که بایک ورودی دوخروجی راکنترل کنم/یعنی اگر این ورودی رااولین بارصفر کردم یکی ازخروجیها یک شود واگردومین باراین ورودی صفرشد آنگاه خروجی دوم یک شود واگرسومین بار ورودی راصفر کردم دوباره خروجی اولی یک شود وهمینطورادامه یابد واگر مدت زیادی بین صفر شدن دوباره ورودی طول کشید برنامه قاطی نکند وبانظم کارش راانجام دهد!
درضمن تاخیر یادم رفت که بگم/هرکدام ازپورتهای خروجی که یک شده اند باید بعد از یک مدت تاخیر دوباره خودبه خود صفر شوند/
پس این برنامه باید درست باشه !!

کد php:
$regfile "m32def.dat"
$crystal 1000000
Ddrd 
Portd 1

Config Timer1 
Timer Prescale 8
Enable Interrupts 
Enable Timer1 On Timer1 t3rip3000

Dim B 
As Byte

Do
   
Debounce Pind.0 Ant Gosub
Loop

Ant
:
   If 
0 Then :
      
1
      Set Portd.1 
Reset Portd.2
   
Else :
      
0
      Reset Portd.1 
Set Portd.2
   End 
If
   
Start Timer1
Return

T3rip3000:
   
Reset Portd.1 Reset Portd.2
   Stop Timer1
Return 

هر خروجی نیم ثانیه فعال هستش و بعد از اون خاموش میشه !!!!

تو این مدت زمان ( همون نیم ثانیه ) اگر کلید زده شود خروجی فوق صفر شده و اون یکی دیگه یک میشه !!!

برای افزایش زمان نیم ثانیه پرسکالر تایمر یک رو عوض کنین !! ( و تایمر رو مقداردهی کنین )
ممنون
یک مشکل کوچولو!
بازدن کلید خروجی اول روشن شده وبعد ازنیم ثانیه خاموش می شود ولی بادوباره زدن کلید خروجی دوم روشن شده همینطور باقی می ماند وخاموش نمی شود!
نقل قول: برای افزایش زمان نیم ثانیه پرسکالر تایمر یک رو عوض کنین !! ( و تایمر رو مقداردهی کنین )
چطوری؟
مطمئنی ؟؟؟!!

اینو تست کن :

کد php:
$regfile "m32def.dat"
$crystal 1000000
Ddrd 
Portd 1

Config Timer1 
Timer Prescale 8
Enable Interrupts 
Enable Timer1 On Timer1 t3rip3000

Dim B 
As Byte

Do
   
Debounce Pind.0 Ant Gosub
Loop

Ant
:
   
Timer1 Start Timer1
   
If 0 Then :
      
1
      Set Portd.1 
Reset Portd.2
   
Else :
      
0
      Reset Portd.1 
Set Portd.2
   End 
If
Return

T3rip3000:
   
Portd 1
   Stop Timer1
Return 
علی جون ببخش که بیخوابت کردم/حالا درست شد البته یک میکرو صفرکیلومتر استفاده کردم!
لطفا این تاخیرو هم یکم توضیح بدین/می خوام زمانشو افزایش بدم؟
برنامه اول چطور ؟
اون درست بودش ؟؟

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

همین !!!
واسه توضیحات بیشتر این کتاب رو بخون : http://iranled.com/forum/showthread.php?tid=10869

واسه یه ثانیه اینو بنویس :

کد php:
$regfile "m32def.dat"
$crystal 1000000
Ddrd 
Portd 1

Config Timer1 
Timer Prescale 64
Enable Interrupts 
Enable Timer1 On Timer1 t3rip3000

Dim B 
As Byte

Do
   
Debounce Pind.0 Ant Gosub
Loop

Ant
:
   
Timer1 49911 Start Timer1
   
If 0 Then :
      
1
      Set Portd.1 
Reset Portd.2
   
Else :
      
0
      Reset Portd.1 
Set Portd.2
   End 
If
Return

T3rip3000:
   
Portd 1
   Stop Timer1
Return 
نقل قول: برنامه اول چطور ؟
اون درست بودش ؟؟
بله بامیکرو جدید دوباره برنامه اولی رو امتحان کردم ودرست کارکرد.
خیلی مخلصم.