اطلاعیه

Collapse
No announcement yet.

راه اندازی LCD16*2 در محیط Mplab

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

    راه اندازی LCD16*2 در محیط Mplab

    سلام
    من قبلا ال سی دی 16*2 رو راه اندازی کردم بدین صورت که 8 پایه داده ال سی رو به به میکرو وصل می کردم و با لبه EN داده ها رو منتقل می کردم اما حالا می خواستم یکم راحتی برای خودم و بردم ایجاد کنم و اومدم از کتابخانه xcld استفاده کردم و مطابق توضیحات فایل .asm و .inc رو به پروژه افزودم و بدون اینکه کوچکتری خطی در برنامه نویسی ازش استفاده کنم(یعنی هیچ تابعیش رو صدا نزدم) پروژه رو که کامپایل می کنم خطا های زیر رو بهم داد


    Error[105] ..\XLCD.INC 37 : Cannot open file (Include File "XLCD.def" not found)
    Error[113] ..\XLCD.INC 71 : Symbol not previously defined (XLCDInit)
    Error[113] ..\XLCD.INC 72 : Symbol not previously defined (XLCDCommand)
    Error[113] ..\XLCD.INC 73 : Symbol not previously defined (XLCDPut)
    Error[113] ..\XLCD.INC 74 : Symbol not previously defined (XLCDDelay5ms)
    Error[113] ..\XLCD.INC 75 : Symbol not previously defined (XLCDDelay100us)
    Error[113] ..\XLCD.INC 76 : Symbol not previously defined (XLCDCommandInit4bit)
    Error[113] ..\XLCD.INC 77 : Symbol not previously defined (XLCDL1home)
    Error[113] ..\XLCD.INC 78 : Symbol not previously defined (XLCDL2home)
    Error[113] ..\XLCD.INC 79 : Symbol not previously defined (XLCDClear)
    Error[113] ..\XLCD.INC 80 : Symbol not previously defined (XLCDReturnHome)
    Error[113] ..\XLCD.INC 81 : Symbol not previously defined (XLCDSendMsg)
    Error[113] ..\XLCD.INC 84 : Symbol not previously defined (XLCDMODE)
    Error[113] ..\XLCD.INC 88 : Symbol not previously defined (XLCDRWPIN)
    Error[113] ..\XLCD.INC 89 : Symbol not previously defined (XLCDIsBusy)
    Error[113] ..\XLCD.INC 90 : Symbol not previously defined (XLCDReadData)
    Error[105] ..\XLCD.ASM 45 : Cannot open file (Include File "p16xxx.inc" not found)
    Error[105] ..\XLCD.ASM 46 : Cannot open file (Include File "p18xxx.inc" not found)

    خطاها رو که بخونیم انگاری 3 تا فایل کمه
    XLCD.def
    p16xxx.inc
    p18xxx.inc

    دوستانی که lcd رو تحت mplab و با این کتابخانه کار کردن می تونن کمک کنن
    شاید فایل های من ناقص هست اگر داریدشون لطفا در همین پست قرار بدین یا راهنمایی در جهت رفع این مشکل کنین

    ممنونم
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    #2
    پاسخ : راه اندازی LCD16*2 در محیط Mplab

    سلام

    من قبلا ال سی دی 16*2 رو راه اندازی کردم بدین صورت که 8 پایه داده ال سی رو به به میکرو وصل می کردم و با لبه EN داده ها رو منتقل می کردم اما حالا می خواستم یکم راحتی برای خودم و بردم ایجاد کنم و اومدم از کتابخانه xcld استفاده کردم و مطابق توضیحات فایل .asm و .inc رو به پروژه افزودم و بدون اینکه کوچکتری خطی در برنامه نویسی ازش استفاده کنم(یعنی هیچ تابعیش رو صدا نزدم) پروژه رو که کامپایل می کنم خطا های زیر رو بهم داد
    چرا فایلای .asm و .inc رو اضافه کردین ؟!
    شما فقط باید توابع مورد نیازتون رو از دایرکتوری زیر به پروژتون اضافه کنید


    C:\Program Files\Microchip\mplabc18\v3.40\src\pmc_common

    برای این کار از پی دی اف MPLAB_C18_Libraries_51297f استفاده کنید

    http://fadak-srt.persiangig.com/other/mplab-d/MPLAB_C18_Libraries_51297f.pdf

    من در آموزش شماره 2 این کار رو توضیح دادم

    http://www.eca.ir/forum2/index.php?topic=59815.0

    موفق باشید.




    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

    دیدگاه


      #3
      پاسخ : راه اندازی LCD16*2 در محیط Mplab

      سلام آقا رمضانی و ممنونم از راهنماییتون
      من این کارها رو مطابق کارهایی که در این فایل http://www.edaboard.com/attachments/...lcd.readme.pdf قرار دارد رو انجام دادم

      چند تا سوال داشتم
      1-من پین 11 تا 14 ال سی دی رو متصل کردم به پورت b پایه 0 تا 3 و پین RS رو به پورت b پین 4 و en هم وصل کردم به پورت b پین 5 و پایه RW ال سی دی هم متصل کردم به زمین حالا این تنظیمات رو کجای برنامه باید اعمال کنم؟
      2-من فایل های c و هدر رو ادد کردم و فایل دیگه ای رو به عنوان source فایلم انتخاب کردم و تنها هدر رو داخل برنامه include کردم اما بعد از کامپایل کردن عبارت زیر رو نشون داد

      ** No rule to make target `C:/Users/babyPC/Desktop/PIC/xlcd.h', needed by `build/default/production/_ext/1472/Untitled.o'. Stop.
      مشکل از کجاست؟

      ممنونم از راهنماییاتتون
      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

      دیدگاه


        #4
        پاسخ : راه اندازی LCD16*2 در محیط Mplab

        سلام و شرمنده باز سوال دارم
        داخل فایل lcdx.h من عبارت زیر رو دیدم
        #include "p18cxxx.h"
        نیاز نیست تغییری بدم به اسم تراشه خودم؟
        هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

        دیدگاه


          #5
          پاسخ : راه اندازی LCD16*2 در محیط Mplab

          اگر ممکنه کدهای main رو قرار بدین

          1-من پین 11 تا 14 ال سی دی رو متصل کردم به پورت b پایه 0 تا 3 و پین RS رو به پورت b پین 4 و en هم وصل کردم به پورت b پین 5 و پایه RW ال سی دی هم متصل کردم به زمین حالا این تنظیمات رو کجای برنامه باید اعمال کنم؟
          این تغییرات باید در فایل هدر انجام بشه درون این فایل آرایش پینها وجود داره و اما دقت کنید راه درست برای این کار اینکه فایل xlcd.h رو از دایرکتوری :

          C:\Program Files\Microchip\mplabc18\v3.40\h
          در محل پروژه کپی کنید و بعد در برنامه برای فراخانی هدر xlcd.h به جای <> از " " برای فراخانی استفاده کنید , با این کار از تغییر کتابخانه اصلی در امان میمانید :smile:

          و حتما دقت کنید هر تابعی که از این به بعد به پروژه اضافه میکنید رو ادیت کرده و از " " برای فراخانی هدر xlcd.h استفاده کنید

          اطلاعات بیشتر رو درباره تغییر پورت میتوانید در لینک زیر ببینید :


          http://www.eca.ir/forum2/index.php?topic=59815.30

          داخل فایل lcdx.h من عبارت زیر رو دیدم
          #include "p18cxxx.h"
          نیاز نیست تغییری بدم به اسم تراشه خودم؟
          خیر این هدر مربوط به خانواده 18f میباشد و کل خانواده رو پوشش میده , درون این هدر دستورات پیش پردازنده وجود داره و به صورت خودکار فقط خطوط مربوط به تراشه مورد نظر شما کامپایل میشه


          2-من فایل های c و هدر رو ادد کردم و فایل دیگه ای رو به عنوان source فایلم انتخاب کردم و تنها هدر رو داخل برنامه include کردم اما بعد از کامپایل کردن عبارت زیر رو نشون داد
          بیشتر توضبح بدین , اگه ممکنه کدهارو قرار بدین
          سعی کنید از فایل های اصلی کتابخانه که در محل نصب کامپایلر هست استفاده کنید و اونارو در محل پروژتون کپی کنید
          نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
          تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

          دیدگاه


            #6
            پاسخ : راه اندازی LCD16*2 در محیط Mplab

            سلام و ممنونم از زحماتتون
            آقا این فایل main من هست

            کد:
            #include <p18f452.h>
            #include <delays.h>
            #include "xlcd.h"
            
            #pragma config OSC=HS
            #pragma config WDT=OFF
            #pragma config BOR=OFF
            #pragma config LVP=OFF
            #pragma config PWRT=ON
            #define lcd PORTDbits.RD3
            #define but PORTDbits.RD2
            
            
            
            
            void main(void)
            {
              while(1)
              {
            
              }
              }
            همونطوری هم که می بینین دستوری ننوشتم اما موقع کامپایل خطای زیر رو بهم می ده
            ** No rule to make target `C:/Users/babyPC/Desktop/PIC/xlcd.h', needed by `build/default/production/_ext/1472/Untitled.o'. Stop.
            make[1]: *** [.build-conf] Error 2
            make: *** [.build-impl] Error 2

            این هم زیر شاخه project کارم


            خیلی ممنونم که راهنمایی و کمک می کنین
            هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

            دیدگاه


              #7
              پاسخ : راه اندازی LCD16*2 در محیط Mplab

              سلام
              آقا خطا رو حل کردم باید فایل lcdx.h رو در فولدرش می زاشتم که قبلا گذاشته بودم و فکر می کردم انجامش دادم(اما متاسفانه پاکش کرده بودم) حالا چند تا تست بگیرم.ممنون می شم در رابطه با این قسمت که حالا چه جوری برای روش 4 بیتی باید تنظیمات رو انجام بدم راهنماییم کنین
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #8
                پاسخ : راه اندازی LCD16*2 در محیط Mplab

                سلام

                آقا main من به صورت زیر هست بدون هیچ گونه خطایی
                کد:
                #include <p18f452.h>
                #include <delays.h>
                #include <stdio.h>
                #include "xlcd.h"
                
                
                #pragma config OSC=HS
                #pragma config WDT=OFF
                #pragma config BOR=OFF
                #pragma config LVP=OFF
                #pragma config PWRT=ON
                #define lcd PORTDbits.RD3
                #define but PORTDbits.RD2
                
                
                
                unsigned int cont = 0 ;
                char buf[20];
                
                void main(void)
                {
                
                 Delay10KTCYx(250) ;
                
                 OpenXLCD( FOUR_BIT & LINES_5X7 );
                 while( BusyXLCD() );
                 WriteCmdXLCD(DON & BLINK_OFF & CURSOR_OFF);
                 while( BusyXLCD() );
                 WriteCmdXLCD(0b00000001);//clear display
                
                 while( BusyXLCD() );
                 SetDDRamAddr( 2 );
                
                 while( BusyXLCD() );
                 putrsXLCD( "be name KHODA" );
                
                 while( BusyXLCD() );
                
                 cont = 0 ;
                
                 while(1)
                 {
                
                
                  Delay10KTCYx(50) ;
                
                  Delay10KTCYx(50) ;
                
                  cont = cont + 1 ;
                  sprintf(buf,"a+b = %4d srt", cont);
                
                  while( BusyXLCD() );
                  SetDDRamAddr( 40 );
                  while( BusyXLCD() );
                  putsXLCD( buf );
                
                 }
                }
                و در فایل lcdx.h عبارت های زیر رو تغییر دادم
                #define RW_PIN LATBbits.LATB2 /* PORT for RW */
                #define TRIS_RW TRISBbits.TRISB2 /* TRIS for RW */
                #define RS_PIN LATBbits.LATB4 /* PORT for RS */
                #define TRIS_RS TRISBbits.TRISB4 /* TRIS for RS */
                #define E_PIN LATBbits.LATB5 /* PORT for D */
                #define TRIS_E TRISBbits.TRISB5 /* TRIS for E
                */

                اینجا دو تا سوال مطرح می شه
                برای ارسال 4 بیتی که من پایه 5 رو زمین کردم در عبارت بالا می تونم این دو خط رو حذف کنم یا اگر خیر باید چی کارش کنم؟

                #define RW_PIN LATBbits.LATB2 /* PORT for RW */
                #define TRIS_RW TRISBbits.TRISB2 /* TRIS for RW *

                کجای برنامه می تونم 4 بیت اختصاص داده شده به داده ها رو تعریف کنم ؟
                هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                دیدگاه


                  #9
                  پاسخ : راه اندازی LCD16*2 در محیط Mplab

                  سلام

                  کجای برنامه می تونم 4 بیت اختصاص داده شده به داده ها رو تعریف کنم ؟
                  به خط 34 و 35 هدر xlcd.h دقت کنید


                  /* DATA_PORT defines the port to which the LCD data lines are connected */
                  #define DATA_PORT PORTB
                  #define TRIS_DATA_PORT TRISB

                  این دستورات به معنی این هستن که دیتا بر روی پرت B کانفیگ شده است

                  و همچنین شما با استفاده از دستور OpenXLCD( FOUR_BIT & LINES_5X7 ); به کامپایلر میگویید که دیتای من 4 بیت پهنا دارد که اگر به جای FOUR_BIT از EIGHT_BIT استفاده کنید کامپایلر تمام هشت بیت پورت B را به دیتا اختصاص میدهد .

                  یک نکته هم اینجا خیلی مهم است , اگر مد چهار بیت را انتخاب کنید کتاب خانه به صورت پیش فرض چهار بیت کم ارزش را برای دیتا انتخاب میکند و اگر بخاهید چهار بیت بالایی را برای این کار اختصاص دهید باید خط /* #define UPPER */ رو از حالت کامنت خارج کنید ( خط 31 )


                  /* When in 4-bit interface define if the data is in the upper
                  * or lower nibble. For lower nibble, comment the #define UPPER
                  */
                  /* #define UPPER */



                  برای ارسال 4 بیتی که من پایه 5 رو زمین کردم در عبارت بالا می تونم این دو خط رو حذف کنم یا اگر خیر باید چی کارش کنم؟

                  #define RW_PIN LATBbits.LATB2 /* PORT for RW */
                  #define TRIS_RW TRISBbits.TRISB2 /* TRIS for RW *
                  فکر میکنم پین RW برای خاندن و نوشتن استفاده میشه و هنگامی که میکرو رجیستر های LCD رو چک میکنه به این پین احتیاج داره و نباید اون رو غیر فعال کرد


                  همچنین به خطوط :


                  #define lcd PORTDbits.RD3
                  #define but PORTDbits.RD2

                  نیاز نیست !!
                  نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                  تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                  دیدگاه


                    #10
                    پاسخ : راه اندازی LCD16*2 در محیط Mplab

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

                    دیدگاه


                      #11
                      پاسخ : راه اندازی LCD16*2 در محیط Mplab

                      من فکر میکنم اشتباه متوجه شدین , شما پرت دیتا رو به هر پورتی میتوانید نسبت دهید

                      فقط کافیه به جای :


                      #define DATA_PORT PORTB
                      #define TRIS_DATA_PORT TRISB

                      بنویسید :


                      #define DATA_PORT PORTD
                      #define TRIS_DATA_PORT TRISD

                      که در این صورت پورت دیتا از پورت B به پورت D تغییر میکنه

                      البته من هم نوشتن یک کتاب خانه رو توصیه میکنم اما نه برای اینکه این کتاب خانه محدوده , من هم هنگام شروع با این کامپایلر پس از نوشتن و درگیر شدن با کتاب خانه ها آنقدر به زبان C تسلط پیدا کردم که توانستم یک کتاب خانه برای LCD گرافیکی t6963 بنویسم

                      چون میکروچیپ کتاب خانه برای LCD های TFT همراه با تاچ داره اما کتاب خانه برای درایور درپیت T6963 نداره :smile:

                      موفق باشید

                      نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                      تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                      دیدگاه


                        #12
                        پاسخ : راه اندازی LCD16*2 در محیط Mplab

                        سلام دوستان
                        من تمام کارهایی رو که برای اضافه کردن کتابخانه xlcdگفتند رو انجام دادم .و همه ی مطالب و نکات رو کامل خوندم و چندین بار چک کردم .وقتی هم که روی #include "xlcd.h" راست کلیک میکنم و میرم به navigate/go to decleration به همان هدر xlcd که اضافه کردم میره .ولی نمیدونم چرا هر تغییری تو این هدر میدم مثلا پورت b رو به d تغییر میدم .برنامه انگار براش فرقی نداره .و همان پورت دیفالت رو در نظر میگیره
                        چند روزه که درگیر این موضوعم هر کار میکنم درست نمیشه .کامپایلرم هم xc8 و محیط هم mplab x هست.
                        ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ‌فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                        شهید دکتر مصطفی چمران

                        دیدگاه


                          #13
                          پاسخ : راه اندازی LCD16*2 در محیط Mplab

                          سلام دوستان
                          خدا رو شکر بالاخره متوجه اشکال کار شدم :wow:.همانطور که حدس می زدم کامپایلر داره از قسمت دیفالت هدر رو میخونه .در کامپایلر xc8 وقتی یک هدر رو اینکلود می کنیم بطور پیش فرض به مسیر دیفالت که در داخل فایل نصب شده هست میره .اما وقتی مثل این پروژه ما می خواهیم کتابخانه xlcd رو در جای دیگه کپی کنیم(حتی داخل خود پروژه) و تغییرات دلخواه خودمان را رویش انجام دهیم بایستی حتما مسیر اضافی فایل هدر را برای کمپایلر مشخص کنیم .که ظاهرا این کار از دو طریق امکان پذیره یکی از طریق نوشتن -I که توضیحات کمی درموردش در صفحه 96 xc8 user guide در موردش داده شده و راه دوم و ساده تر هم اینکه که در mplab x در قسمت سمت چپ projects بر روی پروژه راست کلیک میکنیم و وارد properties میشویم در قسمت xc8 compiler/include directoriesادرس اضافی را می دهیم که در این صورت کامپایلر ابتدا این ادرس ها را چک می کند و اگر هدر در اینها بود از ان استفاده می کند و اگر نبود به سراغ ادرس دیفالت خودش می رود. :nerd:
                          ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ‌فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                          شهید دکتر مصطفی چمران

                          دیدگاه

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