اطلاعیه

Collapse
No announcement yet.

کمک در حل تمرین درس AVR **فوری**

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

    کمک در حل تمرین درس AVR **فوری**

    سلام دوستان
    راستش من میکرو صفر صفرم و تازه میخوام یاد بگیرم. ببخشید اگه زیادی مبتدی هستم
    استادمون گفته این تمرینو بعد عید باید تحویل بدم و منم الان حس پیک نوروزی بهم دست داده :biggrin:
    خواهشا کمک کنید که 2-3 روز دیگه بیشتر وقت نیست
    خوب..
    تمرین ساده ایه ولی گفته که "بهینه ترین" و "کوتاه ترین" برنامه رو بنویسید.


    تمرین از این قراره که 16 عدد led مثلا به پورت B و A وصله و 3تا شاسی به پورت C که:
    با زدن کلید اول ledها به صورت رفت
    با زدن کلید دوم به صورت برگشت
    و با زدن کلید سوم به صورت رفت و برگشتی
    روشن بشوند.

    ایده خودم این بود که یه "جدول لوکاپ" درست و آرایه های led هارو داخلش قرار بدم و توسط یه حلقه بخونمشون ولی مشکل اینجاس که led ها به دوتا پورت وصل هستن!!! یعنی چطوری میشه به دوتا پورت عدد داد؟؟؟

    لطفا راهنمایی کنید
    (راستی با کدویژن)

    #2
    پاسخ : کمک در حل تمرین درس AVR **فوری**

    پیدا کردن بهترین و کوتاه ترین مساله رو سخت کرده اما پیشنهاد من:
    یه تابع تعریف کن که یه عدد 16 بیتی رو دریافت کنه و عدد دریافتی رو نسبت بده به پورتها و نمایش بده
    بعد بیا داخل حلقه while(1)
    شرط بزار که کدوم کلید فشرده شده
    بعد توابع رو داخل شرط بنویس.

    مثلا برای حالت رفت عدد 0x0001 رو شیفت بده به سمت چپ
    بعد به تابع بده عدد رو که نمایش بده
    بعد این کار رو 16 بار تکرار کنه

    بره برگشت هم همینطور
    رفت و برگشتم که میشه ادغام این دو

    اسمم بابا برقیه می دونین کارم چیه دلم می خواد همه جا که با کمک شما
    مصرف برق کم بشه تا برقمون قطع نشه
    مصرف بی رویه کار خیلی بدیه موقع پخش کارتون برق تلویزیون
    اگه یه دفعه بره حوصله مون سر می ره
    هرگز نشه فراموش لامپ اضافی خاموش

    دیدگاه


      #3
      پاسخ : کمک در حل تمرین درس AVR **فوری**

      خوب ، لازم نیست به دو تا پورت عدد بدی هر پورتی هشت بیت صفر ویک داره خوب مثلا برای رفت یا برگشت 1000,000,0 این عدد یک میشه پورت A.8 اگر با یک حلقه for تو زبان C، این رو تقسیم بر دو کنی یک شیفت به راست میخوره و اگر ضربدر دو کنی شیفت به چپ میخوره خوب این تا اینجای کار ؛ چون 16 تا LED داری دو تا حلقه فور بنویس اون حلقه for اولی که کارش تموم شد حلقه for دومی میره به 8 تای بعدی
      برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
      یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

      دیدگاه


        #4
        پاسخ : کمک در حل تمرین درس AVR **فوری**

        اگه من باشم میام از آی سی شیفت رجیستر 74hc595 استفاده میکنم. با 4 تا پین میکرو میتونید 16تا ال ای دی رو فرمان بدید.
        www.gam-co.blogsky.com

        دیدگاه


          #5
          پاسخ : کمک در حل تمرین درس AVR **فوری**

          نوشته اصلی توسط بابا برقی
          پیدا کردن بهترین و کوتاه ترین مساله رو سخت کرده اما پیشنهاد من:
          یه تابع تعریف کن که یه عدد 16 بیتی رو دریافت کنه و عدد دریافتی رو نسبت بده به پورتها و نمایش بده
          بعد بیا داخل حلقه while(1)
          شرط بزار که کدوم کلید فشرده شده
          بعد توابع رو داخل شرط بنویس.

          مثلا برای حالت رفت عدد 0x0001 رو شیفت بده به سمت چپ
          بعد به تابع بده عدد رو که نمایش بده
          بعد این کار رو 16 بار تکرار کنه

          بره برگشت هم همینطور
          رفت و برگشتم که میشه ادغام این دو
          ممنون از جوابتون
          ولی این عدد 16بیتی رو که میگید چطوری باید بریزمشون روی 2تا پورت؟؟؟

          اضافه شده در تاریخ :
          نوشته اصلی توسط Fanoudi
          خوب ، لازم نیست به دو تا پورت عدد بدی هر پورتی هشت بیت صفر ویک داره خوب مثلا برای رفت یا برگشت 1000,000,0 این عدد یک میشه پورت A.8 اگر با یک حلقه for تو زبان C، این رو تقسیم بر دو کنی یک شیفت به راست میخوره و اگر ضربدر دو کنی شیفت به چپ میخوره خوب این تا اینجای کار ؛ چون 16 تا LED داری دو تا حلقه فور بنویس اون حلقه for اولی که کارش تموم شد حلقه for دومی میره به 8 تای بعدی
          مرسی
          ولی راستش من درست منظورتونو متوجه نشدم
          میشه لطفا یکم از برنامرو بنویسید. البته اگه زحمتی نیست

          اضافه شده در تاریخ :
          نوشته اصلی توسط vahidabedi
          اگه من باشم میام از آی سی شیفت رجیستر 74hc595 استفاده میکنم. با 4 تا پین میکرو میتونید 16تا ال ای دی رو فرمان بدید.
          از لحاظ سخت افزار نه!!!
          برنامش و کدها رو میگم
          فقط خود میکرو باید باشه

          دیدگاه


            #6
            پاسخ : کمک در حل تمرین درس AVR **فوری**

            توسط تابع
            یه چیزی شبیه به این
            [code=c]
            void PORT(unsigned int Key)
            {
            PORTA=Key&0b0000000011111111;
            Key=Key>>8
            PORTB=Key&0b0000000011111111;
            }
            [/code]
            اسمم بابا برقیه می دونین کارم چیه دلم می خواد همه جا که با کمک شما
            مصرف برق کم بشه تا برقمون قطع نشه
            مصرف بی رویه کار خیلی بدیه موقع پخش کارتون برق تلویزیون
            اگه یه دفعه بره حوصله مون سر می ره
            هرگز نشه فراموش لامپ اضافی خاموش

            دیدگاه


              #7
              پاسخ : کمک در حل تمرین درس AVR **فوری**

              :wow: سلام عید مبارک
              چرا اینقدر کار رو واسه ی خودتون سخت می کنید؟! :biggrin:

              کد:
              unsigned char R[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80); //Right
              unsigned char L[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};  //Left
              
              unsigned char i=0;
              
              main()
              {
              while()
              {
              if(c.0==0)
              {
              
              for(i=0;i<8;i++)
              {
              PORTA=R[i];
              delay_ms(100);
              }
              
              for(i=0;i<8;i++)
              {
              PORTB=R[i];
              delay_ms(100);
              }
              
              }
              
              if(c.1==0)
              {
              
              for(i=0;i<8;i++)
              {
              PORTB=L[i];
              delay_ms(100);
              }
              
              for(i=0;i<8;i++)
              {
              PORTA=L[i];
              delay_ms(100);
              }
              
              }
              
              if(c.3==0)
              {
              
              for(i=0;i<8;i++)
              {
              PORTA=R[i];
              delay_ms(100);
              }
              
              for(i=0;i<8;i++)
              {
              PORTB=R[i];
              delay_ms(100);
              }
              
              for(i=0;i<8;i++)
              {
              PORTB=L[i];
              delay_ms(100);
              }
              
              for(i=0;i<8;i++)
              {
              PORTA=L[i];
              delay_ms(100);
              }
              
              }
              
              
              }//while
              
              }//main
              آنچه که باعث موفقیت انسان ها می شود سخت کوشی است و نه نخبه بودن! Porsche 911 Turbo S 181.000 $ USD
              جناب سعدی فرموده بودند: "بر احوال ان مرد باید گریست _ که دخلش بود نوزده، خرجش بیست!"
              که اگه الان بود باید میگفت: "بود حال و احوال آن مرد زار _ که دخلش ریال است ، خرجش دلار :|"
              http://www.eca.ir/forum2/index.php?topic=80472.msg489565#msg489565
              http://www.eca.ir/forum2/index.php?topic=82242.msg501926#msg501926

              دیدگاه


                #8
                پاسخ : کمک در حل تمرین درس AVR **فوری**

                :read: کدهای بالا رو بریز وقتی دیدی مدارت درست کار کرد بعدش برو توی فکر کاهش خط کد و شیفت دادن و سخت افزار اضافه ... :nice:
                همچنین تو کدهای بالا باید دستورات شرطی متعدد دیگری نیز قرار بدید تا به محض اینکه کلید فشار داده میشه عملکرد مدار تغییر کنه که ما از عمد اون دستورات رو ننوشتیم و به عهده ی دانش آموز :biggrin: می باشد
                آنچه که باعث موفقیت انسان ها می شود سخت کوشی است و نه نخبه بودن! Porsche 911 Turbo S 181.000 $ USD
                جناب سعدی فرموده بودند: "بر احوال ان مرد باید گریست _ که دخلش بود نوزده، خرجش بیست!"
                که اگه الان بود باید میگفت: "بود حال و احوال آن مرد زار _ که دخلش ریال است ، خرجش دلار :|"
                http://www.eca.ir/forum2/index.php?topic=80472.msg489565#msg489565
                http://www.eca.ir/forum2/index.php?topic=82242.msg501926#msg501926

                دیدگاه


                  #9
                  پاسخ : کمک در حل تمرین درس AVR **فوری**

                  بهینه بودن به معنی کم بودن تعداد خط کد ها نیس.
                  ممکنه صد خط کد نوشته بشه. اما...
                  ممکنه 3 خط کد نوشته بشه. اما ...

                  دیدگاه


                    #10
                    پاسخ : کمک در حل تمرین درس AVR **فوری**

                    منم کد اقای افتخار الکترونیک رو قبول دارم
                    همین توی ذهن من هم بود
                    با تشکر

                    دیدگاه

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