اطلاعیه

Collapse
No announcement yet.

سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

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

    سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

    سلام خدمت دوستان
    ---------------------------------------------
    1 - در محیط اتمل استدیو 7 ، واسه خوندن پین از چه کتابخونه و دستوراتی میشه استفاده کرد ؟
    مثلا در کدویژن مینوشتیم
    کد:
    if (PINB.4 == 0 )  x++;
    کد معادل این دستور در اتمل استدیو چی میشه ؟
    آیا این دستور واسه چک کردن صفرشدن پین 4 پورت B درسته ؟
    کد:
    if(bit_is_clear(PINB,4)) x++;
    اگر درسته ولی جواب نمیده !

    2 - اینکه تو اتمل دسترسی بیتی نداریم یعنی چی؟ یعنی فقط به پینها دسترسی بیتی ندازیم یا شامل بیت های رجیسترها هم میشه ؟

    3 - کلاک میکرو حتما باید بعنوان ماکرو در تابع main تعریف بشه یا فقط درصورتیکه از کتابخونه delay.h بخوایم استفاده کنیم باید کلاک رو هم تعریف کرد ؟

    4 - تعریف کردن تابع و سرویس روتین وقفه قبل یا بعد از تابع main تفاوتی داره ؟ ( تو کدویژن باید حتما اول تابع شناسونده میشد قبل از main ولی بصورت تجربی امتحان کردم تو اتمل فرقی نداره قبل یا بعد از main ، با اینکه قاعدتا تعریف تابع مربوط به زبان C هست و نباید تو برنامه ها فرقی کنه!!)

    5 - با رجیسترها و کدنویسی کدویژن آشنایی خوبی دارم ولی هرچقدر سایت eca و هم نت رو گشتم منبعی واسه نحوه کدنویسی وجواب سوالهام در اتمل استدیو پیدا نکردم ،
    اگر که دوستان سایت و یا منبع مناسب واسه نحوه کدنویسی تو محیط اتمل معرفی کنند ممنون میشم .


    جدیدترین ویرایش توسط milad.mohammadi373; ۲۰:۱۰ ۱۳۹۶/۱۱/۳۰.

    #2
    پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

    1 - در محیط اتمل استدیو 7 ، واسه خوندن پین از چه کتابخونه و دستوراتی میشه استفاده کرد ؟
    سلام
    باید به روش زیر عمل کنید:
    اگر 1 بودن پین رو میخواید چک کنید:
    کد:
    if (PINB & (1<<4))
    اگر 0 بودن یک پین رو میخواید چگ گنید:
    کد:
    if ( (PINB & (1<<4)) ==0)
    2 - اینکه تو اتمل دسترسی بیتی نداریم یعنی چی؟ یعنی فقط به پینها دسترسی بیتی ندازیم یا شامل بیت های رجیسترها هم میشه ؟
    فک کنم منظور اینه که دیگه دستوری مثل PINB.1 وجود نداره و تمام کارها رو باید با AND و OR و XOR و... انجام بدین

    3 - کلاک میکرو حتما باید بعنوان ماکرو در تابع main تعریف بشه یا فقط درصورتیکه از کتابخونه delay.h بخوایم استفاده کنیم باید کلاک رو هم تعریف کرد ؟
    تو تابع MAIN و قبل از اینکلودها این کار رو باید انجام بدین و همچنین از طریق قسمت PROPERTIES پروژه هم میشه این کار رو انجام داد که نیاز داری بگو محل دقیقش رو بهت بگم
    کلا چه واسه پروتکلها مثل سریال و I2C و ... و چه تایمرها و کانترها و... فرکانس باید مشخص باشه

    4 - تعریف کردن تابع و سرویس روتین وقفه قبل یا بعد از تابع main تفاوتی داره ؟ ( تو کدویژن باید حتما اول تابع شناسونده میشد قبل از main ولی بصورت تجربی امتحان کردم تو اتمل فرقی نداره قبل یا بعد از main ، با اینکه قاعدتا تعریف تابع مربوط به زبان C هست و نباید تو برنامه ها فرقی کنه!!)
    بعد تابع MAIN هم میشه اما باید قبل از تابع MAIN تابع خودتون رو معرفی کنید به صورت زیر:
    کد:
    void FUNCTION(void);
    5 - با رجیسترها و کدنویسی کدویژن آشنایی خوبی دارم ولی هرچقدر سایت eca و هم نت رو گشتم منبعی واسه نحوه کدنویسی وجواب سوالهام در اتمل استدیو پیدا نکردم ،
    اگر که دوستان سایت و یا منبع مناسب واسه نحوه کدنویسی تو محیط اتمل معرفی کنند ممنون میشم .
    به نظر من آموزشهای انجمن AVRFREAKS و همچنین سایت STACKOVERFLOW میتونه منبع خوبی باشه
    موفق باشی

    دیدگاه


      #3
      پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

      تشکر واسه پاسخگویی مفیدتون
      نوشته اصلی توسط M3R-E نمایش پست ها
      سلام
      باید به روش زیر عمل کنید:
      اگر 1 بودن پین رو میخواید چک کنید:
      کد:
      if (PINB & (1<<4))
      اگر 0 بودن یک پین رو میخواید چگ گنید:
      کد:
      if ( (PINB & (1<<4)) ==0)

      فک کنم منظور اینه که دیگه دستوری مثل PINB.1 وجود نداره و تمام کارها رو باید با AND و OR و XOR و... انجام بدین


      تو تابع MAIN و قبل از اینکلودها این کار رو باید انجام بدین و همچنین از طریق قسمت PROPERTIES پروژه هم میشه این کار رو انجام داد که نیاز داری بگو محل دقیقش رو بهت بگم
      کلا چه واسه پروتکلها مثل سریال و I2C و ... و چه تایمرها و کانترها و... فرکانس باید مشخص باشه


      بعد تابع MAIN هم میشه اما باید قبل از تابع MAIN تابع خودتون رو معرفی کنید به صورت زیر:
      کد:
      void FUNCTION(void);


      به نظر من آموزشهای انجمن AVRFREAKS و همچنین سایت STACKOVERFLOW میتونه منبع خوبی باشه
      موفق باشی

      دیدگاه


        #4
        پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

        برنامه ی خیلی ساده ای نوشتم بوسیله باتن خواستم یک LED رو خاموش روشن کنم ولی بازم پین رو نمیخونه ، فکر نمیکنم این دستور جوابگو باشه.. گذشته ازینا هر تابع وقفه ای که میذارم بدون وجود درخواست ابتدای برنامه یکبار اجرا میشه!! دوستان اگر راهنمایی بفرمایین ممنون میشم؟!
        کد:
        [FONT=Yekan]#include <avr/io.h>[/FONT]
        
        
        
        int main(void)
        {
            DDRA = (1<<DDA0);
            PORTC = (1<<PORTC0);
            while (1) 
            {
                if (PINC & (1<<PINC0)== 0)
                {
                    PORTA ^= (1<<PORTA0);
                    while(PINC & (1<<PINC0)== 0);
                }
            }
        }
        نوشته اصلی توسط M3R-E نمایش پست ها
        سلام
        باید به روش زیر عمل کنید:
        اگر 1 بودن پین رو میخواید چک کنید:
        کد:
        if (PINB & (1<<4))
        اگر 0 بودن یک پین رو میخواید چگ گنید:
        کد:
        if ( (PINB & (1<<4)) ==0)

        فک کنم منظور اینه که دیگه دستوری مثل PINB.1 وجود نداره و تمام کارها رو باید با AND و OR و XOR و... انجام بدین


        تو تابع MAIN و قبل از اینکلودها این کار رو باید انجام بدین و همچنین از طریق قسمت PROPERTIES پروژه هم میشه این کار رو انجام داد که نیاز داری بگو محل دقیقش رو بهت بگم
        کلا چه واسه پروتکلها مثل سریال و I2C و ... و چه تایمرها و کانترها و... فرکانس باید مشخص باشه


        بعد تابع MAIN هم میشه اما باید قبل از تابع MAIN تابع خودتون رو معرفی کنید به صورت زیر:
        کد:
        void FUNCTION(void);


        به نظر من آموزشهای انجمن AVRFREAKS و همچنین سایت STACKOVERFLOW میتونه منبع خوبی باشه
        موفق باشی
        جدیدترین ویرایش توسط milad.mohammadi373; ۰۰:۵۱ ۱۳۹۶/۱۲/۰۱.

        دیدگاه


          #5
          پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

          نوشته اصلی توسط milad.mohammadi373 نمایش پست ها
          برنامه ی خیلی ساده ای نوشتم بوسیله باتن خواستم یک LED رو خاموش روشن کنم ولی بازم پین رو نمیخونه ، فکر نمیکنم این دستور جوابگو باشه.. گذشته ازینا هر تابع وقفه ای که میذارم بدون وجود درخواست ابتدای برنامه یکبار اجرا میشه!! دوستان اگر راهنمایی بفرمایین ممنون میشم؟!
          کد:
          [FONT=Yekan]#include <avr/io.h>[/FONT]
          
          
          
          int main(void)
          {
              DDRA = (1<<DDA0);
              PORTC = (1<<PORTC0);
              while (1) 
              {
                  if (PINC & (1<<PINC0)== 0)
                  {
                      PORTA ^= (1<<PORTA0);
                      while(PINC & (1<<PINC0)== 0);
                  }
              }
          }
          مشکلتون اینه که پرانتز کم گذاشتین ، کل اون شرطی که میخواید چک کنید باید تو پرانتز باشه :
          کد:
          if ( [COLOR=#ff0000]([/COLOR]PINC & (1<<PINC0)[COLOR=#ff0000])[/COLOR]== 0)
          کد:
          while( [COLOR=#ff0000]([/COLOR]PINC & (1<<PINC0)[COLOR=#ff0000])[/COLOR] == 0);
          واسه اون تابع هم که میگید اول برنامه یه بار اجرا میشه کدتون رو قرار بدین تا بررسی بشه

          دیدگاه


            #6
            پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

            مشکل حل شد ممنون .. درخصوص ورود به وقفه خارجی هم (واسه خوندن کیپد) با جابجا کردن تعاریف رجیسترها با تعریف ورودی/خروجی پورتها مشکل حل شد.. ولی واسم جالبه که اتمل استدیو تا این حد به خط تعریف رجیستر و پورت حساسه !
            نوشته اصلی توسط M3R-E نمایش پست ها
            مشکلتون اینه که پرانتز کم گذاشتین ، کل اون شرطی که میخواید چک کنید باید تو پرانتز باشه :
            کد:
            if ( [COLOR=#ff0000]([/COLOR]PINC & (1<<PINC0)[COLOR=#ff0000])[/COLOR]== 0)
            کد:
            while( [COLOR=#ff0000]([/COLOR]PINC & (1<<PINC0)[COLOR=#ff0000])[/COLOR] == 0);
            واسه اون تابع هم که میگید اول برنامه یه بار اجرا میشه کدتون رو قرار بدین تا بررسی بشه

            دیدگاه


              #7
              پاسخ : سوال : خواندن مقدار پین در اتمل استدیو + چند سوال پایه !

              سلام. با اجازه دوست عزیز M3R-E پاسخ مفیدشون رو تکمیل می*کنم.
              با اینکلود کردن کتابخونه زیر:
              #include <compat/deprecated.h>

              میتونید از دستورات زیر استفاده کنید:

              bit_is_clear(Register,bit);
              bit_is_set(Register,bit);
              sbi(Register,bit);
              cbi(Register,bit);

              که شمارو قادر به دسترسی بیتی به پورت و پین و هر ریجیستر دیگه ای از میکرو مینماید.
              تقریبا هرچیزی که شما بخواین در مورد کدنویسی در محیط اتمل استودیو بدونین تو همین انجمن هست. اینم آدرس تاپیک مربوط:
              با سلام درپی درخواست دوستان این تاپیک رو ایجاد کردم تا کسانی که با کدویژن کار میکنند و دوست دارند بتوانند تو محیط AtmelStudio کارکنند و از امکاناتش بهره ببرند، این کار براشون راحت باشه. قبل از هرچیز جا داره یک توضیحاتی در رابطه با Atmel Studio بدم: Atmel Studio یک محیط برنامه نویسی( IDE ) مختص برنامه نویسی برای
              جدیدترین ویرایش توسط Mostafa.y; ۱۵:۳۹ ۱۳۹۶/۱۲/۰۱.

              دیدگاه

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