اطلاعیه

Collapse
No announcement yet.

تست رها شدن کلید در atmel studio ؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تست رها شدن کلید در atmel studio ؟

    سلام
    میخوام یه کلید فشاری رو تو اتمل استدیو چک کنم.
    تاپیک های مرتبط رو خوندم .
    سوالم دقیقا تو قسمت تست رها شدن کلیده .من این کارو با حلقه while انجام میدم.
    کد:
    while (!(PINB&(1<<PINB0)));
    برنامه میاد تو این دستور گیر میکنه
    برنامه رو عوض کردم
    کتابخونه <avr/sfr_defs.h> رو include کردم و
    کد:
     while (bit_is_clear(PINB,0));
    باز هم همین مشکل رو داره.
    تو کد ویژن هم همین مشکل رو با این بخش کد داشت . کسی راه حل سراغ داره ؟
    همین مدل کدنویسی تو شرط if به خوبی جواب میده ولی تو شرط while :cry2:

    در ضمن pullup پایه فعال شده و پایه هم ورودی تعریف شده
    ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّهِ *******
    اللهم صل علی محمد وآل محمد و عجل فرجهم

    #2
    پاسخ : تست رها شدن کلید در atmel studio ؟

    دقیقا نمیدونم ولی تو یکی از کتابهای اموزش رباتیک شرط خروج از حلقه تو این حالت رو با یک شدن پین مورد نظر انجام میداد نه با صفر شدن.
    یعنی از یه مقاومت Pull down استفاده کن و برای اجرای دستور پین رو یک کن
    کد:
    while(PINB.0){}
    با این دستور pinb.0 به محض یک شدن از حلقه خارج میشه

    دیدگاه


      #3
      پاسخ : تست رها شدن کلید در atmel studio ؟

      نوشته اصلی توسط saeiddiod
      دقیقا نمیدونم ولی تو یکی از کتابهای اموزش رباتیک شرط خروج از حلقه تو این حالت رو با یک شدن پین مورد نظر انجام میداد نه با صفر شدن.
      یعنی از یه مقاومت Pull down استفاده کن و برای اجرای دستور پین رو یک کن
      کد:
      while(PINB.0){}
      با این دستور pinb.0 به محض یک شدن از حلقه خارج میشه
      شما که همه چیزو not کردی
      درضمن PINB.0 یه فرم غلط از نوشتن روی پینه که فقط تو کدویژن کاربرد داره
      تو اتمل استدیو باید از همون دستورات بالا استفاده کرد .

      سوال اینه >> این شرط برای if درست داره کار میکنه . چرا برا while قر میده ؟
      ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّهِ *******
      اللهم صل علی محمد وآل محمد و عجل فرجهم

      دیدگاه


        #4
        پاسخ : تست رها شدن کلید در atmel studio ؟

        خروجی اسمبلی رو نگا کن شاید یه چیزایی دیدی .
        احتمالا اگه بهینه سازی رو خاموش کنی درست بشه .
        گذشت خصلت مردان است

        دیدگاه


          #5
          پاسخ : تست رها شدن کلید در atmel studio ؟

          سلامtohid041
          این برنامه رو تو کدویژن نوشتم . جواب هم گرفتم . برنامه ساده ایه . فقط چون تو اتمل استادیو تازه واردم اینه که همه جاش ممکنه غلط باشه ، میشه چکش کنید ؟optimiz رو هم none کردم . بدتر شد . قبلا صفر رو نمایش میداد . الان اون هم پرید.

          up,down کانتر و نمایش روی 7seg کاتد مشترک - pb0 , pb1 ورودی و پول پ

          کد:
          
          #include <avr/io.h>
          #include <avr/pgmspace.h>
          static const unsigned char display[] PROGMEM ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          int main(void)
          {
          unsigned char i=0;
           DDRB &=~ ((1<<DDB1)| (1<<DDB0));
           PORTB=(1<<PORTB1)| (1<<PORTB0);
           
           DDRA=0XFF;
           PORTA=display[0];
           
           while(1)
          	{if (!(PINB&(1<<PINB0))) 
          		{ i++;
          	   PORTA=display[i];
               while (!(PINB&(1<<PINB0)));
          	 	}
          		 
            if (!(PINB&(1<<PINB1))&&i>0)
          		{ i--;
               PORTA=display[i];
               while (!(PINB&(1<<PINB1)));
          		}  
          } 
          }
          با خود اتمل که دیباگ میکنم باید وقتی به PORTA=display[0]; میرسه کد رو بزاره رو پورت a . نمیزاره !
          ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّهِ *******
          اللهم صل علی محمد وآل محمد و عجل فرجهم

          دیدگاه


            #6
            پاسخ : تست رها شدن کلید در atmel studio ؟

            فکر کنم مشکل توی خوندن از حافظه فلش باشه.اینطور دوستان توی تاپیک کوچ کردن از کدویژن به اتمل استودیو می گفتن متغیری که در حافظه فلش ذخیره میشه باید با ماکروهای pgm_read_byte و یا امثال اون خونده بشه و بعد ازش استفاده بشه.البته من خودم این کارو نمی کنم و جواب میده.حالا شما یه امتحانی بکن.

            دیدگاه


              #7
              پاسخ : تست رها شدن کلید در atmel studio ؟

              کد:
              #include <avr/io.h>
              #include <avr/pgmspace.h>
              
              const unsigned char PROGMEM display[10] = {
               0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
              };
              
              int main(void) {
               unsigned char i = 0;
               
               PORTB = ((1 << PORTB1) | (1 << PORTB0));
               DDRB = 0;
               PORTA = pgm_read_byte(&display[0]);
               DDRA = ~0;
               
               while (1) {
                if (!(PINB & (1 << PINB0)) && i < 9) {
                 PORTA = pgm_read_byte(&display[++i]);
                 while (!(PINB & (1 << PINB0)));
                }
                if (!(PINB & (1 << PINB1)) && i > 0) {
                 PORTA = pgm_read_byte(&display[--i]);
                 while (!(PINB & (1 << PINB1)));
                }
               }
               
               return 0;
              }
              گذشت خصلت مردان است

              دیدگاه


                #8
                پاسخ : تست رها شدن کلید در atmel studio ؟

                کاربر گرامی توحید041 عکستو عوض کردی نشناختم :دی

                آقا این اتمل استدیو انگار یه زبون دیگه است . چقدر قلق داره
                اگه بتونم توش راه بیافتم تمام قلقهاشو یه ای بوک میکنم تا بقیه قدر من زجر نکشن !

                بازم ممنون
                ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّهِ *******
                اللهم صل علی محمد وآل محمد و عجل فرجهم

                دیدگاه

                لطفا صبر کنید...
                X