اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط lpc1768 با lcd2*16

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

    مشکل در ارتباط lpc1768 با lcd2*16

    سلام خدمت دوستان.

    یه برنامه نوشتم برای هدر برد 1768 برای ارتباط با lcd16*2 . هرکاری می کنم چیزی روی lcd نشون نمیده الا یه ردیف
    مربع.
    البته همین برنامه رو برای LPC2138 نوشتم و روی پروتئوس بستم جواب داد ولی نمی دونم چرا برای 1768 جواب نمیده.

    ( اینم بگم که از هردبرد استفاده می کنم و شروع برنامه رو از طبق دستورالعمل از 0x2000 و در برگه ASM عبارت NO_CRP رو وارد کردم. قبلا هم چند تا برنامه ساده نوشتم و جواب گرفتم.)
    توکامپایل هم ارور نداره.

    به نظرتون مشکل در سیم بندی یا چیز دیگه ایه؟؟ :redface:
    اینم برنامه من:

    لینک دانلود فایل برای تست: http://uploadtak.com/images/g5128_162.rar

    عکس برنامه :



    عکس از مدارم:

    ask One Question

    #2
    پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

    آقا پس کسی نمی دونه؟؟ oo:

    بابا انتظارا بیشتر از این حرفاست .!!

    اشکال نداره.

    حداقل اگه کسی یه برنامه ساده برای LCD16*2 و نحوه ارتباط با پین ها داره رو برام بگذاره. ممنون می شم. :rolleyes:


    ask One Question

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

      سلام.
      من هدر lcd شما رو ندیدم ولی دیگه lcd کاراکتری چیزی نیست که نشه راه اندازیش کرد.
      شما از کنتراست lcd و سیم کشی و همچنین سلامت lcd اطمینان پیدا کن.
      اگه باز هم کار نکرد این هدر رو هم امتحان کن.
      تو این هدر فقط خروجی کردن پایه ها رو باید خودت انجام بدی.
      تغییر پایه ها هم که ابتدای هدر مشخصه.
      کد:
      #ifndef _LCD_INCLUDED_ 
      #define _LCD_INCLUDED_
      
      #define lcd_rs(x) ((x)?(LPC_GPIO0->FIOSET= 1<<0):(LPC_GPIO0->FIOCLR= 1<<0));
      #define lcd_en(x) ((x)?(LPC_GPIO0->FIOSET= 1<<1):(LPC_GPIO0->FIOCLR= 1<<1));
      #define lcd_d4(x) ((x)?(LPC_GPIO0->FIOSET= 1<<2):(LPC_GPIO0->FIOCLR= 1<<2));
      #define lcd_d5(x) ((x)?(LPC_GPIO0->FIOSET= 1<<3):(LPC_GPIO0->FIOCLR= 1<<3));
      #define lcd_d6(x) ((x)?(LPC_GPIO0->FIOSET= 1<<4):(LPC_GPIO0->FIOCLR= 1<<4));
      #define lcd_d7(x) ((x)?(LPC_GPIO0->FIOSET= 1<<5):(LPC_GPIO0->FIOCLR= 1<<5));
      
      #define lcd_cursor_on   0x0e
      #define lcd_cursor_off  0x0c
      #define lcd_cursor_blink 0x0f
      #define lcd_clear     0x01
      #define lcd_home     0x02
      #define lcd_display_off  0x0c
      #define lcd_display_on  0x08
      #define lcd_shift_left  0x18
      #define lcd_shift_right  0x1e
      #define lcd_4bit_mode   0x28
      
      
      const unsigned char UserFont[8][8] = {
       {	 4,4,4,10,10,4,4,4 },
       {32 , 20 , 20 , 20 , 20 , 31 , 32 , 32},
       {32 , 32 , 32 , 21 , 21 , 31 , 32 , 32 },
       {32,21,31,16,16,16,16,32},
       {3,4,15,8,8,8,8,32},
       {32,32,4,10,17,21,10,32},
       {32,4,9,10,6,4,8,8},
       {32,17,17,10,10,4,4,32}
      };
      void delay_us (int d){
      	d*=12;
      	while(d--);
      }
      
      void lcd_init (void){
      char i;
      lcd_cmd(lcd_home);
      lcd_cmd(lcd_4bit_mode);
      lcd_cmd(lcd_display_off);
      lcd_cmd(lcd_display_on);
      lcd_cmd(lcd_cursor_off);
      for(i=0;i<8;i++) lcd_define_char(UserFont[i],i);
      }				
      //************************************************************
      void lcd_cmd(unsigned char c){
      lcd_rs(0); 
      lcd_write(c);
      if(c<3) delay_us(1500);}
      //************************************************************
      void lcd_puts(unsigned char *m){
      unsigned char i;
      i=0;
      while(m[i]!=0){
      lcd_putc(m[i]);
      i++;}}
      //************************************************************
      void lcd_put(int w){
      unsigned char t[17],b;
      int a,c;
      a=w;b=0;
      while(a>9){a=a/10;b++;}
      c=1;
      for(a=0;a<b;a++){c=c*10;}
      for(a=0;a<18;a++){t[a]='\0';}
      a=0;
      while(c!=0){
      t[a]=(w/c)+0x30;
      w=w%c;
      c=c/10;
      a++;}
      lcd_puts(t);}
      //************************************************************
      void lcd_write(unsigned char c){
      lcd_port(c>>4);
      lcd_en(1);
      delay_us(35);
      lcd_en(0);
      lcd_port(c);
      lcd_en(1);
      delay_us(35);
      lcd_en(0);}
      //*************************************************************
      void lcd_gotoxy(unsigned char x,unsigned char y){
      (x-1)?(lcd_cmd(0xc0+y-1)):(lcd_cmd(0x80+y-1));}
      //*************************************************************
      void lcd_port(unsigned char p){
      lcd_d4(p&1);
      lcd_d5((p>>1)&1);
      lcd_d6((p>>2)&1);
      lcd_d7((p>>3)&1);}
      //******************************************************
      void lcd_define_char(const char *pc,char char_code){
        char a,i;
        a=((char_code<<3)|0x40) & 0xff;
        for(i = 0; i < 8 ;i++){
         lcd_cmd(a++);
         lcd_putc(pc[i]);
        }}
      //********************** END LCD.H ****************************
      void lcd_putc(unsigned char a){
      	lcd_rs(1);
      	lcd_write(a);}
      #endif
      تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

        نوشته اصلی توسط mehdi_nxp
        سلام.
        من هدر lcd شما رو ندیدم ولی دیگه lcd کاراکتری چیزی نیست که نشه راه اندازیش کرد.
        :redface: :redface:
        آقا مارو شرمنده کردید. ببخشید سوالم مبتدیانه ( :nerd بود. باز هم ممنون.
        درصورت رفع مشکل خبر میدم.
        ask One Question

        دیدگاه


          #5
          پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

          سلام مجدد.
          ببخشید که قبلا نگفتم از هدر استفاده نمی کردم. ضمنا از ارتباط 8 سیمه استفاده شده.
          LCD هم تازه خریدم.
          یه پروژه جدید باز کردم و اسم این هدر رو mylcd.h گذاشتم و به پروژه ام اضافه کردم.
          این هدر رو اضافه کردم ولی موقع کامپایل کلی ارور داد!!! نمی دونم چرا؟ :cry2: :cry2:




          کد:
          Build target 'Target 1'
          compiling lcd16-2 new.c...
          mylcd.h(40): warning: #223-D: function "lcd_cmd" declared implicitly
          mylcd.h(45): warning: #223-D: function "lcd_define_char" declared implicitly
          mylcd.h(48): error: #159: declaration is incompatible with previous "lcd_cmd" (declared at line 40)
          mylcd.h(50): warning: #223-D: function "lcd_write" declared implicitly
          mylcd.h(57): warning: #223-D: function "lcd_putc" declared implicitly
          mylcd.h(76): error: #159: declaration is incompatible with previous "lcd_write" (declared at line 50)
          mylcd.h(77): warning: #223-D: function "lcd_port" declared implicitly
          mylcd.h(89): error: #159: declaration is incompatible with previous "lcd_port" (declared at line 77)
          mylcd.h(95): error: #159: declaration is incompatible with previous "lcd_define_char" (declared at line 45)
          mylcd.h(100): warning: #223-D: function "lcd_putc" declared implicitly
          mylcd.h(103): error: #159: declaration is incompatible with previous "lcd_putc" (declared at line 57)
          Target not created
          ترسیدم یدفعه..! :eek:
          آقا ببخشید :redface: .... یه مثال خیلی ساده با استفاده از همین هدر می تونید بزنید برای بنده مبتدی :nerd:.
          یه مثال از نحوه استفاده از بعضی از توابعشون.
          مثلا یه تکست رو روی ال سی دی نشون بده.ممنون

          ask One Question

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

            مثلا این جوری:
            کد:
            lcd_init();
            .
            .
            .
            lcd_cmd(lcd_clear);
            lcd_gotoxy(1,1);
            lcd_puts("HEllo");
            اینا رو هم توی هدر بعد از دیفاین ها بذار:
            کد:
            void lcd_init (void);
            void lcd_cmd(unsigned char c);
            void lcd_puts(unsigned char *m);
            void lcd_put(int w);
            void lcd_write(unsigned char c);
            void lcd_gotoxy(unsigned char x,unsigned char y);
            void lcd_port(unsigned char p);
            void lcd_define_char(const char *pc,char char_code);
            void lcd_putc(unsigned char a);
            نمیدونم چرا تو هدر نیستن.
            تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

            دیدگاه


              #7
              پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

              سلام . من هم دقیقا همین مشکل رو با ال سی دی کاراکتری تو LPC1768 دارم ولی روم نمی شد بگم
              با AT91SAM7X قبلا راه انداختم ولی با LPC1768 چندین بار امتحان کردم هم بصورت 8 بیتی هم بصورت 4 بیتی ولی فقط یک ردیف مربع نشون میده !!!!
              اگه کسی بلده لطفا یه سورس کامل بزاره ، ممنون میشم .

              دیدگاه


                #8
                پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                سلام استاد Mehdi_nxp :read:

                ارتباط بین پایه های LCD و میکرو باید اینجوری باشه:

                rs = p0.0
                en = p0.1
                db4 = p0.2
                db5 = p0.3
                db6 = p0.4
                db7 = p0.5

                درست فهمیدم؟؟؟؟

                باید تو برنامه تعیین کنم یا اینکه تو هدر تعیین شده؟ چون تو هدر دیدم که این اتصالات رو ابتدای هدر زده بود ولی یه جاهایی علامت سوال و x بود .

                اول بگم که این توابع که گفتید بعد از define ها بذارم ، گذاشتم و ارور ها برطرف شد. :agree:

                من تو مدارم مثل بالا اتصالات رو برقرار کردم. و برنامه رو ریختم رو میکرو ولی باز هم هیچی غیر از یکردیف مربع نشون نمیده. اینهم کد ساده ای که ریختم رو میکرو.
                کد:
                #include <LPC17xx.H>
                #include "mylcd.h"
                
                
                int main(){
                	
                lcd_init();
                
                lcd_cmd(lcd_clear);
                lcd_gotoxy(1,1);
                lcd_puts("h");
                
                
                while(1);
                	
                	
                	
                	
                	
                	
                }
                ( شاید شما در جوابم بگید پ نه پ ! :icon_razz: ولی من قبلا با AVR و PIC کار کردم و LCD چیز خیلی ساده ای بود اینجا گیر افتادم. از کمک های شما هم ممنونم. امیدوارم خسته تون نکرده باشم با این سولای زاقارتم )
                ask One Question

                دیدگاه


                  #9
                  پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

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

                  دیدگاه


                    #10
                    پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                    نوشته اصلی توسط mehdi_nxp
                    فقط ، قبلا هم گفتم که پایه های استفاده شده رو باید خروجی کنید.
                    و شما این کار رو نکردید.
                    سلام مجدد.
                    اینکار رو هم کردم. برنامه رو ریختم و مدارو دوباره تست کردم.
                    کد:
                    int main(){
                    
                    LPC_GPIO0->FIODIR= 1<<0;
                    LPC_GPIO0->FIODIR= 1<<1;
                    LPC_GPIO0->FIODIR= 1<<2;
                    LPC_GPIO0->FIODIR= 1<<3;
                    LPC_GPIO0->FIODIR= 1<<4;
                    LPC_GPIO0->FIODIR= 1<<5;
                    	
                    	
                    lcd_init();
                    
                    lcd_cmd(lcd_clear);
                    lcd_gotoxy(1,1);
                    lcd_putc('k');
                    	
                    lcd_gotoxy(2,7);
                    	
                    lcd_putc('H');
                    
                    while(1);
                    	
                    	
                    	
                    	
                    	
                    	
                    }
                    باز هم همونه. سیم بندی ها رو هم چند بار عوض کردم و چک کردم. کنتراست LCD رو هم کم وزیاد کردم ولی نشد.
                    باز هم همون ردیف مربعی رو نشون میده. :angry:

                    نمیدونم کجای کارم ایراد داره که این عملکرد مدار ساده رو نمیتونم ببینم. :cry2:

                    توی سایت http://www.ocfreaks.com/interfacing-...2148-tutorial/ خوندم که چون ARM با 3.3 ولت کار میکنه و LCD با 5 ولت باید از یک اینترفیس استفاده کنه که سطح ولتاژ ها رو درست کنه. یک مدار هم درهمون لینک پیشنهاد داده. این حرفش درسته؟؟؟ oo:
                    5V LCD wont operate on 3.3V and also since lpc214x runs on 3.3V and 5Volts might fuse some of its GPIO pin we are gonna need a level shifter or translator that can shift 3.3Volts to 5Volts for LCD Module to be safe. Vikram Sharma M. has successfully interfaced JHD162A with MSP430 MCU using CD4050B IC as explained in his post @ http://msharmavikram.wordpress.com/2012/08/14/3-mistakes-of-lcd-with-msp430-solved/ .

                    Some of the buffers / level shifters than can be used are : SN74AHC244N , SN74AC241N , CD74AC244E , CD4050B , etc.. out of which CD4050B is readily available. I purchased a few HCF4050 which is same as CD4050B except it is manufactured by ST Microelectronics and not Texas Instruments.

                    HCF4050B is a non-inverting Hex Buffer. In our case we’ll be needing 2 of them at minimum since we are going to use 8+2=10 pins from MCU which need to be shifted to 5Volts. There are going to be 8 Data pins and 2 control pins connected from MCU to the LCD Module using 2x HCF4050B.
                    امیدوارم ازاینکه وقتتون رو میگیرم ببخشید منو. :redface:
                    ask One Question

                    دیدگاه


                      #11
                      پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                      شما تغذیه lcd رو بزن به 5 ولت و پایه های lcd رو بدون هیچ واسطه ای به میکرو بده.
                      نیازی به تغیر سطح ولتاژ نیست.

                      یه برنامه ساده (چشمک زن) بریز رو برد ببین کار میکنه یا نه.
                      تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                      دیدگاه


                        #12
                        پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                        نوشته اصلی توسط mehdi_nxp
                        شما تغذیه lcd رو بزن به 5 ولت و پایه های lcd رو بدون هیچ واسطه ای به میکرو بده.
                        نیازی به تغیر سطح ولتاژ نیست.
                        یه برنامه ساده (چشمک زن) بریز رو برد ببین کار میکنه یا نه.
                        تغذیه ام روی 5 ولت است . از خود هدر برد می گیرم. LCD رو هم بدون هیچ واسطه به میکرو وصل کردم( قبلا هم همینجوری وصل کرده بودم.)
                        یه برنامه ساده همین الان ریختم رو میکرو برای چشمک زدن P2.0 و P2.1 . بدرستی کار کرد و مشکلی نبود. :job:

                        چکار کنم استاد؟! :angry:
                        ask One Question

                        دیدگاه


                          #13
                          پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

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

                          دیدگاه


                            #14
                            پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                            ممنون از توجهتون. :agree:

                            اسم پروژه به نام hellolcd و نام هدری که شما بهم دادید رو mylcd گذاشتم.

                            لینک دانلود :

                            http://uploadtak.com/images/a2785_Hellolcd.rar
                            ask One Question

                            دیدگاه


                              #15
                              پاسخ : مشکل در ارتباط lpc1768 با lcd2*16

                              این کار ها رو هم بکن:
                              قبل از lcd_init یه تاخیر در حد 50 میلی ثانیه بذار.
                              و عدد 12 رو توی این قسمت از هدر lcd به 1200 تغییر بده.
                              کد:
                              void delay_us (int d){
                              	d*=12;
                              	while(d--);
                              }
                              تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                              دیدگاه

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