اطلاعیه

Collapse
No announcement yet.

جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

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

    جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

    سلام
    یک سئوال
    من می خوام پورتی رو به این صورت مقدار دهی کنم( برای سون سگمنت) - مثلآ : PORTD=0x6F
    ولی یک بیت از این پورت رو که به صورت ورودی تعریف کردم نمی خوام مقداری بهش تعلق بگیره
    باید چه کار کنم تا بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

    #2
    پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

    فرض PIND.0 ورودی
    کد:
    unsigned char t
    t=PIND.0;
    PORTD=0x6f |t;
    تست کن ببین جواب میده
    .The best question deserves a better answer
    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
    «پناه»می برم «به خدا»
    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

    دیدگاه


      #3
      پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

      خب دقیق تر بخوام توضیح بدم منظورم اینه
      من آرایه ای رو به این شکل برای سون سگمنت تعریف کردم ( در کدویژن)

      flash unsigned char Segment[]={0x6F,0x60,0xAB,0x8F,0xC6,0xCD,0xED,0x7,0xEF,0xCF }; l

      و پورت D یک Atmega 8 رو هم به این شکل

      DDRD=0xEF; l

      تمامی پایه های پورت D به جز PORTD.4 به صورت خروجی هست PORTD.4 برای وقفه تایمر صفر تنظیم شده که یک فرکانس متر موج PWM هستش

      حالا من می خوام تمام پورت D رو به یکی از آرایه های سون سگمنت که براش تعریف کردم نسبت بدم. بدون اینکه به PORTD.4 مقداری بدم و اختلالی در کار فرکانس متر ایجاد کنم

      میشه با توجه به این توضیحات دستورشو بهم بگید؟ ممنونم

      دیدگاه


        #4
        پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی

        نوشته اصلی توسط laleh_slm
        خب دقیق تر بخوام توضیح بدم منظورم اینه
        من آرایه ای رو به این شکل برای سون سگمنت تعریف کردم ( در کدویژن)

        flash unsigned char Segment[]={0x6F,0x60,0xAB,0x8F,0xC6,0xCD,0xED,0x7,0xEF,0xCF }; l

        و پورت D یک Atmega 8 رو هم به این شکل

        DDRD=0xEF; l

        تمامی پایه های پورت D به جز PORTD.4 به صورت خروجی هست PORTD.4 برای وقفه تایمر صفر تنظیم شده که یک فرکانس متر موج PWM هستش

        حالا من می خوام تمام پورت D رو به یکی از آرایه های سون سگمنت که براش تعریف کردم نسبت بدم. بدون اینکه به PORTD.4 مقداری بدم و اختلالی در کار فرکانس متر ایجاد کنم

        میشه با توجه به این توضیحات دستورشو بهم بگید؟ ممنونم
        چون PORTD4 رو به شکل ورودی تعریف کردی, مقدار دهی رجیستر PORTD فقط pull-up داخلی رو فعال یا غیر فعال می کنه. و چون این پین رو به عنوان T0 استفاده کردی اگه اشتباه نکرده باشم, ست کردن رجیستر PORT حتی pull-up رو هم فعال نمی کنه (البته مطمئن نیستم :read ولی به هر حال تاثیری نخواهد داشت.
        با توجه به مقادیر هگزی هم که تو آرایه داری همیشه PORTD.4 برابر با صفره و عملا هیچ گونه اختلالی وجود نداره (البته بازم تاکید می کنم فوقش اگه مقدارشو 1 بدیم pull-upش فعال می شه)

        نوشته اصلی توسط •.´™ مَسِِــــح`.•
        فرض PIND.0 ورودی
        کد:
        unsigned char t
        t=PIND.0;
        PORTD=0x6f |t;
        تست کن ببین جواب میده
        این جیه؟ oo:
        این کد عملا کاربرد خاصی نداره, عملکردشم به این شکلکه اگه سطح منطقی D0 یک باشه pull-upش فعال می شه و اگه هم صفر باشه باز چون با 1 or شده فعال می شه, مگر اینکه بیت اول مقدار هگز و سطح منطقی پین صفر باشن.
        اي پادشه خوبان داد از غم تنهايي

        دل بي تو به جان آمد وقت است که باز آيي

        دیدگاه


          #5
          پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

          جناب savior توصیه میکنم یک برنامه led چشمک زن led ببندید مفهوم پورت پین براتون جا بیوفته :bye
          .The best question deserves a better answer
          =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
          «پناه»می برم «به خدا»
          از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
          محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

          دیدگاه


            #6
            پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

            شما اول باید یک کد مخصوص سون سگمنت بنا به نیازتون بنویسید(منظورم اینه در اون PORTD.4 در نظر نگیرین)
            فرض کد اینه: seg[]={}

            مثال:

            کد:
            unsigned char a
            a=PIND & 0x10
            PORTD&=a;
            PORTD|=seg;
            اینو تست کنین
            اگه دوستان نفهمیدن بگن توضیح بدم.
            .The best question deserves a better answer
            =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
            «پناه»می برم «به خدا»
            از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
            محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

            دیدگاه


              #7
              پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

              خوب منم در کدی که نوشتم d.4 رو کلآ صفر گرفتم
              میشه بیشتر توضیح بدید. متوجه منظورتون نمیشم

              نوشته اصلی توسط •.´™ مَسِِــــح`.•
              شما اول باید یک کد مخصوص سون سگمنت بنا به نیازتون بنویسید(منظورم اینه در اون PORTD.4 در نظر نگیرین)
              فرض کد اینه: seg[]={}

              مثال:

              کد:
              unsigned char a
              a=PIND & 0x10
              PORTD|=a;
              PORTD|=seg;
              اینو تست کنین
              اگه دوستان نفهمیدن بگن توضیح بدم.

              دیدگاه


                #8
                پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

                در کدی که دادم یک اشتباه بود تصحیح کردم پوزش.

                ببینید یک متغیر تعریف کردم
                مقدار PIND رو با 0x10 اند کردم.چرا؟ چون میخوام مقدار ورودیو بدونم و بهش دس نزنم و انو دوباره روی پورت ریختم.
                بعد که این کارو کردیم پورت رو با کد سون سگمنتمون or میکنیم.

                توجه: اگه قصد دارین عملی ببندین این پروژرو سگمنتارو بندازین رو پورت B چون بخاطر نوسانات تغیرات کد ها بر روی پورت D روی فرکانس گیریتون تاثیر میزاره.
                .The best question deserves a better answer
                =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                «پناه»می برم «به خدا»
                از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                دیدگاه


                  #9
                  پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

                  آقا درگیرِ جزئیات نشید.
                  اون پین ورودی فقط Pull-up داخلیش فعال و غیرفعال میشه. اگه از بیرون سیگنال تر و تمیزی بهش میرسه و نیاز به Pull-up نداره، بدون نگرانی برنامه تون رو بنویسید کار می کنه. اگرم همیشه Pull-up رو نیاز دارید، همه بیت های چهارم از آرایه 7seg رو 1 کنید (بیتِ مربوط به B4 همیشه 1 باشه که Pull-up دست نخوره).
                  بیایید با Google آشتی کنیم!

                  دیدگاه


                    #10
                    پاسخ : جگونه بدون تداخل پینهای ورودی و خروجی کل پورت رو مقدار بدم ؟

                    نوشته اصلی توسط •.´™ مَسِِــــح`.•
                    در کدی که دادم یک اشتباه بود تصحیح کردم پوزش.

                    ببینید یک متغیر تعریف کردم
                    مقدار PIND رو با 0x10 اند کردم.چرا؟ چون میخوام مقدار ورودیو بدونم و بهش دس نزنم و انو دوباره روی پورت ریختم.
                    بعد که این کارو کردیم پورت رو با کد سون سگمنتمون or میکنیم.

                    توجه: اگه قصد دارین عملی ببندین این پروژرو سگمنتارو بندازین رو پورت B چون بخاطر نوسانات تغیرات کد ها بر روی پورت D روی فرکانس گیریتون تاثیر میزاره.
                    دوست عزیز, شما رو نمی دونم, ولی من خیلی بزرگتر از چشمک زناشم کار کردم, اینی که شما می گین اساسا غلطه!
                    یعنی چی که PIND.4 رو می خونیم بعد با PORTD اونو or می کنیم؟ :eek: oo:
                    مگه پورتی که به صورت ورودی تعریف شده رو می شه خروحیشو تعیین کرد؟ اگه پین به صورت ورودی تعریف شده باشه رجیستر PORT فقط می تونه pull-up داخلی رو فعال یا غیر فعال بکنه!!! :agree:
                    بازم تاکید می کنم که رجیستر PORT توی حالت ورودی یچ تاثیری توی سطح منطقی خروجی نداره که شما بخوای مقدارشو بخونیو به دوباره همونو توش بنویسی تا تغییر نکنه.
                    این بحث دیگه جز پایه ای ترین بحث های میکرو و از بدیهیاته!
                    موفق باشین :job:
                    اي پادشه خوبان داد از غم تنهايي

                    دل بي تو به جان آمد وقت است که باز آيي

                    دیدگاه

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