اطلاعیه

Collapse
No announcement yet.

در خواست پروژه ی ریسه ی LED

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

    در خواست پروژه ی ریسه ی LED

    برنامه ای بنویسید که led های متصل به پورت a میکروکنترلر
    atmega16 به ترتیب از پایه کم ارزش روشن شوند و پس از
    روشن شدن تمام led ها به ترتیب ازپایه پر ارزش خاموش شوند.

    سلام
    این درخواست رو یکی از دوستان در پیام خصوصی خواسته بودند. (به علت مشکلاتی نتونستند پست بگذارند)
    ممنون میشم جواب بدهید

    همیشه کامل توضیح بدهیم تا جواب کامل بگیریم.
    لطفا برای تشکر روی دکمه تشکر بزنید و بخاطر این پست نزنید که تایپیک شلوغ نشود
    تایپیک های من:
    حل تمام مشکلات atmega128a (eca.ir)
    آموزش کار با سایت (eca.ir)

    #2
    پاسخ : در خواست پروژه ی ریسه ی LED

    باسلام.(این کد خطای منطقی داره یعنی led ها یکی یکی از صفر روشن میشن به 7 میرسن و از 7 به صفر برمیگردن کد درست رو حسین آقا توی پست پایین ارسال کردن)

    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>




    int main(void)
    {
    DDRA = 0xFF; //Set all pins in porta as output
    while (1)
    {
    for (unsigned char i = 0;i < 8;i++)
    {
    PORTA = (1 << i);
    _delay_ms(100);
    }
    for (unsigned char i = 6;i > 0;i--)
    {
    PORTA = (1 << i);
    _delay_ms(100);
    }
    }
    }





    جدیدترین ویرایش توسط A.I.E; ۰۸:۴۷ ۱۴۰۰/۰۸/۲۲.

    دیدگاه


      #3
      پاسخ : در خواست پروژه ی ریسه ی LED

      نوشته اصلی توسط electromohammad نمایش پست ها

      سلام
      این درخواست رو یکی از دوستان در پیام خصوصی خواسته بودند. (به علت مشکلاتی نتونستند پست بگذارند)
      ممنون میشم جواب بدهید

      سلام

      for (int i = 0; i < 8; i++)
      {
      PORTA |= (1<<i);
      }


      for (int i = 7; i >= 0; i--)
      {
      PORTA &= ~(1<<i);
      }

      باقی موارد مثل تاخیرها رو هم خودتون اعمال کنید.

      دیدگاه


        #4
        پاسخ : در خواست پروژه ی ریسه ی LED

        ببخشید من برنامه بالا رو اشتباه نوشتم فکر کردم میگن یکی یکی روشن بشه تا انتها و دوباره برعکس عمل کنه.بعد که شروع به اصلاح کردم عین کد شما دراومد ولی توی پروتئوس که چک میکنم یه بار پر و خالی میشه ولی از دفعه بعد دیگه چیزی تغییر نمیکنه.اگه تو شرط for دوم مساوی رو برداریم هم برنامه کار نمیکنه چون پین 0 دیگه خاموش نمیشه.این ایراد میتونه از چی باشه؟

        کاشف به عمل اومد که وقتی کانتر int تعریف میشه درست کار میکنه ولی unsigned char یا char تعریف میشه نه.
        جدیدترین ویرایش توسط A.I.E; ۰۸:۴۵ ۱۴۰۰/۰۸/۲۲.

        دیدگاه


          #5
          پاسخ : در خواست پروژه ی ریسه ی LED

          نوشته اصلی توسط A.I.E نمایش پست ها
          ببخشید من برنامه بالا رو اشتباه نوشتم فکر کردم میگن یکی یکی روشن بشه تا انتها و دوباره برعکس عمل کنه.بعد که شروع به اصلاح کردم عین کد شما دراومد ولی توی پروتئوس که چک میکنم یه بار پر و خالی میشه ولی از دفعه بعد دیگه چیزی تغییر نمیکنه.اگه تو شرط for دوم مساوی رو برداریم هم برنامه کار نمیکنه چون پین 0 دیگه خاموش نمیشه.این ایراد میتونه از چی باشه؟
          متوجه منظورتون نمیشم. کد رو بفرستید.

          دیدگاه


            #6
            پاسخ : در خواست پروژه ی ریسه ی LED

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            متوجه منظورتون نمیشم. کد رو بفرستید.
            من به خاطر اینکه میکرو هشت بیتیه و عدد مورد نیاز نهایتا به 7 میرسته از unsigned char برای کانتر استفاده کردم که توی این حالت یک دور برنامه کار میکنه یعنی شروع به روشن شدن میکنن و بعد خاموش میشن ولی دیگه متوقف میشه و ادامه پیدا نمیکنه.ولی وقتی کانتر int تعریف میشه برنامه بدون مشکل کار میکنه.


            #define F_CPU 1000000UL
            #include <avr/io.h>
            #include <util/delay.h>




            int main(void)
            {
            DDRA = 0xFF; //Set all pins in porta as output
            while (1)
            {
            for (unsigned char i = 0;i < 8;i++)
            {
            PORTA |= (1 << i);
            _delay_ms(100);
            }
            for (unsigned char i = 7;i >= 0;i--)
            {
            PORTA &= ~(1 << i);
            _delay_ms(100);
            }
            }
            }



            این رو اگر امکانش هست توی پروتئوس اجرا کنید.

            دیدگاه


              #7
              پاسخ : در خواست پروژه ی ریسه ی LED

              نوشته اصلی توسط A.I.E نمایش پست ها
              من به خاطر اینکه میکرو هشت بیتیه و عدد مورد نیاز نهایتا به 7 میرسته از unsigned char برای کانتر استفاده کردم که توی این حالت یک دور برنامه کار میکنه یعنی شروع به روشن شدن میکنن و بعد خاموش میشن ولی دیگه متوقف میشه و ادامه پیدا نمیکنه.ولی وقتی کانتر int تعریف میشه برنامه بدون مشکل کار میکنه.


              #define F_CPU 1000000UL
              #include <avr/io.h>
              #include <util/delay.h>




              int main(void)
              {
              DDRA = 0xFF; //Set all pins in porta as output
              while (1)
              {
              for (unsigned char i = 0;i < 8;i++)
              {
              PORTA |= (1 << i);
              _delay_ms(100);
              }
              for (unsigned char i = 7;i >= 0;i--)
              {
              PORTA &= ~(1 << i);
              _delay_ms(100);
              }
              }
              }



              این رو اگر امکانش هست توی پروتئوس اجرا کنید.
              خوب شما باید نوع داده حلقه دوم رو از نوع علامت دار بذارید. چون صفر منهای ۱ میشه ۲۵۵ توی اعلاد بدون علامت.

              دیدگاه

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