اطلاعیه

Collapse
No announcement yet.

مشکل با راه اندازی کیبرد ماتریسی 4*3

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

    مشکل با راه اندازی کیبرد ماتریسی 4*3

    با سلام خدمت دوستان :biggrin:
    من می خوام پروژه قفل رمز دیجیتالی رو انجام بدم.تازه کار هستم و اصلاً چیزی از AVR نمی دونم.راه اندازی LCD رو یاد گرفتم ولی با کیبرد ماتریسی 4*3 مشکل دارم.آموزش راه اندازی کیبرد 4*4 رو توی همین بخش دیدم.چند تا سوال دارم:
    1- آیا می تونم LCD و کیبرد رو با ATMEGA8 راه بندازم؟من کیبرد رو به پورت B و LDC رو به پورت D وصل کردم و هر دکمه ای رو میزنم هیچ چی رو LCD نشون نمیده. :cry2:
    2- من با ATMEGA32 هم امتحان کردم و کدم این هستش ولی با زدن دکمه های ردیف اول هیچ اتفاقی نمی افته ودکمه های ردیف دوم همه صفر رو نشون میدن و ردیف سوم همه عدد 4 رو نشون میدن و ردیف آخر هم همه عدد8 رو نشون میدن.مشکل چیه؟
    3-من می خوام پروژه رو با ATMEGA8 انجام بدم پس دوست دارم مشکلم با این آیسی حل بشه.


    کدم با ATMEGA32

    $regfile = "m32def.dat"
    $crystal = 1000000
    '------------------------
    Config Porta = Input
    '-----------------------
    Config Portd = Output
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.0 , Db7 = Portd.2 , Db6 = Portd.3 , Db5 = Portd.4 , Db4 = Portd.5
    Cursor Off
    Config Kbd = Porta , Debounce = 40
    '-----------------------
    Dim A As Byte
    '-----------------------
    Initlcd
    Do
    A = Getkbd()
    If A < 16 Then
    Cls
    Locate 1 , 1 : Lcd A
    End If
    Loop
    End 'end program



    کدم با ATMEGA8

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim L As Word
    config portB= input
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portc.0 , Rs = Portc.1
    Config Kbd = Portb , Debounce = 40
    Dim B As Word
    Cls
    Do
    B = Getkbd()
    If B < 16 Then
    Cls
    Locate 1 , 1 : Lcd B
    End If
    Loop

    End

    #2
    پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

    نوشته اصلی توسط edris.noei
    با سلام خدمت دوستان :biggrin:
    من می خوام پروژه قفل رمز دیجیتالی رو انجام بدم.تازه کار هستم و اصلاً چیزی از AVR نمی دونم.راه اندازی LCD رو یاد گرفتم ولی با کیبرد ماتریسی 4*3 مشکل دارم.آموزش راه اندازی کیبرد 4*4 رو توی همین بخش دیدم.چند تا سوال دارم:
    1- آیا می تونم LCD و کیبرد رو با ATMEGA8 راه بندازم؟من کیبرد رو به پورت B و LDC رو به پورت D وصل کردم و هر دکمه ای رو میزنم هیچ چی رو LCD نشون نمیده. :cry2:
    2- من با ATMEGA32 هم امتحان کردم و کدم این هستش ولی با زدن دکمه های ردیف اول هیچ اتفاقی نمی افته ودکمه های ردیف دوم همه صفر رو نشون میدن و ردیف سوم همه عدد 4 رو نشون میدن و ردیف آخر هم همه عدد8 رو نشون میدن.مشکل چیه؟
    3-من می خوام پروژه رو با ATMEGA8 انجام بدم پس دوست دارم مشکلم با این آیسی حل بشه.


    کدم با ATMEGA32

    $regfile = "m32def.dat"
    $crystal = 1000000
    '------------------------
    Config Porta = Input
    '-----------------------
    Config Portd = Output
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.0 , Db7 = Portd.2 , Db6 = Portd.3 , Db5 = Portd.4 , Db4 = Portd.5
    Cursor Off
    Config Kbd = Porta , Debounce = 40
    '-----------------------
    Dim A As Byte
    '-----------------------
    Initlcd
    Do
    A = Getkbd()
    If A < 16 Then
    Cls
    Locate 1 , 1 : Lcd A
    End If
    Loop
    End 'end program



    کدم با ATMEGA8

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim L As Word
    config portB= input
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portc.0 , Rs = Portc.1
    Config Kbd = Portb , Debounce = 40
    Dim B As Word
    Cls
    Do
    B = Getkbd()
    If B < 16 Then
    Cls
    Locate 1 , 1 : Lcd B
    End If
    Loop

    End
    با سلام
    ببینید شما برای کار با کیپد نیاز هست که یا از ADC بصورت مقاومتی استفاده کنید که نیاز به یک ADC دارید یا این که مثل شکل زیر 3 تا پین ردیف داشته باشید و 4 تا پین ستون(البته منظورم با یه چرخش 90 درجه پاد ساعتگرد در شکل زیر بود ! :mrgreen

    برنامتون رو با این الگو اصلاح کنید درست میشه
    اگر نتونستید بگید که باز در حد توان راهنمایی کنم
    مفید بود ؟ بجای اسپم میتونید از دکمه ی تشکر استفاده کنید.
    [img width=405 height=100]http://eros8631.persiangig.com/image/pp.png[/img]

    دیدگاه


      #3
      پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

      منظورتون اینه که باید atmega8 خروجی adc داشته باشه؟من خیلی آماتور هستم به راهنمایی زیاد نیاز دارم.
      تو یه پروژه ای دیدم که با atmega32 خروجی lcd رو به پورت A یعنی adc وصل شده بود و ورودی کیبرد به پورت B وصل شده بود.
      بیش تر راهنمایی کنین بالاخره با atmega8 می تونم این کارو انجام بدم یا نه؟

      دیدگاه


        #4
        پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

        نوشته اصلی توسط edris.noei
        منظورتون اینه که باید atmega8 خروجی adc داشته باشه؟من خیلی آماتور هستم به راهنمایی زیاد نیاز دارم.
        تو یه پروژه ای دیدم که با atmega32 خروجی lcd رو به پورت A یعنی adc وصل شده بود و ورودی کیبرد به پورت B وصل شده بود.
        بیش تر راهنمایی کنین بالاخره با atmega8 می تونم این کارو انجام بدم یا نه؟
        ببینید من گفتم اگر بخواید از چیدمان با مقاومت استفاده کنید !
        در حالت معمول کیبرد و LCD به هر پورتی که شما بخوای میتونه وصل بشه
        اینم چیدمان با مقاومته :

        در این روش درواقع با دستورات کیبرد کاری ندارید و فقط نیاز هست ولتاژ رو از ADC بخونید و تحلیل کنید
        ADC هم هردو میکرو دارن
        پس هیچ محدودیتی نیست
        البته من یه چیزی یادم رفت !
        برنامه ی شما همینجوری هم فکر میکنم باید کار کنه !
        شما کیبرد رو چجوری وصل کردی ؟!
        مفید بود ؟ بجای اسپم میتونید از دکمه ی تشکر استفاده کنید.
        [img width=405 height=100]http://eros8631.persiangig.com/image/pp.png[/img]

        دیدگاه


          #5
          پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

          من پایه های ستون ها یعنی همون 1 و 2 و 3 رو به ترتیب و بعد از اون ها پایه های ردیف ها یعنی A و B و C و D رو وصل کردم.میگم باید جواب بده ولی همون طور که تو پست اول گفتم مشکل داره.با این کد و atmega32 جواب میده ولی این کد رو خودم نزدم واونو یه کم تغییر میدم و برای atmega8 استفاده می کنم جواب نمیده.اگه میتونی شما یه بررسی بکن.این کد مال کیبرد 4*4 هست .برای 4*3 چیکار کنم؟دمت گرم
          $regfile = "m32def.dat"
          $crystal = 1000000
          '------------------------
          Config Portb = Input
          '-----------------------
          Config Porta.1 = Output
          Porta.1 = 0
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.2 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
          Cursor Off
          Config Kbd = Portb , Debounce = 40
          '-----------------------
          Dim A As Byte
          '-----------------------
          Initlcd
          Do
          A = Getkbd()
          If A < 16 Then
          Cls
          Locate 1 , 1 : Lcd A
          End If
          Loop
          End 'end program

          دیدگاه


            #6
            پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

            نوشته اصلی توسط edris.noei
            من پایه های ستون ها یعنی همون 1 و 2 و 3 رو به ترتیب و بعد از اون ها پایه های ردیف ها یعنی A و B و C و D رو وصل کردم.میگم باید جواب بده ولی همون طور که تو پست اول گفتم مشکل داره.با این کد و atmega32 جواب میده ولی این کد رو خودم نزدم واونو یه کم تغییر میدم و برای atmega8 استفاده می کنم جواب نمیده.اگه میتونی شما یه بررسی بکن.این کد مال کیبرد 4*4 هست .برای 4*3 چیکار کنم؟دمت گرم
            $regfile = "m32def.dat"
            $crystal = 1000000
            '------------------------
            Config Portb = Input
            '-----------------------
            Config Porta.1 = Output
            Porta.1 = 0
            Config Lcd = 16 * 2
            Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.2 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
            Cursor Off
            Config Kbd = Portb , Debounce = 40
            '-----------------------
            Dim A As Byte
            '-----------------------
            Initlcd
            Do
            A = Getkbd()
            If A < 16 Then
            Cls
            Locate 1 , 1 : Lcd A
            End If
            Loop
            End 'end program
            برنامه ی 4*4 با 3*4 تقریبا یکی هست
            شما احتمالا کیپد رو اشتباه وصل میکنید
            برای اتصال کیپد مهم نیست که به چه پورتی وصلش میکنید ولی مهمه که ستون اول به پین 0 و ردیف یا سطر آخر به پین 7 از اون پورت وصل بشه
            برای مثال اگر دقت کرده باشید پورت ها اکثرا 7 تایی هستن پس اگر مثلا بخوای به پورت A وصل کنی به ترتیب اولین ستون به A0 و... و آخرین سطر به A7 وصل میشه
            تغییری هم که نیازه در برنامه داده بشه فقط خط زیر هست :
            If A < 16 Then
            در کیپد 4*4 ما 16 تا کلید داریم(بدون 0 )
            میکرو هم این خونه ها رو شماره گذاری میکنه(از 0 تا 15(0 هم یک کلید هست))
            پس با این دستور اگر مقدار ی به میکرو داده نشه هیچ کاری انجام نمیشه
            شما فقط کافیه این عدد رو 12 بکنی (برای 3*4)
            ستون ها رو هم از پین 0 بچینید که در نتیجه پین 6 میشه آخرین سطر شما
            اگر Delay هم برای کیپد بزارید بهتره و از نویز جلوگیری میکنه
            مقدار Debounce هم تقریبا اختیاری هست ولی به صورت استاندارد 20 یا 50 گرفته میشه (مقادیر دیگه هم مشکلی ایجاد نمیکنن)
            موفق باشید
            مفید بود ؟ بجای اسپم میتونید از دکمه ی تشکر استفاده کنید.
            [img width=405 height=100]http://eros8631.persiangig.com/image/pp.png[/img]

            دیدگاه


              #7
              پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

              راستی اینو یادم رفت بگم
              البته هرچند که مستتر گفته شد ! :mrgreen:
              میکرو کلیدهای شما رو از 0 میشناسه
              مثلا در 4*4 کلید ها 0و1و2و...و15 هستن(بدون توجه به برچسب روی کیپد)
              اگر مثلا کلید 5 برچسب S خورده باشه و شما بخوای با زدن اون S نمایش داده بشه نیاز هست که 5 رو ترجمه کنید
              که هم با جدول Lookup میشه و هم با دستور case :agree:
              مفید بود ؟ بجای اسپم میتونید از دکمه ی تشکر استفاده کنید.
              [img width=405 height=100]http://eros8631.persiangig.com/image/pp.png[/img]

              دیدگاه


                #8
                پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                دوست عزیز همونطور که گفتم کدی که برای ATMEGA32 گذاشتم جواب میده ولی فقط با کیبرد 4*4.وقتی اون عدد رو به 12 کاهش میدم و 4*3 رو وصل می کنم جواب نمیده. :cry2:

                من حتی همین کد 32 رو برای ATMEGA16 تغییر دادم یعنی خط اول برنامه رو به 16 تغییر دادم و باز هم خواستم 4*4 رو راه بندازم جواب نمیده.چرا این طوریه؟اعصابمو خورد کرده.در واقع مشکل اینه که هر سطر از کیبرد رو با همون دکمه ی اولش می شناسه یعنی تمام دکمه های سطر اول عدد 0 رو وارد میکنن و ردیف دوم همه عدد 4 و ردیف سوم 8 و ردیف آخر 12 رو وارد می کنن.

                یه راهنمایی مشتی بکنین بی زحمت.

                این جوری که من فهمیدم اصلاً ATMEGA16 بدرد این کار نمی خوره چرا که من کد 32 رو که جواب میداد برای 16 استفاده کردم ولی نشد.

                دیدگاه


                  #9
                  پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                  بچه ها این کد رو تازه زدم آخه کدهای قبلی جواب نمیداد و مدار پروتئوس رو کشیدم و طبق تغییر رنگ های شماتیک که زرد و طوسی میشدن من این کد رو زدم.اینو بگم که سه پایه ی ستون رو به 3 پایه اول پورت B و پایه چهارم رو آزاد گذاشتم و 4 پایه ی ردیف کیبرد رو به 4 پورت آخر B وصل کردم.
                  این کد دو تا خطا میده موقع کامپایل که هر دو خطا یکی هستند و از خط 19 یعنی شروع if در تابع main گرفته میشن:
                  error:35 line:19 3 parameters expected

                  این هم کد:

                  $regfile = "M8DEF.DAT"
                  $crystal = 8000000
                  Config Kbd = Portb
                  Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
                  Dim B As Byte
                  Dim C As Byte
                  Dim D As Byte
                  Dim E As Byte
                  Mmain:
                  Do
                  Waitms 50
                  B = Getkbd()
                  If B < 12 Then
                  Goto Main
                  End If
                  Loop
                  Main:
                  If Portb.0 = 0 Then
                  If Then Portb.4 = 0 Then C = 1
                  End If
                  If Then Portb.5 = 0 Then C = 4
                  End If
                  If Then Portb.6 = 0 Then C = 7
                  End If
                  If Then Portb.7 = 0 Then C = 10
                  End If
                  If Portb.1 = 0 Then
                  If Then Portb.4 = 0 Then C = 2
                  End If
                  If Then Portb.5 = 0 Then C = 5
                  End If
                  If Then Portb.6 = 0 Then C = 8
                  End If
                  If Then Portb.7 = 0 Then C = 0
                  End If
                  If Portb.2 = 0 Then
                  If Then Portb.4 = 0 Then C = 3
                  End If
                  If Then Portb.5 = 0 Then C = 6
                  End If
                  If Then Portb.6 = 0 Then C = 9
                  End If
                  If Then Portb.7 = 0 Then C = 11
                  End If
                  End If


                  Lcd C
                  Waitms 200
                  End 'end program

                  دیدگاه


                    #10
                    پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                    ای بابا چه وضعه فرومه
                    یه دفعه تعطیل کنین بره دیگه
                    یه سوال مسخره پرسیدم هیچکی نیست جواب بده.2 روزه منتظر جوابیم.این همه میگن ECA همین بود.
                    جواب بدین دیگه :angry: :angry: :angry: :angry: :angry: :angry: :angry:

                    دیدگاه


                      #11
                      پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                      If Then Portb.4 = 0 Then C = 1

                      اوه اوه چه قاتی کردی داش.

                      بیا اینم عیبت.

                      If Then Portb.4 = 0 Then C = 1
                      بعده If چرا Then گذاشتی.

                      یه زره تحمل داشته یاش. :sad:
                      ?Why not

                      دیدگاه


                        #12
                        پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                        بگذریم با این کدی که خودم زدم و ایرادی که شما گفتین مشکلم حل نشد و باز هم ارور میداد.
                        حالا این کد رو زدم که البته با atmega32 کار میکرد و کیبرد 4*3 ولی همین کد رو برای ATMEGA8 استفاده می کنم تمام دکمه های یک سطر همون عددی رو وارد میکنن که اولین دکمه هر سطر(از سمت چپ)وارد می کنه.یعنی سطر اول همه عدد 1 رو وارد می کنن.چرا؟اصلاً به atmega8 میشه کیبرد وصل کرد؟
                        $regfile = "m32def.dat"
                        $crystal = 1000000
                        '------------------------
                        Config Portb = Input
                        '-----------------------
                        Config Lcd = 16 * 2
                        Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
                        Cursor Off
                        Config Kbd = Portb
                        Delay
                        '-----------------------
                        Dim A As Byte
                        Dim B As String * 6
                        '-----------------------
                        Initlcd
                        Do
                        A = Getkbd()
                        Delay
                        If A < 16 Then
                        Cls
                        B = Lookupstr(a , Keydata)
                        Locate 1 , 1
                        Lcd B
                        End If
                        Loop
                        End
                        Keydata:
                        Data , "1" , "2" , "3" , "10" , "4" , "5" , "6" , "11" , "7" , "8" , "9" , "12" , "*" , "0" , "#" , "="
                        'end program

                        دیدگاه


                          #13
                          پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                          سلام
                          میخوام با یه صفحه کلید ماتریسی4*4یه عدد چند رقمی رو روی lcdنمایش بدم بطوریکه ارزش خودشو حفظ کنه یعنی بتونم ضرب وجمعش کنم .الان فقط بصورت تک رقمی نمایش میده.
                          البته به زبان C.
                          کسی هست کمکم کنه ؟
                          ممنون میشم

                          دیدگاه


                            #14
                            پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                            نوشته اصلی توسط ahl0 نمایش پست ها
                            سلام
                            میخوام با یه صفحه کلید ماتریسی4*4یه عدد چند رقمی رو روی lcdنمایش بدم بطوریکه ارزش خودشو حفظ کنه یعنی بتونم ضرب وجمعش کنم .الان فقط بصورت تک رقمی نمایش میده.
                            البته به زبان C.
                            کسی هست کمکم کنه ؟
                            ممنون میشم
                            اگه شما کد امادشو میخای باید بگی که:
                            -1_چه نوع ال سی دی
                            -2_چه میکرویی
                            -3_عدد چند رقمی
                            -4_تا چن تا عدد رو بتونید ذخیره کنید (قابلیت محاسبات داشته باشد)
                            ____________
                            اگر هم فقد میخاهید روش و الگوریتم کاردستتون بیاد کافیه عددی که از کی پد میگیرید رو (به هر روشی)_در یک متغیر ذخیره کنید و اعمال جمع و ضرب را روی متغیر انجام دهید_کار سختی نیست ولی اگه باز هم جاییشو نفهمیدید میتونم بیشتر توضیح بدم

                            دیدگاه


                              #15
                              پاسخ : مشکل با راه اندازی کیبرد ماتریسی 4*3

                              نوشته اصلی توسط saeed under line نمایش پست ها
                              اگه شما کد امادشو میخای باید بگی که:
                              -1_چه نوع ال سی دی
                              -2_چه میکرویی
                              -3_عدد چند رقمی
                              -4_تا چن تا عدد رو بتونید ذخیره کنید (قابلیت محاسبات داشته باشد)
                              ____________
                              اگر هم فقد میخاهید روش و الگوریتم کاردستتون بیاد کافیه عددی که از کی پد میگیرید رو (به هر روشی)_در یک متغیر ذخیره کنید و اعمال جمع و ضرب را روی متغیر انجام دهید_کار سختی نیست ولی اگه باز هم جاییشو نفهمیدید میتونم بیشتر توضیح بدم
                              سلام
                              lcd 20*4 - mega32a-عددش تو بیشترین حالت 20 رقم.-
                              پروژه ترازوی دیجیتاله الان ترازو امادس یه وزنی رو تو سطر اول میده من میخوام یه عددی رو تو سطر دوم که نهایتش 20رقم باشه ( البته حتما بیست رقم نه) با صفه کلید وارد کنم بعد با زدن یه کلید (ترجیحا Enter) ای عدد و ضربدر وزن کنه تو سطر سوم نشون بده.الان مشکلم تو نمایش عدد تو سطر دومه.
                              البته به زبان c.
                              اگه کدشو داشته باشید ممنون میشم
                              جدیدترین ویرایش توسط ahl0; ۱۲:۰۱ ۱۳۹۵/۰۶/۲۹.

                              دیدگاه

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