اطلاعیه

Collapse
No announcement yet.

نوشتن تابع keypad scan و کی پد دست ساز

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

    نوشتن تابع keypad scan و کی پد دست ساز

    سلام به دوستان
    عزیزان من در یکی از پروژه ها از 6 پین پورت D میکرو mega32 به عنوان ورودی و خروجی کی پد استفاده کردم و از دو پین 1و2 این پورت به عنوان ارتباط سریال استفاده می کنم
    برای اسکن کردن کی پد با وجود ارتباط سریال و کانفیک این ارتباط نتونستم از تابع مشهور getkbd در بسکام استفاده کنم با توجه به توضیحات آقایان سپاسیار و کی نژاد یک تابع نوشتم به این صورت که ابتدا سطرها را تک تک صفر میکرد و سپس ستوه ها رو میخوند و متناسب با کلید فشرده شده عملی رو انجام بدهد اما این تابع فقط یک بار اجرا می شود و کار رو ادامه نمی دهد بعد از اون یه تابع بی نهایت ساده با if نوشتم که همون کار بالا رو به سادگی انجام میداد که باز جواب نگرفتم
    کی پدی که ساخته ام 3*3 است
    دوستان گرامی اگر نکته ای هست که باید رعایت بشه لطف کنید یاری بفرمایید.

    از اساتید مخصوصا آقایان کی نژاد و آراسته تقاضا دارم یاری کنند.

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

    #2
    پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

    مشکلت با حلقه بینهایت ه که دایما باید قرائت بشه یا اینکه از همون حلقه هم جواب نگرفتی ؟


    1- اگه از حلقه بینهایت دارید استفاده می کنید باید تاخیر 20 میلی ثانیه استفاده کنید وگرنه در خوندن سطر و ستون ها میکرو به مشکل می خوره
    2- اگه از اون استفاده نکردید باد از ستون ها هر کدوم یک دیود استفاده کنید که خروجیش به وقفه خارجی وصل بشه که هر کدوم از ستون ها فشرده شده خروجی دیود علاوه بر کارایی اولیه وقفه هم فعال کنه


    موفق باشید




    اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

    دیدگاه


      #3
      پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

      جناب آقای مهندس سعید باقرانی
      تشکر از کمک و راهنماییتون
      راه حل اولیه رو اجرا کردم با تاخیر 80 میلی ثانیه ابتدا در حلقه بینهایت این برنامه رو نوشتم و بعد به صورت یک subrotin نوشتم و فراخوانی کردم یکی از مشکلات دیگه این بود که با زدن یک کلید در همون شماره میموند حتی در انتهای روتین برگشت میدادم و عدد بازگشتی رو صفر می کردم تا عدد جدید رو بخونه ولی نشد
      در مورد راه حل دوم چون pcb رو ساختم و جایی هم برای ایم کار ندارم اگه امکانش هست کمک بفرمایید به صورت نرم افزاری حل بشه
      سپاس بیکران
      وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

      دیدگاه


        #4
        پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

        سلام
        یه تابع قبلا برای این قبیل کارها نوشته بودم.
        البته این تابع برای اتصال کیپد به دو پورت مختلف نوشته شده
        اما تبدیل اون به 3*3 فقط با تغییر یکی دو تا عدد امکان پذیره
        اگه نا مفهوم بود بگو تا بیشتر توضیح بدم.
        http://www.eca.ir/forum2/index.php?topic=73652.0
        تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

        دیدگاه


          #5
          پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

          با سلام

          دوست عزیز نحوهتظار عملکرد ارتباط سریال و کی پد به چه شکلیه یعنی انتظارتون از برد چی هست؟
          بفرمایین دقیق چی می خواین تا اگه بتونم کمکتون بکنم.
          موفق باشید
          چرا ناراحتی پاتریک!
          + امروز ی بچه دیدم سرچهارراه گل میفروخت
          - از دیدنش ناراحت شدی؟
          + نه
          پس چی ناراحتت کرده
          + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
          ------------------------------------------------------------------------------------------------------
          تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
          ------------------------------------------------------------------------------------------------------
          محصولات

          دیدگاه


            #6
            پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

            نوشته اصلی توسط mehdi_nxp
            سلام
            یه تابع قبلا برای این قبیل کارها نوشته بودم.
            البته این تابع برای اتصال کیپد به دو پورت مختلف نوشته شده
            اما تبدیل اون به 3*3 فقط با تغییر یکی دو تا عدد امکان پذیره
            اگه نا مفهوم بود بگو تا بیشتر توضیح بدم.
            http://www.eca.ir/forum2/index.php?topic=73652.0
            بسیار ممنون از لطفتون اقای مهندس مهدی
            اگر لطف کنید یکم در مورد کد توضیح بدید ممنون خواهم شد.
            وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

            دیدگاه


              #7
              پاسخ : پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

              نوشته اصلی توسط سوران آراسته
              با سلام

              دوست عزیز نحوهتظار عملکرد ارتباط سریال و کی پد به چه شکلیه یعنی انتظارتون از برد چی هست؟
              بفرمایین دقیق چی می خواین تا اگه بتونم کمکتون بکنم.
              موفق باشید
              درود جناب مهندس آراسته
              این کیپدی که روی برد ساختم دات ماتریسه و به این شکل کد نوشتم براش که : سه ستونش رو output کردم و سه سطرش رو input کانفیگ کردم
              و به ترتیب تک تک ستون ها رو صفر می کنم و سطر ها رو میخونم و در صورتی که مثلا شماره 5 فشار داده شده باشد به یه روتین دیگه میره و عملیاتی رو انجام می ده و در آخر هم دوباره عدد صفر رو در داخل متغیر قرار میده برای فشرده شدن عدد بعدی
              اما اکثر مواقع با وجود اینکه چک می کنم و میبینم که اون سطر صفر شده ولی برنامه به روتین مربوطه نمیره
              اون تاخیر 80 میلی ثانیه برای تطبیق سطر با ستون مربوطه رو هم اعمال کردم
              اگه به نظرتون فوت کوزه گری ای هست که من بی خبرم، بزرگواری کنید راهنمایی بفرمایید
              سپاس بیکران
              وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

              دیدگاه


                #8
                پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                تو قسمت Getkey یه حلقه for هست که به تعداد ستون های کیپد باید تکرار بشه
                و با توجه به شمارنده حلقه یکی از سطر ها رو 1 میکنه
                سپس با خوندن از سطر ها ، با تقسیمات متوالی شماره سطری که یکی از کلید های آن فشرده شده رو پیدا میکنه و در صورت فشرده شدن کلیدی از حلقه for خارج میشه ، در غیر این صورت میره سراغ ستون بعدی.
                و نهایتا با توجه به شماره سطر و ستون با یه تقسیم ساده عدد مربوطه رو از جدول انتخاب میکنه.
                تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                دیدگاه


                  #9
                  پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                  نوشته اصلی توسط mehdi_nxp
                  تو قسمت Getkey یه حلقه for هست که به تعداد ستون های کیپد باید تکرار بشه
                  و با توجه به شمارنده حلقه یکی از سطر ها رو 1 میکنه
                  سپس با خوندن از سطر ها ، با تقسیمات متوالی شماره سطری که یکی از کلید های آن فشرده شده رو پیدا میکنه و در صورت فشرده شدن کلیدی از حلقه for خارج میشه ، در غیر این صورت میره سراغ ستون بعدی.
                  و نهایتا با توجه به شماره سطر و ستون با یه تقسیم ساده عدد مربوطه رو از جدول انتخاب میکنه.
                  ممنون آقای مهندس
                  امتحان می کنم ببینم می تونم تابعی که زحمتشو کشیدید تغییر بدم مناسب برنامه من بشه یا نه
                  فقط من تماما از 6 پین پورت C استفاده کردم فکر می کنید به تغییرات زیادی نیاز هست؟
                  وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

                  دیدگاه


                    #10
                    پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                    خواهش میکنم
                    تغیرات که چه عرض کنم کلا کنفیکون میشه :biggrin:
                    شوخی کردم
                    تغیرات زیادی نیاز نیست
                    میشه یه همچین چیزی
                    تو این برنامه 3 تا ستون به پینهای 0-2 و 3 تا سطر به پینهای 3-5 پورت سی متصل هستن
                    کد:
                    Getkey:
                    X = 0
                    For Y = 0 To 2
                    Portc = 2 ^ Y
                    A = Pinc
                    Shift A , Right , 3
                    A = A And 7
                    While A > 0
                    A = A / 2
                    Incr X
                    Wend
                    If X <> 0 Then Exit For
                    Next
                    
                    While A > 0
                    A = Pinc
                    Shift A , Right , 3
                    A = A And 7
                    Wend
                    
                    If X = 0 Then Key = 16
                    A = X - 1
                    A = A * 4
                    A = A + Y
                    If X <> 0 Then Key = Lookup(a , Da)
                    Return
                    تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                    دیدگاه


                      #11
                      پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                      این سورس رو هم از من داشته باشید .
                      تغییرات آنچنانی نمی خواد و کاملا مشخصه.
                      امیدوارم مفید باشه.
                      فایل های پیوست شده
                      چرا ناراحتی پاتریک!
                      + امروز ی بچه دیدم سرچهارراه گل میفروخت
                      - از دیدنش ناراحت شدی؟
                      + نه
                      پس چی ناراحتت کرده
                      + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                      ------------------------------------------------------------------------------------------------------
                      تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                      ------------------------------------------------------------------------------------------------------
                      محصولات

                      دیدگاه


                        #12
                        پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                        نوشته اصلی توسط mehdi_nxp
                        خواهش میکنم
                        تغیرات که چه عرض کنم کلا کنفیکون میشه :biggrin:
                        شوخی کردم
                        تغیرات زیادی نیاز نیست
                        میشه یه همچین چیزی
                        تو این برنامه 3 تا ستون به پینهای 0-2 و 3 تا سطر به پینهای 3-5 پورت سی متصل هستن
                        کد:
                        Getkey:
                        X = 0
                        For Y = 0 To 2
                        Portc = 2 ^ Y
                        A = Pinc
                        Shift A , Right , 3
                        A = A And 7
                        While A > 0
                        A = A / 2
                        Incr X
                        Wend
                        If X <> 0 Then Exit For
                        Next
                        
                        While A > 0
                        A = Pinc
                        Shift A , Right , 3
                        A = A And 7
                        Wend
                        
                        If X = 0 Then Key = 16
                        A = X - 1
                        A = A * 4
                        A = A + Y
                        If X <> 0 Then Key = Lookup(a , Da)
                        Return
                        سلام دوباره
                        ممنون از اینکه زحمت کشیدید و کمک می کنید
                        یه نکته ای به نظرم اومد و اونهم اینکه من توی مدار اون مقاوم های 10کیلویی که سطر ها رو pull down میکنه رو نذاشتم به نظرتون عدم جواب دهی کد برنامه از این میتونه باشه؟
                        وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

                        دیدگاه


                          #13
                          پاسخ : پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                          نوشته اصلی توسط سوران آراسته
                          این سورس رو هم از من داشته باشید .
                          تغییرات آنچنانی نمی خواد و کاملا مشخصه.
                          امیدوارم مفید باشه.
                          جناب مهندس آراسته
                          سپاس بیکران که جواب دادین
                          کدی که خودمم نوشته بودم شبیه همین بود با این تفاوت که من توی Port D از دوپایه RX,TX که پین های D.0,D.1 هست به عنوان ارتباط سریال استفاده کردم و نمی تونم همه پورت رو یک یا صفر کنم و باید تک تک پین ها رو یک کنم و کد رو بخونم که از این طریق جوابی نگرفتم
                          سوال دیگه ای که داشتم این بود که آیا پین هایی رو که به عنوان ورودی تعریف کردیم هم یک کنیم یا خیر؟
                          وقتی مطالبی رو لایک میکنید یا بازخورد میدید یعنی به نویسنده میگید که از این مطلب استفاده کرده اید و همچنان ادامه بده، یا بیشتر مطلب بزار، یا بیشتر در مباحث اینجوری شرکت کن.

                          دیدگاه


                            #14
                            پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                            نوشته اصلی توسط A.Vahedi

                            سوال دیگه ای که داشتم این بود که آیا پین هایی رو که به عنوان ورودی تعریف کردیم هم یک کنیم یا خیر؟
                            ورودی ها باید pullup بشن و سپس با صفر کردن و خوندن اونها کلید فشار داده شده تشخیص داده میشه.
                            راستی گفتی از کیپد و سریال به طور مشترک از همون پین ها استفاده می کردی یا نه کیپد به یه پورت و سریال هم همون پین های سخت افزاری بود ولی برنامه با کار کردن همزمانشون مشکل داشت ؟
                            در صورتی که پین های ارتباط سریال و کیپد یکی باشه باید با پس از مقدار دهی دستی رجیسترهای سریال منتظر اتمام عملیات سریال باشید و سپس از پین ها به عنوان io استفاده کنید.
                            مهندس رضایی هم یه تاپیک در این باره دارن که می تونه کمکتون کنه.
                            موفق باشید
                            چرا ناراحتی پاتریک!
                            + امروز ی بچه دیدم سرچهارراه گل میفروخت
                            - از دیدنش ناراحت شدی؟
                            + نه
                            پس چی ناراحتت کرده
                            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                            ------------------------------------------------------------------------------------------------------
                            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                            ------------------------------------------------------------------------------------------------------
                            محصولات

                            دیدگاه


                              #15
                              پاسخ : پاسخ : نوشتن تابع keypad scan و کی پد دست ساز

                              نوشته اصلی توسط سوران آراسته

                              راستی گفتی از کیپد و سریال به طور مشترک از همون پین ها استفاده می کردی یا نه کیپد به یه پورت و سریال هم همون پین های سخت افزاری بود ولی برنامه با کار کردن همزمانشون مشکل داشت ؟
                              در صورتی که پین های ارتباط سریال و کیپد یکی باشه باید با پس از مقدار دهی دستی رجیسترهای سریال منتظر اتمام عملیات سریال باشید و سپس از پین ها به عنوان io استفاده کنید.
                              مهندس رضایی هم یه تاپیک در این باره دارن که می تونه کمکتون کنه.
                              موفق باشید
                              جناب مهندس آراسته
                              با تغییراتی در تابعی که لطف کرده بودید و فرستادید کی پد راه افتاد من به صورت دستی تک تک پین ها رو pull up کردم که تداخلی با ارتباط سریال نداشته باشه، مشکل تا حدودی حل شد اما خیلی کند کار می کنه
                              اون پین های rx, tx به صورت مستقل دارن کار می کنند و هیچ load دیگه ای روشون نیست اما با توضیح مختصری که بالا دادین فکر کردم چقد خوب بود که یه کیپد 3*4 میذاشتنم و از این تکنیک استفاده می کردم

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

                              دیدگاه

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