اطلاعیه

Collapse
No announcement yet.

چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

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

    چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

    دوستان من تو پروژم به یه مشکل برخوردم که باید دو بایت اطلاعات یا همون 16 بیت رو روی پورت های میکرو بریزم ولی چون از ATMEGA8 استفاده می کنم و باید از پایه های INT0 و TOSC1 و TOSC2 استفاده کنم مجبورم این دوبایت رو به صورت بیت به بیت و پراکنده بین پایه های دیگه میکرو پخش کنم حالا این کار رو چه جوری انجام بدم که همه دیتا هام به صورت یکجا به این پایه ها ریخته بشه ؟
    معمولا اگه دیتا 8 بیتی باشه از این دستور استفاده می کنن
    کد:
    PORT X = VAR
    ولی من دیگه نمی تونم از اسن دستور استفاده کنم به نظر شما راهی هست که این پایه ها رو ( منظورم همون پایه هایی هست که دیتا رو باید رو اونا بریزم ) در غالب یه متغییر یا یه پورت یا چیزی تعریف کرد ؟
    خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
    [hr]

    #2
    پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

    سلام
    من نمیدونم این همزمانی چقدر برای شما اهمیت داره ولی پیشنهاد من
    کد:
    void int_to_pins (int data)
    {
    PORTC.3 = ((data>>5) & 0x01);
    .
    .
    .
    }
    یعنی مثلا بیت پنجم رو به اندازه 5 تا شیفت به راست و به خروجی PC3 بدین که برای دو بایت باید 16 بار ازین دستور رو بنویسین
    گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

    دیدگاه


      #3
      پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

      ممنون از کمکت ولی من می خوام این کار همزمان انجام بگیره مثلا تمام پایه هایی که قراره رو اونا دیتا ریخته بشه در یک زمان این دیتاها رو بگیرن مثلا از یه TABLE یه کدی برداشته شه و روی این پورت ها بریزه :smile:
      کسی از دوستان ایده ای نداره ؟
      خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
      [hr]

      دیدگاه


        #4
        پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

        اگه هدف شما از همزمانی دادن اطلاعات به سخت افزاری هست که باید دو بایت را در یک زمان دریافت کند می تونید خروجی پایه هارو به دو latch بدید بعد خروجی لچ رو فعال کنید یا شیفت رجیستر و SPI نرم افزاری (یا درصورت امکان سخت افزاری)یا کلا میکرو رو عوض کنید که حتی در این صورت هم نمی تونید دقیقا همزمان دو بایت رو به دو پورت بدید و باز هم اختلاف خیلی کمی خواهد بود و یا میکروهای 16 یا 32 بیتی ویا روشهای دیگه ای که دوستان با تجربه تر پیشنهاد میکنن.
        گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

        دیدگاه


          #5
          پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

          با این مشکلت حل میشه:
          74hc595
          من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
          آلبرت اینشتین
          منبع: http://fa.wikiquote.org

          دیدگاه


            #6
            پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

            اشکالی نداره اگه در حد یک یا دو دستور بینش فاصله باشه ، من فقط می خوام این دیتا ها رو به صورت تقریبا هم زمان روی پورت هاداشته باشم اما هر چه فاصله زمانی کمتر بهتر
            من نمی تونم سخت افزار مدار رو تغییر بدم اگه راه حل نرم افزاری پیشنهاد بدین ممنون میشم
            یه سوال دیگه اگه بخوام یه متغییر از نوع بایت یا ورد رو بیت به بیت جدا کنم و توی یه متغییر از نوع بیت بریزم چی کار باید بکنم ؟ :sad:
            خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
            [hr]

            دیدگاه


              #7
              پاسخ : چگونگی ریختن دو بایت اطلاعات بر روی تعدادی پین میکرو ؟

              نوشته اصلی توسط 4850
              اشکالی نداره اگه در حد یک یا دو دستور بینش فاصله باشه ، من فقط می خوام این دیتا ها رو به صورت تقریبا هم زمان روی پورت هاداشته باشم اما هر چه فاصله زمانی کمتر بهتر
              من نمی تونم سخت افزار مدار رو تغییر بدم اگه راه حل نرم افزاری پیشنهاد بدین ممنون میشم
              یه سوال دیگه اگه بخوام یه متغییر از نوع بایت یا ورد رو بیت به بیت جدا کنم و توی یه متغییر از نوع بیت بریزم چی کار باید بکنم ؟ :sad:
              شما هشت تا متغیر بیتی متناظر با پایه های پورتها تعریف کن و مثلا اینطوری
              dim a as bit
              dim b as byte
              a=b.1
              portc.7=a
              همین طوری دونه دونه با هم مساوی قرار بده. اینطوری به ازای هر پایه یک متغیر بیتی داری و برنامه قاطی نمیشه
              من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
              آلبرت اینشتین
              منبع: http://fa.wikiquote.org

              دیدگاه

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