اطلاعیه

Collapse
No announcement yet.

مدار تجربی صفحه کلید غیر ماتریسی

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

    مدار تجربی صفحه کلید غیر ماتریسی

    ایده اینه که جهت ساخت صفحه کلید بجای اینکه چند پین رو ورودی و چند پین دیگه رو خروجی تعریف کنیم، همه پین ها رو ورودی تعریف کنیم، و از هر کلید سیم ها رو دقیقا به پین هایی وصل کنیم که معادل عدد باینری اون کاراکتر هستند. به عنوان مثال کد اسکی کاراکتر A در مبنای 2 هست: 01000001 بنابراین از کلید A دو سیم یکی به پین 0 و دیگری به پین 6 وصل میکنیم، همچنین یک سیم هم به INT0 وصل میکنیم تا هر وقت کلیدی فشرده شد یک وقفه ایجاد بشه. بدین ترتیب:
    • [li]وقت پردازنده برای اسکن مداوم پورت تلف نمیشه و همچنین مجبور نیست مقدار پورت رو با آرایه کلید ها مقایسه کنه[/li]
      [li]کد اسکن پورت از حلقه بی پایان برنامه حذف میشه بنابراین برنامه خوانا تر میشه[/li]
      [li]نیاز نیست اتصالات پورت رو ترجمه کنیم تا بفهمیم کدام کلید (ها) فشرده شده[/li]
      [li]برنامه ما کوتاهتر خواهد بود و حافظه کمتری نیاز خواهد داشت[/li]
      [li]میتونیم 256 کلید رو با یک پورت ساپورت کنیم[/li]


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

    دانلود برنامه کدویژن و شماتیک پروتوس: http://hipfile.com/qhl1x4a4o18q/myKB.zip.html

    کد:

    کد:
    #include <mega32.h>
    #include <delay.h>
    #include <stdio.h>
    #include <alcd.h>   
     
    char buffer[32];
    
    interrupt [EXT_INT0] void ext_int0_isr(void){ 
      sprintf(buffer,"Chr=%c",PINA);
      lcd_clear();
      lcd_puts(buffer);
    } 
     
    void main(void){
      lcd_init(16);
        
      GICR|=(1<<INT0); 
      MCUCR|=(1<<ISC01)|(1<<ISC00); 
      GIFR=(1<<INTF0); 
      #asm("sei") 
    
      DDRA=0;
        
      while(1);
    }

    شماتیک:

    #2
    پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

    سلام
    ایده جالبیه ولی یکم سیم کشیش دردسر داره
    در اولین فرصت یک کیپد برای خودم با این مشخصات میسازم ببینم تو عمل چطوره؟؟
    ولی به نظر نمیاد مشکلی داشته باشه
    راستی اون دیودها رو برای چی گذاشتید :eek:

    دیدگاه


      #3
      پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

      شدنی هست اما اگه 10 .20 تا کلید داشته باشی .شهید میشه مدار اونوقت می بینی برا اینکه وقت میکرو رو نگیری
      مجبوری یه pcb چند لایه بزنی با کلی دیور و ...
      اونوقت به این فکر میوفتی که اگه یه میکروی جدا .حتی برا کیپد میزاشتم . بهتر از این کاری بود که کردم.
      و کلی داستان مشابه....
      اما ایده خوبی هست . شاید تو بعضی جاها
      هميشه به ياد خدا باش !

      دیدگاه


        #4
        پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

        با سلام،

        با عرض معذرت، به نظر من این نوع صفحه کلید اصلا چیز مناسب و بهینه ای نیست...

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

        من اون قدیما ( زمان دایناسورها :mrgreen: ) یه کیپدی توی همین مایه ها درست کردم که شماتیکش رو براتون میزارم، تست شده است، خوب هم جواب میده ولی فقط یکبار درستش کردم، چونکه به نظرم از نظر سخت افزاری، اصلا بکار نمیاد (خواستید، کد برنامه اش رو هم براتون بزارم ) :



        به نظر من، بهترین و بهینه ترین کیپد، از نظر سخت افزار و نرم افزار، کیپد آنالوگه .....


        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

        Sh_Nourbakhsh@Yahoo.com

        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

        دیدگاه


          #5
          پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

          با اینتراپت هم سخت افزار اینطوری میشه :


          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

          Sh_Nourbakhsh@Yahoo.com

          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

          دیدگاه


            #6
            پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

            این هم کیپد آنالوگ ( محبوب من :mrgreen: ) :


            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه


              #7
              پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

              سلام به همه و ممنون از پاسخ هاتون

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

              نوشته اصلی توسط M3R
              راستی اون دیودها رو برای چی گذاشتید :eek:
              اگه ما مثلا کلید اول رو (که A باشه) بزنیم قراره پین های 0 و 6 یک بشن ولی از اونجایی که پین 6 به کلید B هم وصله در صورتی که دیود ها نباشن جریان میرسه به بعد از کلید B و از اونجا برمیگرده میره پین 1 رو هم یک میکنه و به این ترتیب کد غلط روی پورت قرار میگیره.
              اگه توی پروتوس دیود ها رو بردارید بهتر متوجه عرض بنده میشید.

              نوشته اصلی توسط aivhl
              شما هر نوع صفحه کلیدی که داشته باشی، در نهایت یک جدول داری که کد و ID کلید ها رو مشخص میکنه
              نه لزوما ...

              نوشته اصلی توسط aivhl
              پیشنهاد شما، سخت افزار بالایی میخواد و پیاده سازیش مشکله، مضاف بر اینکه از نظر سخت افزاری صرفه جویی که نمیشه، هیچ، اصراف هم میشه!
              درسته

              نوشته اصلی توسط aivhl
              این هم کیپد آنالوگ ( محبوب من :mrgreen: ) :
              این مدار خیلی ساده و جالبیه ولی یک کلکسیون مقاومت میخواد و اگه مبدل آنالوگ رو برای کار دیگه ای لازم داشته باشیم دیگه نمیشه، برای بعضی مواقع خوبه
              ممنون از شماتیک

              دیدگاه


                #8
                پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                با سلام مجدد،

                جسارت نباشه دوستان، من واقعا میخوام اگر ایده نویی هست، یاد بگیرم و اصلا قصد لجبازی و یا مقابله ندام...

                میشه در این مورد بیشتر توضیح بدید که در چه صورت و یا چه شکلی لزومی به وجود جدول ID برای کلید ها نیست، مثلا در پیشنهاد شما چه شکلی این موضوع محقق میشه؟

                و اینکه در میکرو 8 ورودی آنالوگ وجود داره ( و در بد ترین حالت 4 تا ورودی آنالوگ ) که تقریبا در اکثر مواقع یا اصلا استفاده نمیشن و یا حداکثر یک تا چهار تاشون استفاده میشن و بقیه بلا استفاده میمونن، پس برای ورودی آنالوگ که معمولا مشکلی نیست، برای هر کلید هم که یک مقاومت میخوایم که مثلا در یک کیپد 16 تایی، در کل بشه 16 تا مقاومت و یک ورودی. در حالی که در پیشنهاد شما برای یه همچین کلیدی، فقط 4 تا پول داون هست و اگر اشتباه نکنم، تعداد 25 تا دیود که اگر اینتراپت هم بخوای میشه 41 دیود! به فرض که جهت دیود ها رو معکوس کنیم و از پول پ داخلی میکرو استفاده کنیم که 4 تا پول داون حذف بشه ولی باز هم تعداد دیودها زیاده و این درحالیه که 4 تا ورودی میکرو هم اشغال میشه .....

                ولی به نظر من، تنها ایراد کیپد آنالوگ ( اگر ایراد باشه! ) موضوع اینتراپت هست که اگر بجز این کیپد از ADC استفاده نشه، یه جورایی اونم حله ....

                دیگه قضاوت با شما و دوستان
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                  لطفا به این عکس یه نگاهی بندازید :



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

                  Sh_Nourbakhsh@Yahoo.com

                  http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                  دیدگاه


                    #10
                    پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                    در کدی که من ارائه کردم خدمتتون آرایه یا جدول کد وجود نداره، کاراکتر مستقیما از پورت خوانده میشه و روی LCD نمایش داده میشه

                    ضمنا بنده ادعایی ندارم که کیبرد من بهتر از مدل آنالوگ شماست، اگه گفتار من باعث سوء تعبیر شده عذرخواهی میکنم.

                    درصورت امکان شما هم برنامه کیپدتون رو قرار بدید تا بنده و احتمالا دیگران بهره مند بشیم.

                    دیدگاه


                      #11
                      پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                      راستی اون دیودها رو برای چی گذاشتید :eek:
                      اگه ما مثلا کلید اول رو (که A باشه) بزنیم قراره پین های 0 و 6 یک بشن ولی از اونجایی که پین 6 به کلید B هم وصله در صورتی که دیود ها نباشن جریان میرسه به بعد از کلید B و از اونجا برمیگرده میره پین 1 رو هم یک میکنه و به این ترتیب کد غلط روی پورت قرار میگیره.
                      اگه توی پروتوس دیود ها رو بردارید بهتر متوجه عرض بنده میشید.
                      آهااا
                      حالا متوجه شدم
                      اول به این موضوع دقت نکرده بودم
                      با این حال فک کنم فقط برای یه تست کوچیک مناسب باشه و صرفه اقتصادی نداره!!
                      ولی در کل ایده جالبیه

                      دیدگاه


                        #12
                        پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                        با سلام،

                        این هم توابع و نمونه کد با کدویژن و پروتئوس :

                        http://s3.picofile.com/file/7421605913/AKey_test.rar.html

                        لطفا نظرتون رو بدید...............

                        ( چون میخواستم از GCC ببرمش توی CV و با پروتئوس ارائه کنم کمی دیر شد! )
                        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                        Sh_Nourbakhsh@Yahoo.com

                        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                        دیدگاه


                          #13
                          پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                          جالبه، :job: متشکرم

                          دیدگاه


                            #14
                            پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                            با تشکر مجدد برای کد و شماتیکتون، من چند تا سوال به ذهنم میرسه

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

                            دوم، در فایل akey.h یک ماکرو برای تولرانس تعریف شده، ولی هیچوقت به کار نرفته، جریان چیه؟
                            کد:
                            #define vTLkey 3 //Keys value tolerance!

                            و اینکه چرا باید یک عدد که خودمون تشکیل دادیم با 0xff اند بشه؟
                            کد:
                            	#if ADC_8BIT_TYPE
                            		#define ADC_VREF_TYPE  0x60
                            	#else
                            		#define ADC_VREF_TYPE  0x00
                            	#endif
                            
                            	ADMUX = ADC_VREF_TYPE & 0xFF;

                            راستی با این روش در عمل حداکثر چند تا کلید رو میشه ساپورت کرد؟

                            بازم متشکرم

                            دیدگاه


                              #15
                              پاسخ : مدار تجربی صفحه کلید غیر ماتریسی

                              دوست عزیز
                              اگر این ایده رو خودتون دادین بهتون تبریک میگم. البته ایده جدیدی نیست. شما در واقع یک انکودر دهدهی به باینری ساختین. به لینک زیر توجه کنید. این مدار یک انکودر دسیمال به باینری با 2 به توان n بیت ورودی و n بیت خروجیه. در واقع توی مدار پیشنهادی شما دیود ها دارن منطق OR رو شبیه سازی میکنن.
                              http://www.electronics-tutorials.ws/combination/comb_4.html
                              این ایده در قدیم که هنوز میکروپروسسور ها به این شکل امروز در دسترس نبودن استفاده می شد. من 16 سال پیش از همین روش استفاده کردم برای یه پروژه ای. توی ریموت کنترل هایی که تعداد کلید های زیادی دارن هم اگر دقت کنید از همین روش استفاده شده. مثلا 16 کلید وجود داره ولی آی سی مربوطه فقط 4 بیت ورودی داره.

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

                              روشهای دیگه ای که دوستان مطرح کردن هم هر کدوم در جای خودش مناسبه و مورد استفاده قرار میگیره.
                              باز هم بهتون تبریک میگم. همینکه آدم در مورد یک مسئله فکر کنه و خودش یک راه حل پیدا کنه خیلی ارزش داره. نه مثل بعضی دوستان در این سایت که فقط لقمه آماده از بقیه میخوان!
                              (منظورم صفحه های غیر از این صفحه است)

                              دیدگاه

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