با سلام. آقا ما بعد از 1 سال پروژه ساختن با pic تازه فهمیدیم توی مدارامون این پورتا بعضی وقتا حالت یکی از پایه های خروجیشون خود به خود عوض میشه. خیلی عجیبه. هرچقدر فکر میکنم چرا نمیفهمم واقعا. لطفا کمک کنید
اطلاعیه
Collapse
No announcement yet.
تغییر وضعیت دادن ناگهانی خروجی های pic
Collapse
X
-
پاسخ : تغییر وضعیت دادن ناگهانی portb
قربان شما آقا شاهرخ.خیلی مخلصیم. سرباز شدیم رفت!! شرایط کاری عادی هستش. روی چندتا مدار مختلف هم متوجه این موضوع شدم. اصلا به ذهنم واقعا هیچی قد نمیده!!! نمیدونم رجیستر خاصی هستش که اگه تنظیم نشه خروجیامون نا پایدار بشن!! توی دیتاشیت که خیلی گشتم چیزی پیدا نکردم. هم با اسمبلی و هم با سی این مشکل داشتم
دیدگاه
-
پاسخ : تغییر وضعیت دادن ناگهانی portb
والا شرایط کاریش خاص نیستش زیاد. مثلا یکیشون واس اتاقمه که چشمی بهش وصل کردم تا هر وقت رفتم توی اتاق چراغا روشن بشن. ولی نمیدونم چرا بعد از 1 ماه مثلا 1هو روشن میشه و بعد از تایمی که واسش تعریف کردم دوباره خاموش میشه!!!!! نمیدونم چرا. این پورتای خروجی هیچ شرایط خاصی ندارن یعنی که من در نظر نمیگیرم!!!!!!
دیدگاه
-
پاسخ : تغییر وضعیت دادن ناگهانی portb
اینم یه برنامه سادم. البته منظور من کل خروجی هام هستش. یعنی فقط portb اینجوری نیست. همه ی پورتای خروجیم اینجورن. wdt هم نمیتونم روشن کنم.روشن کنم طرز کار برنامم به هم میریزه.البته فکنم بشه توی جاهایی که کار خاصی انجام نمیدم wdtرو روشن بزارم و بعدش که کار خاصی خاستم بکنم روشنش کنم . البته اگه یه خروحی روشن شه و wdt ریست کنه خروجیم خاموش میشه که. فایده نداره فکنم
کد:#include <16f72.h> #device adc=10 #use delay(clock=20Mhz) #fuses hs,nowdt,BROWNOUT,protect #use fast_io(b) //---------------------------------------------------------- //#define swich pin_b0 #define cheshme1 pin_b6 //#define cheshme2 pin_b7 #define out1 pin_c4 #define out2 pin_c5 //---------------------------------------------------------- #byte T1CON = getenv("SFR:T1CON") #bit TMR1ON = T1CON.0 #bit t1oscen = T1CON.3 #bit tmr1cs=t1con.1 #bit t1sync = T1CON.2 //-----#byte t1con=0x10 //----------------------------------------------------- int1 out11=0,out22=0;int16 to1,to2;int32 roshan; //to1 yani timer out1 int32 ir,mir; ///mir : motehgayere girande ir hastesh //---------------------------------------------------------- #int_timer1 void Timer1_isr() { if (out11==1)to1+=1; if (out22==1)to2+=1; set_timer1(0); } //----------------------------------------------------------- #int_rb void rb_isr() {if (input(cheshme1)){output_high(out1);output_high(out2);out11=1;to1=0;} tmr1on=1; enable_interrupts(INT_RB ); } //----------------------------------------------------------- void main(){ t1oscen=0; t1sync =1; tmr1cs=0;output_c(0b0); setup_adc_ports( ANALOG_RA3_REF); setup_adc(ADC_CLOCK_INTERNAL ); setup_timer_1 ( T1_internal | T1_DIV_BY_8 ); tmr1on=0; disable_interrupts(INT_TIMER0); enable_interrupts(INT_TIMER1); clear_interrupt(int_rb); enable_interrupts(INT_RB ); enable_interrupts(GLOBAL); //........................................................... set_tris_b(0b11111111); set_tris_a(0b11111111); set_tris_c(0b00); while(true){ set_adc_channel(2); delay_ms(20); roshan=read_adc(); roshan*=25; set_adc_channel(1); delay_ms(20); mir=read_adc(); mir/=10; set_adc_channel(0); delay_ms(20); ir=read_adc();ir*=.95; ir/=10; if (out11==0&&ir<=mir)disable_interrupts(INT_RB ); if (out11==0&&ir>mir) enable_interrupts(INT_RB ); if (input(cheshme1))to1=0; if (to1>=roshan&&!input(cheshme1)){output_low(out1);output_low(out2);out11=0;to1=0;} if (out11==0)tmr1on=0; }}
دیدگاه
-
پاسخ : تغییر وضعیت دادن ناگهانی خروجی های pic
1.شماتیک نذاشتی.
2. کدت خیلی نامرتب بود سر در نیاوردم. یه چند تا ایراد کوچیک هم داره.
3. brownout رو غیر فعال کنی بنظرم بهتره.
4.مطمئن باش تغذیه ات درسته. خازن تغذیه. خازن کریستال. مقاومت 4.7 کیلو برای ریست یادت نره. سیم کشی ات کوتاه باشه.
5. دلیل ایراد میتونه یکی از موارد زیر باشه:
ریست میکرو
تحریک ورودی ها
ایراد در منطق برنامه
دیدگاه
-
پاسخ : تغییر وضعیت دادن ناگهانی خروجی های pic
عزیز brownout رو غیر فعال کردم. توی اینجا اشتب زدم. تغذیم درسته. خازنم داره. خازن کریستالمم درسته. مقاومتم واس ریست گذاشتم. سیم کشیمم خیلی کوتاهه. فقط توی یکی از مدارام که فرکانسش 20 مگ هست مقاومت pulldown رو 10کیلو گذاشتم که احتمال میدم از این باشه .ولی توی یه مدار دیگم که گیرنده ریموتای 433مگاهرتز هستش توی اون دیگه وورودیم با کلید کنترل نمیشه. بلکه با گیرندم کنترل میشه خروجیم و اگر کد ورودیم درست بودش پایه خروجیم یک میکنه. توی اون موندم که چرا خروجی خود به خود بعضی وقتا یک میشه. زمان لرن شدن ریموت هم مطمینم نویز نمیگیره. لطفا راهنمایی کنید
دیدگاه
دیدگاه