اطلاعیه

Collapse
No announcement yet.

مشکل با اسکن کیبرد

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

    مشکل با اسکن کیبرد

    سلام دوستان. پروژه ای که تو لینک زیر قرار دادم اسکن کیبرد با 8051 و نمایش اون رو 4 تا سون سگمنت آند مشترک هست. روش کار هم به این شکله که عدد اول رو که خوند باید روی سگمنت اول نشونش بده. بعد عدد دوم که وارد شد ، عدد اول رو به سگمنت دوم منتقل کنه و عدد دوم رو روی سگمنت اول نشون بده و همین طور تا آخر. ولی نمیدونم مشکلش کجاست که جواب نمیده. اگه براتون زحمتی نیست یه نگاه بهش بندازید شاید بتونید کمکم کنید.
    خیلی ممنون.

    http://www.4shared.com/file/14271112...e2/KEYPAD.html
    خدايا
    من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
    من چون تويي دارم و تو چون خودي نداري
    امام سجاد (ع)

    #2
    پاسخ : مشکل با اسکن کیبرد

    سلام دوست عزیز
    بنده یه نگاهی به کد شما انداختم منتها یه جاهایی شو متوجه نشدم.
    فقط یکی دوتا ایراد تابلو توش دیدم که عرض میکنم خدمتت.
    تو خط 38 اینجوری نوشتی که غلطه.(R2 چه 0FH باشه چه نباشه به اون برچسب میری!)

    ...
    CJNE R2,#0FH,KEY_PRESSED
    KEY_PRESSED:
    ...

    دیگه اینکه تو خط 62 نوشته بودی INC 31 که فکر کنم منظورت INC 31H باشه.(اگه اون H رو نذاری آدرس سی و یکم رم رو افزایش میده(1FH).)

    من متوجه شدم اون 4 تا رقم رو در 33H - 36H ذخیره میکنی و نمایش میدی اما بهتر بود یکم توضیح بدی چیکار میخوای بکنی. مثلاً بگی با تایمر این کارو میکنم. باوقفه فلان کارو و این رجیستر ها برای نگهداری فلان مقدار هستش و ...

    حالا شما اینا رو تصحیح کن تا بعد...

    دیدگاه


      #3
      پاسخ : مشکل با اسکن کیبرد

      سلام دوست من. خیلی ممنون که جواب دادید. بله حق با شما بود و مناو اشتباهات روتصحیح کردم. ولی بازم کار نکرد.
      مدار من قراره به ترتیب زیر کار کنه :
      1- نباید از هیچ تاخیری استفاده کنم و حتماً باید بهجای اون از وقفه ی تایمر استفاده کنم.
      2- حتماً باید پایه هایی که کیبرد رو اسکن میکن همونایی باشه که سون سگمنت ها رو اسکن میکنه (پورت 3)
      3- وقتی یه کلید فشرده شد اون رو روی سگمنت اول (سمت چپ ترین سگمنت) نشون بده. وقتی که کلید دوم فشرده شد عدد قبلی رو به سگمنت دوم منتقل کنه و عدد جدید رو روی سگمنت اول نشون بده و همین طور تا آخر. من برای این کار از آدرس های 33H , 34H , 35H , 36H استفاده کردم. به این ترتیب که همیشه اطلاعات داخل 33H میره روی سگمنت اول , 34H روی سگمنت دوم و الی آخر. به این منظور هر کلید که فشرده شد اون رو میریزم روی 33H و 33H میره روی 34H و تا آخر ادامه پیدا میکنه.
      4 - تو قسمت اول (AGAIN ) وقتی تشخیص داده شد که یه کلید فشرده شده R0 رو که برای اسکن کیبرد و سون سگمنت ها استفاده میشه و در هر بار وقفه تایمر یه بار شیفت داده میشه ، میریزم رو خونه ی 30H تا اگه در حین تست شرط دوم ( که همون 20ms تاخیر و دوباره اسکن کیبرد هست برای گرفتن بانس) وقفه اتفاق افتاد و R0 تغییر کرد مقدارشو از دست نداده باشم.
      5- وقتی تو قسمت اول (AGAIN) تشخیص داده شد که یک کلید فشرده شده میره به قسمت KEY و اونجا 20ms تاخیر ایجاد میکنه (توسط R3)و پس از اون دوباره چک میکنه ببینه کلید هنوز فشرده هست یا نه . اگه فشرده بود میره تو قسمت KEY
      _PRESSED و ردیف کلیدی که فشارداده شده رو پیدا میکنه و پس از پیدا کردن ردیف خو کلید رو شناسایی میکنه و پس از شناسایی کلید عدد اون رو میریزه روی 33H و اون رو نشون میده.
      6- هر موقه به A نیاز دارم ، مقدار اونو میریزم رو R1 و پس از استفاده دو باره برش میگردونم.


      امیدوارم جوابمو بدبد. چون هر چی فکر میکنم نمیفهمم ایراد از کجاست.
      :redface:
      خدايا
      من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
      من چون تويي دارم و تو چون خودي نداري
      امام سجاد (ع)

      دیدگاه


        #4
        پاسخ : مشکل با اسکن کیبرد

        بازم سلام
        من دفعه قبل به شماتیک توجه نکردم. الان دیدم یه مشکلایی داره.
        اول اینکه کلکتور اون ترانزیستورا همیشه روشنه! باید یه مقاومت 10k تا منفی داشته باشه.
        ولی بازهم پروتیوس موقع شبیه سازی به مشکل بر میخوره. به جای اونا گیت NOT گذاشتم درست شد.(پروتیوس تو شبیه سازی قطعات انالوگ یکم مشکل داره)
        یه مشکل دیگه هم بود و اینکه فرکانس میکرو توی Propertiesش روی 0.12 Mhz تنظیم بود که گذاشتم رو 12 Mhz .
        اون خازن و کریستال رو هم حذف کردم.(راستی شما چرا گذاشته بودین روی 0.12 ؟!)

        توی برنامه هم بعلاوه اصلاح اون چیزایی که تو پست قبل عرض کردم خدمتت یه تغییرات کوچولو باید بدی.
        برای تایمر -4000 کمه باید بزاری رو -10000 . برای بانس هم 4 کمه باید بزاری رو 30 .

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

        دیدگاه


          #5
          پاسخ : مشکل با اسکن کیبرد

          سلام و بازم خیلی ممنون از پاسخ گوییتون.
          توی پروتئوس فرکانسو کم گذاشتم چون تو فرکانس بالا تو اسکن سگمنت ها دچار اشتباه میشه. برای همین فرکانس رو کم کردم تا شمرده شمرده کارشو انجام بده . :mrgreen:
          در مورد ترانزیستور ها هم درست می فرمایید . منم قبلاً دقت نکرده بودم. ولی مگه نه اینکه وقتی یه ترانزیستور PNP امیترش به تغذیه وصل بشه و به بیسش یک بدیم خاموش هست
          و کلکتورش صفر میشه و وقتی به بیسش صفر بدیم باید روشن بشه. پس منطقی نیست که همیشه روشن بمونن. و در مدار عملی هم که بستم ترانزیستور ها درست کار میکنن.
          در مورد عدد 4000 هم باید بگم که وقتی زیادش میکنم سون سگمنت ها چشمک میزنن. چون برای اینکه بشه همیشه اونا رو روشن دید باید تو کمتر از 20ms اسکن بشن و وقتی من اون عدد رو 10000 بذارم اون موقع 40ms میشه و به همین دلیل چشمک میزنن.
          ولی با همه ی این تفاسیر باز هم مدار من کار نمیکنه. دیگه دارم گیج میشم . نمیدونم ایراد از کجاست. فکر نکنم از سخت افزار باشه. هر چی هست تو برنامست که منم نمی تونم پیداش کنم. لطفاً کمکم کنید. برای شنبه لازمش دارم.
          :sad: :cry:
          خدايا
          من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
          من چون تويي دارم و تو چون خودي نداري
          امام سجاد (ع)

          دیدگاه


            #6
            پاسخ : مشکل با اسکن کیبرد

            چطور کار نمیکنه؟!!! :surprised: رو سیستم من که داره کار میکنه! منظورتون تو مدار عملیه؟ کلاً کار نمیکنه یا سگمنت ها چشمک میزنن؟

            نوشته اصلی توسط m.r.M.R
            در مورد ترانزیستور ها هم درست می فرمایید . منم قبلاً دقت نکرده بودم. ولی مگه نه اینکه وقتی یه ترانزیستور PNP امیترش به تغذیه وصل بشه و به بیسش یک بدیم خاموش هست
            و کلکتورش صفر میشه و وقتی به بیسش صفر بدیم باید روشن بشه. پس منطقی نیست که همیشه روشن بمونن. و در مدار عملی هم که بستم ترانزیستور ها درست کار میکنن.
            درسته. همونطور که گفتم پروتئوس یکم گیج میزنه.

            من با این برنامه تست کردم و جواب داد:


            ORG 00
            LJMP MAIN
            ORG 0BH
            LJMP T0_INT
            ;//************************************************** ***************
            ;// MAIN PROGRAM
            MAIN:
            MOV DPTR,#200H
            MOV TMOD,#01H
            MOV TH0,#HIGH(-10000)
            MOV TL0,#LOW(-10000)
            MOV P1,#0FH
            SETB EA
            SETB ET0
            SETB TR0
            MOV R0,#11111110B
            MOV 33H,#0FFH
            MOV 34H,#0FFH
            MOV 35H,#0FFH
            MOV 36H,#0FFH
            AGAIN:
            MOV P3,R0
            MOV R2,P1
            MOV R1,A
            MOV A,R2
            ANL A,#0FH
            MOV R2,A
            CJNE R2,#0FH,KEY
            SJMP AGAIN
            KEY:
            MOV 30H,R0
            MOV R3,#30
            CJNE R3,#0,$
            MOV R2,P1
            MOV A,R2
            ANL A,#0FH
            MOV R2,A
            CJNE R2,#0FH,KEY_PRESSED
            ljmp again
            KEY_PRESSED:
            MOV A,30H
            CJNE A,#11111110B,ROW_2
            MOV 31H,#0
            LJMP FOUND
            ROW_2:
            CJNE A,#11111101B,ROW_3
            MOV 31H,#4
            LJMP FOUND
            ROW_3:
            CJNE A,#11111011B,ROW_4
            MOV 31H,#8
            LJMP FOUND
            ROW_4:
            CJNE A,#11110111B,AGAIN
            MOV 31H,#0CH
            LJMP FOUND
            FOUND:
            MOV A,R2
            LOOP:
            RRC A
            JNC SHOW
            INC 31H
            SJMP LOOP
            SHOW:
            MOV A,31H
            MOVC A,@A+DPTR
            MOV 36H,35H
            MOV 35H,34H
            MOV 34H,33H
            MOV 33H,A
            LJMP AGAIN

            ;//************************************************** ***************
            ;//TIMER_0 INTERRUPT PROGRAM
            T0_INT:
            CJNE R3,#0,DEC_R3
            SEG:
            MOV R1,A
            MOV A,R0
            RL A
            MOV R0,A
            MOV A,R1
            CJNE R0,#11101111B,SEG_1
            MOV R0,#11111110B
            SEG_1:
            MOV TH0,#HIGH(-10000)
            MOV TL0,#LOW(-10000)
            MOV P3,R0
            CJNE R0,#11111110B,SEG_2
            MOV P2,33H
            SJMP LABLE
            SEG_2:
            CJNE R0,#11111101B,SEG_3
            MOV P2,34H
            SJMP LABLE
            SEG_3:
            CJNE R0,#11111011B,SEG_4
            MOV P2,35H
            SJMP LABLE
            SEG_4:
            CJNE R0,#11110111B,LABLE
            MOV P2,36H
            SJMP LABLE
            LABLE:
            SJMP RETURN
            DEC_R3:
            DEC R3
            LJMP SEG
            RETURN:
            RETI
            ;//************************************************** ***************
            LOAD_P3:
            MOV P3,R0
            RET
            ;//************************************************** ***************
            ORG 200H
            LOOK_UP:
            DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,8 3H,0C6H,0A1H,86H,8EH
            END

            دیدگاه


              #7
              پاسخ : مشکل با اسکن کیبرد

              بله درست می فرمایید. با گیت تو پروتئوس جواب میده. ولی تو عمل ...!!!
              یعنی می فرمایید گیت بذارم. اخه سگمنت ها روشن میشن و درست اسکن میسن. ولی کیبردو نمیخونه.
              یه توضیح در مورد کیبردم میدم ، ببینید درست وصل کردم یا نه:
              کیبرد من 4*4 هست که چهار تا پایه ی R داره(R1~R4) که همون سطر ها هستن و به پایه های P3.0 ~ P3.3وصل شدن. چهار تا هم پایه ی C داره (C1 ~ C4) که به پای های P1.0 ~ P1.3 وصل هستن.یه پایه ی V داره که به VCC وصله و چهار تا جای مقاومت داره که بین پایه ی V و پایه های C لحیمشون کردم(روی بورد خود کیبرد).
              همچنین باید بگم که نمیتونم از گیت استفاده کنم .
              خدايا
              من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
              من چون تويي دارم و تو چون خودي نداري
              امام سجاد (ع)

              دیدگاه


                #8
                پاسخ : مشکل با اسکن کیبرد

                سلام
                نه نمیگم تو عمل گیت بذار! فقط واسه پروتیوس گفتم.
                کیبرد رو چجوری نمیخونه؟ اصلاً نمیخونه یا پرت و پلا مینویسه؟
                یه چیزی در مورد برنامه اسکن کیبرد هست که شما نگفته بودید ولی من خودم متوجه شدم(نمیدونم خودتون عمداً اینجوری کردید یا نه !!):
                اینکه با زدن کلیدها دقیقاً عدد مربوطه نمایش داده نمیشه!! بلکه از چپ به راست و از بالا به پایین اعداد 0-F هگزادسیمال نمایش داده میشه!
                یعنی 0=7 و 1=8 و 2=9 و 3=÷ و الی آخر ...

                پ.ن.: راستی من شما رو آنلاین میبینم اگه مایلید همین الان جواب بدید تا سریع مشکلو حل کنیم

                دیدگاه


                  #9
                  پاسخ : مشکل با اسکن کیبرد

                  ببخشید اگه دیر شد.
                  آره خودم اینطوری در نظر گرفتم. اگه بخوام هر کلید رو مثل همونی که روی کلید نوشته نشون بدم ، فقط کافیه تو lokup table جاشونو عوض کنم . ولی اصلاً کیبردو نمیخونه. یعنی هر چی کلید ها رو فشار میدم اتفاقی نمی افته .

                  راستی شما هم گویا آنلاینید!
                  ببخشید. برای شما هم زحمت شده. :redface:
                  خدايا
                  من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
                  من چون تويي دارم و تو چون خودي نداري
                  امام سجاد (ع)

                  دیدگاه


                    #10
                    پاسخ : مشکل با اسکن کیبرد

                    نوشته اصلی توسط m.r.M.R
                    . ولی اصلاً کیبردو نمیخونه. یعنی هر چی کلید ها رو فشار میدم اتفاقی نمی افته .
                    حتی تو پروتئوس؟! :surprised: یا فقط در عمل کار نمیکنه؟ میخواید کلاً فایلها رو (اسمبلی و هگز و فایل پروتیوس) پلود کنید یه نگاهی بندازیم.

                    دیدگاه


                      #11
                      پاسخ : مشکل با اسکن کیبرد

                      تو پروتئوس یه جوبکی میده. حداقل وقتی یه کلید رو فشار میدم یه اتفاقی می افته ولی تو عمل اصلا هیچ اتفاقی نمی افته. فایلش هم همونیه که اول پست گذاشتم.
                      خدايا
                      من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
                      من چون تويي دارم و تو چون خودي نداري
                      امام سجاد (ع)

                      دیدگاه


                        #12
                        پاسخ : مشکل با اسکن کیبرد

                        نوشته اصلی توسط m.r.M.R
                        تو پروتئوس یه جوبکی میده. حداقل وقتی یه کلید رو فشار میدم یه اتفاقی می افته ولی تو عمل اصلا هیچ اتفاقی نمی افته. فایلش هم همونیه که اول پست گذاشتم.
                        منظورت از "جوابک" یا "یه اتفاقی" چیه؟ یعنی میگی حتی تو پروتئوس هم درست کار نمی کنه؟!

                        دیدگاه


                          #13
                          پاسخ : مشکل با اسکن کیبرد

                          نوشته اصلی توسط m.r.M.R
                          تو پروتئوس یه جوبکی میده. حداقل وقتی یه کلید رو فشار میدم یه اتفاقی می افته ولی تو عمل اصلا هیچ اتفاقی نمی افته. فایلش هم همونیه که اول پست گذاشتم.
                          سلام
                          من فکر میکنم به خاطر debounce کلیدها است شما کلید ها رو با یک تاخیر دوبار چک کنید.احتمالا مشکل همینه

                          دیدگاه


                            #14
                            پاسخ : مشکل با اسکن کیبرد

                            منظورم از جوابک اینه که وقتی تو پروتئوس یه کلید رو فشار میدم ؛ درست یا غلط یه چیزی روی سگمنت ها نشون میده . ولی تو مدار واقعی هیچی. تو برنامه اینطر نوشتم که وقتی مدار تازه شروع به کار کرد یا ریست شد ، روی سگمنت ها فقط یه خط - نشون بده و نشون هم میده. ولی وقتی کلید رو فشار میدم باید تغییر کنه که نمیکنه.
                            در مورد bounce کلید ها هم این کار همون اول کار کردم و کلید ها رو دوبار خوندم.

                            خدايا
                            من در كلبه ي فقيرانه ي خود چيزي دارم كه تو در عرش كبريايي خود نداري
                            من چون تويي دارم و تو چون خودي نداري
                            امام سجاد (ع)

                            دیدگاه


                              #15
                              پاسخ : مشکل با اسکن کیبرد

                              نوشته اصلی توسط m.r.M.R
                              منظورم از جوابک اینه که وقتی تو پروتئوس یه کلید رو فشار میدم ؛ درست یا غلط یه چیزی روی سگمنت ها نشون میده . ولی تو مدار واقعی هیچی. تو برنامه اینطر نوشتم که وقتی مدار تازه شروع به کار کرد یا ریست شد ، روی سگمنت ها فقط یه خط - نشون بده و نشون هم میده. ولی وقتی کلید رو فشار میدم باید تغییر کنه که نمیکنه.
                              در مورد bounce کلید ها هم این کار همون اول کار کردم و کلید ها رو دوبار خوندم.
                              شاید کیبرد رو درست وصل نکردی. نمیدونم . . . من که دیگه سر در نمیارم. متاسفانه اطلاعات الکتریکی منم ضعیفه :mrgreen:

                              دیدگاه

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