اطلاعیه

Collapse
No announcement yet.

شروع کار با lcd کاراکتری 16×2

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

    شروع کار با lcd کاراکتری 16×2

    سلام انشالله که خوش و خرم باشین
    بنده حقیر با استفاده از کتابخانه lcd ای که شرکت نوآوران درست کرده تونستم lcd رو راه اندازی کنم
    شرمنده الان آخر شبه فردا اگه قسمت باشه پایه هاش رو هم مینویسم با چه ترتیبیه!
    اصل کار کتابخونه است . در ضمن برنامه رو تست کردم و سالمه امیدوارم به درد بخوره.
    در ضمن من اینو واسه keil درست کردم خواستین بگین نسخه iar رو هم بذارم گرچه فرق زیادی ندارن.

    http://www.4shared.com/file/lxEbC-5H/arm_lcd.html
    It's nice to be important but it's important to be nice!

    از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

    #2
    پاسخ : شروع کار با lcd کاراکتری 16×2

    لیست چگونگی اتصال LCD به ARM

    LCD ARM

    4-RS------------------------PA6
    5-RW-----------------------PA7
    6-EN------------------------PA8
    7-D0----------------------PA11
    8-D1----------------------PA12
    9-D2----------------------PA13
    10-D3---------------------PA14
    11-D4---------------------PA15
    12-D5---------------------PA16
    13-D6---------------------PA17
    14-D7---------------------PA18

    امیدوارم به دردتون بخوره. بی صبرانه منتظر تشکرتونم :mrgreen: :mrgreen: :mrgreen:
    It's nice to be important but it's important to be nice!

    از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

    دیدگاه


      #3
      پاسخ : شروع کار با lcd کاراکتری 16×2

      ضمن تشکر ، باید بگم که متاسفانه به درد من نخورد :cry2: . علاوه بر اینکه کاپایل نمیشد ، خود سورس هم به دلیل تفاوت پایه ها با بورد من ، مستقیما قابل استفاده نبود .
      من یه برنامه دیگه برای lcd گرافیکی داشتم که تقربا شبیه همین بود . برای همین میخوام یه کتابخونه بنویسم که توش مثل بسکام پایه های میکرو رو تعیین کنی ، بره پی کارش :biggrin:

      دیدگاه


        #4
        پاسخ : شروع کار با lcd کاراکتری 16×2

        فرزاد جان منم به این مشکل کامپایل برخوردم.
        اگه کتابخانه lcd رو باز کنی دوباره کامپایل رو بزنی کامپایل میشه نمی دونم چرا اینطوریه :cry: :cry: :cry:
        It's nice to be important but it's important to be nice!

        از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

        دیدگاه


          #5
          پاسخ : شروع کار با lcd کاراکتری 16×2

          گویا این برنامه برای iar نوشته شده ، مثلا دستور
          کد:
          	for(int j=0;j<1000;j++);
          رو keil قبول نمیکنه ! اون برنامه ای هم که گفتم شبیه این بود رو از سایت at91 گرفته بودم و روی keil اجرا نمیشد.
          به نظر میاد iar پشتیبانی بهتری از محصولات اتمل داره(و keil هم از nxp ) ، من طی چند روز آینده سعی میکنم یه کتابخونه با قابلیت تعیین پایه ها برای iar بنویسم (با کمک همین مثال ها و نه صفر). ولی ممکنه یکم طول بکشه چون وقتم آزاد نیست .

          دیدگاه


            #6
            پاسخ : شروع کار با lcd کاراکتری 16×2

            من به این نتیجه رسیدم که از این شاخه به اون شاخه نپرم بهتره ! :mrgreen:
            پس فعلا یه پروژه با همون keil انجام دادم:
            http://www.4shared.com/file/127709987/7d7dd6b6/C_LCD.html
            احتمالا بعدا یه تایع برای تنظیم پایه ها به کتابخونه اضافه کنم.
            در مورد کل پروژه هم یکم توضیح دادم:
            http://farzadsw.persianblog.ir/post/13/
            اگه سوالی در موردش دارید بپرسید ، چون تقریبا از صفر نوشتمش. :biggrin:

            دیدگاه


              #7
              پاسخ : شروع کار با lcd کاراکتری 16×2

              اق فرزاد چرا از 8 تا پایه دیتای lcd استفاده شده؟نمیشه از 4 تا پایه استفاده کرد که پین ها رو اشغال نکنیم؟
              علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

              دیدگاه


                #8
                پاسخ : شروع کار با lcd کاراکتری 16×2

                از اونچایی که این میکرو پایه کم نداره و البته برد من 8 تا برای دیتای lcd کشیده بود هشتایی گذاشتم . اگه بخواید 4تایی استفاده کنید باید 2بار اطلاعات 4bit رو بفرستید که سرعت نصف میشه(الکی )
                همونطور که گفتم اگه وقت شه اون کتابخونه رو کاملتر میکنم.

                دیدگاه


                  #9
                  پاسخ : شروع کار با lcd کاراکتری 16×2

                  کد:
                  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,(1<<10))

                  این ده رو یک بار به چپ شیفت بده رو این پورت یعنی چی؟

                  یا این
                  WriteByte( (1<<7) | column,255); break;

                  و این
                  dummy = ((unsigned int)byte & 0xFF) <<24 ; //h
                  کد:
                  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,(1<<10))
                  یعنی 1 رو 10 بار به چپ شیفت بده . که برای آدرس دهی پایه 10 از پورت A هست . اون at91C_Base_PIOA هم پوینتر مربوط به PIOA (پورت A) هست. خودمونیش میشه Clear PortA.10 :biggrin:
                  تابع WriteByte دوتا آرگومان داره یکی مقدار برای فرستادن و یکی نوع اطلاعات (0 دیتا و 255 دستور)
                  اگه دتا شیت lcd کاراکتری رو نگاه کنی میبینی:



                  و



                  خب پس WriteByte( (1<<7) | column,255); break; یعنی شماره ستون(1تا16) رو با 10000000 اجتماع بگیر(or) که مثلا میشه 10001101 (ستون 13 ام ردیف اول) و به صورت دستور بفرست.

                  یه نکته ! اونجاهایی کهعلامت کامنت گذاشتم(//) یعنی اگه شما پایه های میکرو رو یه جور دیگه وصل کردید باید تغییرش بدید . همچنین h// یعنی کد هگز رو باید تغییر بدید.
                  کد:
                  dummy = ((unsigned int)byte & 0xFF) <<24 ;	 //h
                  unsigned int)byte & 0xFF : همونطور که میدونید and هر عددی با 1 میشه خودش و حاصل این هم همون متغیر byte میشه . پس چرا اینکار رو کردیم ؟ چون به هگز تبدیلش کنیم.
                  اگه فرض کنیم byte برابر 16 (1F) باشه پس الان مقدار dummy برابر 0x1f000000 هست
                  نکته ! شیفت ها به صورت بیت هست پس 24 تا شیفت میشه 6 تا شیفت تو هگز

                  دیدگاه


                    #10
                    پاسخ : شروع کار با lcd کاراکتری 16×2

                    از توضیحت بسیار بسیار ممنونم ولی باید اعتراف کنم جز مورد اول دو مورد بعدی رو اصلا رو درک نکردم :angry:
                    تازه تو همون مورد اول هم که داریم شیفت میدیم یه عدد رو روی پورت ها خوب تا بخواد به پایه 10 برسه از 0 تا9 رو خراب میکنه.شاید ما نخوایم اونا تغییر کنن :cry2:
                    علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                    دیدگاه


                      #11
                      پاسخ : شروع کار با lcd کاراکتری 16×2

                      اول اینو بگم که چون رزولیشن عکسها زیاده به صورت کامل نمیتونید تو این صفحه ببینید برای همین مثلا ذخیره کنید بعد ببینید!
                      منظور از 10 بار شیفت دادن این نیست که ده بار یکی یکی شیفت پیدا میکنه . 10>>1 یعنی عدد 10000000000 (10 تا صفر) در مبنای 2 (باینری).
                      اون تابع AT91F_PIO_ClearOutput در حقیقت به اینصورته:

                      pPio->PIO_CODR = flag;

                      که pPio در اینجا همون AT91C_BASE_PIOA و flag هم همون عدد 10000000000 (10>>1) هست . یعنی این تابع مقدار مذکور رو در یه رجیستر 32 بیتی به اسم PIO_CODR قرار میده . هر بیت از رجیستر PIO_CODR که 1 باشه پایه متناظر به اون پاک(0) میشه.یعنی اگه بیت 11 هم 1 بشه پایه 11 ام از پورت a پاک میشه.
                      چون منم قبلا بیشتر با بیسیک کار کرده بودم اولا خیلی سختم بود ولی شما اگه به کد ها دقت کنید متوجه میشید و بعد بهش عادت میکنید.

                      دیدگاه


                        #12
                        پاسخ : شروع کار با lcd کاراکتری 16×2

                        تو این مورد اولی بلاخره چیز فهم شدم.ممنونم
                        حالا میشه در مورد این توضیح میدن
                        کد:
                        WriteByte( (1<<7) | column,255); break;
                        اخه نوشتین

                        یعنی شماره ستون(1تا16) رو با 10000000 اجتماع بگیر(or) که مثلا میشه 10001101 (ستون 13 ام ردیف اول) و به صورت دستور بفرست.
                        10000000 رو فهمیدم که از (1<<7) اومده ولی حالا این COLUMN که یه متغیر هس چه مناسبتی با 255 که بعدش نوشته شده داره؟
                        علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                        دیدگاه


                          #13
                          پاسخ : شروع کار با lcd کاراکتری 16×2

                          گفتم که :
                          تابع WriteByte دوتا آرگومان داره یکی مقدار برای فرستادن و یکی نوع اطلاعات (0 دیتا و 255 دستور)
                          اون 255 یعنی مقدار رو به عنوان دستور بفرست نه دیتا .

                          دیدگاه


                            #14
                            پاسخ : شروع کار با lcd کاراکتری 16×2

                            نوشته اصلی توسط farzadsw
                            احتمالا بعدا یه تایع برای تنظیم پایه ها به کتابخونه اضافه کنم.
                            در مورد کل پروژه هم یکم توضیح دادم:
                            http://farzadsw.persianblog.ir/post/13/
                            اگه سوالی در موردش دارید بپرسید ، چون تقریبا از صفر نوشتمش. :biggrin:
                            اقا خودت گفتی سوال بپرس به من ربطی نداره :mrgreen:
                            من به وبلاگتون سر زدم و توپ هم بود برنامه چشمک زنتون رو کار کردم پورت سریال رو هم کار کردم .lcd رو هم کار کردم همه چی خوب بود جز lcd که نه خود lcd رو تونستم جواب بگیرم نه lcd با سریال رو .سریال کار می کرد ولی lcd نه :cry2:.چرا مشکل کارم کجا می تونه باشه من تمام پایه ها رو چک کردم ارتباط ها هم وصل بود ولی کار نکرد.البته من lcd رو بردم ندارم و تغذیه رو هم 5 ولت گزاشتم واسه led ولی gnd رو مشترک کردمااا
                            علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                            دیدگاه


                              #15
                              پاسخ : شروع کار با lcd کاراکتری 16×2

                              همه ی خط هایی که جلوشون // ,h// بود رو تغییر دادی دیگه(اگه پایه ها رو طور دیگه ای وصل کردی)؟
                              RW رو یا سخت افزاری یا نرم افزاری زمین کردی؟
                              حواست بود که D0-D7 -> PA24-PA31 منظور خود پایه های 24-31 نیست بلکه پایه هایی هست که طبق دیتا شیت PA24-PA31 تو اونا قرار داره .(شماره پایه ها رو از دیتاشیت ببین ، درضمن پشت سرهم نیستنا)
                              اگه ترتیب پایه هایی که استفاده کدی فرق داره و مشکلت با تغییر خط های علامت دار حل نشد ، کد فایل c_lcd.h یی که تغییرش دادی رو اینجا بگذار تا بررسی کنم.

                              دیدگاه

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