اطلاعیه

Collapse
No announcement yet.

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

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

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

    اینکار رو هم کردم و نشد. :sad:

    آقا مهدی شما خودتون این برنامه رو که براتون پلود کردم تست کردید ببینید جواب میده یا نه؟؟

    یه سوال دیگه: من برنامه ام رو از حافظه 0x2000 به بعد قرار میدم و توی تب ASM عبارت NO_CRP
    رو قرار داده ام. وقتی برنامه می خوام بریزم تو هدربرد کلید های USB ( شماره 2 هدربرد) و USBOT ( شماره 5 هدربرد) رو ON می کنم. وقتی بصورت فلش شناخته شد. برنامه داخلش رو پاک می کنم و فایل hex برنامه ام رو که با نرم افزار H-converter تبدیلش کردم به BIN میریزم داخلش. بعد کابل USB رو قطع می کنم و کلید های 2 و 5 رو دوباره OFF میکنم. و برای تست برنامه و اعمال تغذیه کابل رو به لپتاپ دوباره وصل می کنم. روال همینه دیگه؟؟؟ ایرادی که نیست.؟؟ :question:
    ask One Question

    دیدگاه


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

      این فایل هگز رو بریز ببین کار میکنه.
      اگه نکنه مشکل سخت افزاریه.
      مشکلی از برنامه نیست.
      مشکل از نحوه خروجی کردن پایه هاست.
      این جوری بنویس:
      کد:
      LPC_GPIO0->FIODIR=0xff;
      فایل های پیوست شده
      تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

      دیدگاه


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

        سلام.
        باز هم نشد که نشد. :angry:

        اشکال نداره. اگه تونستم سخت افزارشو درست ببندم و نتیجه درست شد بصورت PM بهتون خبر میدم تا شما هم
        شاد بشید. :mrgreen:

        فکر نمی کنم به صلاح باشه که اینطوری هم وقتتون رو تلف کنم.

        ممنون از لطفتون و ببخشید خسته تون کردم. موفق باشید. :job:
        ask One Question

        دیدگاه


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

          من قبلا اینو نوشتم. البته 4 بیتی و با برد آموزشی. اگر مشکل حل نشده هنوز منم برات بفرستم کدها رو

          دیدگاه


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

            نوشته اصلی توسط ZMXSoft
            من قبلا اینو نوشتم. البته 4 بیتی و با برد آموزشی. اگر مشکل حل نشده هنوز منم برات بفرستم کدها رو
            سلام دوست عزیز.
            فعلا بیخیالش شدم. رفتم سراغ TFT LCD3.2" که جواب هم گرفتم براحتی. :wow:

            ولی خب. اگه داری زحمت بکشی بگذاری برام بهمراه یه توضیح مختصر و شماتیک اتصالات و هدر LCD ممنون میشم.
            ask One Question

            دیدگاه


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

              نوشته اصلی توسط ask110
              سلام خدمت دوستان.

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

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

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

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

              عکس برنامه :



              عکس از مدارم:

              سلام
              من هم مشکل مشابه شما رو داشتم.خیلی سرو کله زدم که ال سی دی کاراکتری متصل کنم به 1768 ولی همش یه ردیف مربع نشون میداد تا اینکه رفتم یه جیلینک خریدم و همون برنامرو دوباره ریختم تو میکرو و کار کرد!!! نمیدونم مشکل کجا بوده!یعنی بخاطر بوت لودر ، ال سی دی کاراکتری کار نمی کرده!!!؟؟؟

              دیدگاه


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

                نوشته اصلی توسط hossein68y

                نمیدونم مشکل کجا بوده!یعنی بخاطر بوت لودر ، ال سی دی کاراکتری کار نمی کرده!!!؟؟؟
                :NO: :NO:

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

                علت اینکه میگم به خاطر بوت لودر نیست اینه که بعد از اون قضیه رفتم سراغ LCD 3.2 گرافیکی و براحتی جواب گرفتم. حتی هدری رو که دانلود کرده بودم یه تابع جدید خودم بهش اضافه کردم و مشکلی نبود. هدربردم هم با بوت لودر استفاده می کنم.

                هنوز روی اون هدری که بصورت 4 بیتی به LCD کاراکتری متصل میشه کار نکردم شاید تو اون مورد جواب گرفتم.
                ask One Question

                دیدگاه


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

                  نمیدونم شایدم به خاطر پروگرامر نباشه.من خودم قبل اینکه ال سی دی کاراکتری بخوام راه بندازم ال سی دی 2.8 اینچی با بوت لودر راه انداخته بودم...

                  دیدگاه


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

                    آقا می دونم که از این بحث خیلی گذشته... :biggrin:
                    ولی یه سوال به نظرتون به نوع فایلتون بستگی نداشته؟ تا جایی که می دونم وقتی با بوت لودر کار می کنی باید فایل bin رو بریزی و دوستمون بعد از خریدن جی لینک مشکلش حل شده فکر کنم مربوط به همین باشه.
                    و یه چیز دیگه در نهایت اینکه چرا خودتون کتاب خونه به این سادگی رو ننوشتید فکر می کنم خیلی بهتر باشه که آدم با کتابخونه خودش کار کنه.

                    دیدگاه


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

                      دوست عزیز مشکلم قبلا حل شد.... بوسیله یک هدر فایلی که از یکی از دوستان گرفتم....
                      این هم هدر فایل :
                      کد:
                      #ifndef lcd_INCLUDED_
                      #define lcd_INCLUDED_
                      
                      #ifdef  LCD_PORT_0
                      #define  PIO_enable   PINSEL0
                      #define  PIO_SetOutput   LPC_GPIO0->FIOSET
                      #define PIO_ClearOutput  LPC_GPIO0->FIOCLR
                      #define PIO_CfgOutput LPC_GPIO0->FIODIR
                      #endif
                      
                      #ifdef  LCD_PORT_1
                      #define  PIO_enable   PINSEL2
                      #define  PIO_SetOutput   LPC_GPIO1->FIOSET
                      #define PIO_ClearOutput LPC_GPIO1->FIOCLR 
                      #define PIO_CfgOutput LPC_GPIO1->FIODIR 
                      #endif
                      
                      #ifdef  LCD_PORT_2
                      #define  PIO_enable   PINSEL4
                      #define  PIO_SetOutput   FIO2SET
                      #define PIO_ClearOutput   FIO2CLR
                      #define PIO_CfgOutput FIO2DIR
                      #endif
                      
                      #ifdef LCD_PORT_3
                       #define  PIO_enable   PINSEL6
                      #define PIO_SetOutput     FIO3SET 
                      #define PIO_ClearOutput   FIO3CLR
                      #define PIO_CfgOutput FIO3DIR
                      #endif
                      
                      #ifdef LCD_PORT_4
                       #define  PIO_enable   PINSEL8
                      #define PIO_SetOutput     FIO4SET
                      #define PIO_ClearOutput   FIO4CLR
                      #define PIO_CfgOutput FIO4DIR
                      #endif
                      
                      #define F_CPU  12000000
                      
                      #define clcd_minDelay()  cwait(F_CPU/80000)
                      #define clcd_Delay()  cwait(F_CPU/8000)
                      
                      void lcd_init(void);
                      void cwait (volatile int t);
                      void lcd_putchar(char ch);
                      void lcd_command(char cmd);
                      void lcd_gotoxy(char x, char y);
                      void lcd_clear(void);
                      void lcd_clear_line(char y);
                      void lcd_shift_left(char n);
                      void lcd_shift_right(char n);
                      void lcd_puts(int num);
                      void lcd_putsf(char* data);
                      void lcd_define_char(const char *pc,char char_code);
                      //=========================================================
                      void cwait (volatile int t) {
                       for (;t; t--);
                      }
                      // ============================================================================
                      void setD4567(char val)
                      {
                        PIO_ClearOutput =((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
                        if (val & 0x80)
                         PIO_SetOutput =(1<<LCD_DB7)  ;
                        if (val & 0x40)
                         PIO_SetOutput =(1<<LCD_DB6);
                        if (val & 0x20)
                        PIO_SetOutput =(1<<LCD_DB5);
                        if (val & 0x10)
                        PIO_SetOutput =(1<<LCD_DB4);
                      }
                      // ============================================================================
                      void lcd_putchar(char ch)
                      {
                        PIO_SetOutput =(1<<LCD_RS);
                        setD4567(ch);
                        PIO_SetOutput=(1<<LCD_E);
                        clcd_minDelay();
                        PIO_ClearOutput=(1<<LCD_E);
                        clcd_minDelay();
                        setD4567(ch<<4);
                        PIO_SetOutput=(1<<LCD_E);
                        clcd_minDelay();
                      PIO_ClearOutput=(1<<LCD_E);
                        clcd_Delay();
                      }
                      // ============================================================================
                      void lcd_command(char cmd)  //Sends Command to LCD
                      {
                        PIO_ClearOutput=(1<<LCD_RS);
                        setD4567(cmd);
                        PIO_SetOutput =(1<<LCD_E);
                        clcd_minDelay();
                        PIO_ClearOutput=(1<<LCD_E);
                        clcd_minDelay();
                        setD4567(cmd<<4);
                        PIO_SetOutput =(1<<LCD_E);
                        clcd_minDelay();
                        PIO_ClearOutput =(1<<LCD_E);
                        clcd_Delay();
                      }
                      // ============================================================================
                      void lcd_init()
                      {
                        //PIO_enable =0X00;
                        PIO_CfgOutput = ((1<<LCD_RS)|(1<<LCD_E)|(1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
                        clcd_Delay();
                        setD4567(0);
                        setD4567((1<<5)|(1<<4));
                      PIO_SetOutput=(1<<LCD_E);
                        clcd_minDelay();
                      PIO_ClearOutput =(1<<LCD_E);
                        clcd_Delay();
                        setD4567((1<<5)|(1<<4));
                        PIO_SetOutput =(1<<LCD_E);
                        clcd_minDelay();
                        PIO_ClearOutput =(1<<LCD_E);
                        clcd_Delay();
                        setD4567(1<<5);
                        PIO_SetOutput =(1<<LCD_E);
                        clcd_minDelay();
                        PIO_ClearOutput =(1<<LCD_E);
                        clcd_Delay();
                        lcd_command(0x28);
                        lcd_command(0x0c);
                        clcd_Delay();
                      }
                      //*******************************************************
                      void lcd_gotoxy(char y, char x)  //Cursor to X Y position
                      {
                        char DDRAMAddr;
                      x=x-1;
                        switch(y)
                        {
                         case 1: DDRAMAddr = 0x00+x; break;
                         case 2: DDRAMAddr = 0x40+x; break;
                         case 3: DDRAMAddr = 0x14+x; break;
                         case 4: DDRAMAddr = 0x54+x; break;
                         default: DDRAMAddr = 0x00+x;
                        }
                        lcd_command(1<<7 | DDRAMAddr);
                      }
                      // ============================================================================
                      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_command(a++);
                         clcd_Delay();
                         lcd_putchar(pc[i]);
                         clcd_Delay();
                        }
                      }
                      // ============================================================================
                      void lcd_clear(void)      //Clears LCD
                      {
                        lcd_command(0x01);
                      lcd_command(0x02);
                        clcd_Delay();
                        clcd_Delay();
                        clcd_Delay();
                      }
                      //============================================================
                      void lcd_shift_left(char n)  //Scrol n of characters Right
                      {
                        char i;
                        for (i = 0 ; i < n ; i++)
                        {
                         lcd_command(0x1E);
                         clcd_Delay();
                        }
                      }
                      //========================================================
                      void lcd_shift_right(char n)  //Scrol n of characters Left
                      {
                        char i;
                        for (i = 0 ; i < n ; i++)
                        {
                         lcd_command(0x18);
                         clcd_Delay();
                        }
                      }
                      //============================================================================
                       void lcd_puts(int num)
                      {
                        int i,j;
                        int p,f=0;
                        char ch[5];
                       for(i=0;i<5;i++)
                        {
                         p=1;
                         for(j=4-i;j>0;j--)
                          p = p*10;
                         ch[i] = (num/p);
                        if (num>=p && !f){
                         f=1;
                        }
                         num =num - ch[i] *p ;
                        ch[i] = ch[i] +48;
                         if(f) lcd_putchar(ch[i]);
                        }
                      }
                      // ============================================================================
                      void lcd_putsf(char* data)  //Outputs string to LCD
                      {
                        char *p;
                        p = data;
                        if (!p)
                         return;
                        for(; *p ; )
                        {
                         lcd_putchar(*p);
                         p++;
                        }
                      }
                      //=============================================================
                      void Display_off(void)
                      {
                        lcd_command(0x08);
                        clcd_Delay();
                      }
                      //=============================================================
                      void Display_on(void)
                      {
                        lcd_command(0x0C);
                        clcd_Delay();
                      }
                      //=============================================================
                      void cursor_off(void)
                      {
                        lcd_command(0x0C);
                        clcd_Delay();
                      }
                      //=============================================================
                      void cursor_on(void)
                      {
                        lcd_command(0x0E);
                        clcd_Delay();
                      }
                      //=============================================================
                      void cursor_blink(void)
                      {
                        lcd_command(0x0F);
                        clcd_Delay();
                      }
                      #endif
                      ask One Question

                      دیدگاه


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

                        نوشته اصلی توسط ask110
                        دوست عزیز مشکلم قبلا حل شد.... بوسیله یک هدر فایلی که از یکی از دوستان گرفتم....
                        این هم هدر فایل :
                        کد:
                        #ifndef lcd_INCLUDED_
                        #define lcd_INCLUDED_
                        
                        #ifdef  LCD_PORT_0
                        #define  PIO_enable   PINSEL0
                        #define  PIO_SetOutput   LPC_GPIO0->FIOSET
                        #define PIO_ClearOutput  LPC_GPIO0->FIOCLR
                        #define PIO_CfgOutput LPC_GPIO0->FIODIR
                        #endif
                        
                        #ifdef  LCD_PORT_1
                        #define  PIO_enable   PINSEL2
                        #define  PIO_SetOutput   LPC_GPIO1->FIOSET
                        #define PIO_ClearOutput LPC_GPIO1->FIOCLR 
                        #define PIO_CfgOutput LPC_GPIO1->FIODIR 
                        #endif
                        
                        #ifdef  LCD_PORT_2
                        #define  PIO_enable   PINSEL4
                        #define  PIO_SetOutput   FIO2SET
                        #define PIO_ClearOutput   FIO2CLR
                        #define PIO_CfgOutput FIO2DIR
                        #endif
                        
                        #ifdef LCD_PORT_3
                         #define  PIO_enable   PINSEL6
                        #define PIO_SetOutput     FIO3SET 
                        #define PIO_ClearOutput   FIO3CLR
                        #define PIO_CfgOutput FIO3DIR
                        #endif
                        
                        #ifdef LCD_PORT_4
                         #define  PIO_enable   PINSEL8
                        #define PIO_SetOutput     FIO4SET
                        #define PIO_ClearOutput   FIO4CLR
                        #define PIO_CfgOutput FIO4DIR
                        #endif
                        
                        #define F_CPU  12000000
                        
                        #define clcd_minDelay()  cwait(F_CPU/80000)
                        #define clcd_Delay()  cwait(F_CPU/8000)
                        
                        void lcd_init(void);
                        void cwait (volatile int t);
                        void lcd_putchar(char ch);
                        void lcd_command(char cmd);
                        void lcd_gotoxy(char x, char y);
                        void lcd_clear(void);
                        void lcd_clear_line(char y);
                        void lcd_shift_left(char n);
                        void lcd_shift_right(char n);
                        void lcd_puts(int num);
                        void lcd_putsf(char* data);
                        void lcd_define_char(const char *pc,char char_code);
                        //=========================================================
                        void cwait (volatile int t) {
                         for (;t; t--);
                        }
                        // ============================================================================
                        void setD4567(char val)
                        {
                          PIO_ClearOutput =((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
                          if (val & 0x80)
                           PIO_SetOutput =(1<<LCD_DB7)  ;
                          if (val & 0x40)
                           PIO_SetOutput =(1<<LCD_DB6);
                          if (val & 0x20)
                          PIO_SetOutput =(1<<LCD_DB5);
                          if (val & 0x10)
                          PIO_SetOutput =(1<<LCD_DB4);
                        }
                        // ============================================================================
                        void lcd_putchar(char ch)
                        {
                          PIO_SetOutput =(1<<LCD_RS);
                          setD4567(ch);
                          PIO_SetOutput=(1<<LCD_E);
                          clcd_minDelay();
                          PIO_ClearOutput=(1<<LCD_E);
                          clcd_minDelay();
                          setD4567(ch<<4);
                          PIO_SetOutput=(1<<LCD_E);
                          clcd_minDelay();
                        PIO_ClearOutput=(1<<LCD_E);
                          clcd_Delay();
                        }
                        // ============================================================================
                        void lcd_command(char cmd)  //Sends Command to LCD
                        {
                          PIO_ClearOutput=(1<<LCD_RS);
                          setD4567(cmd);
                          PIO_SetOutput =(1<<LCD_E);
                          clcd_minDelay();
                          PIO_ClearOutput=(1<<LCD_E);
                          clcd_minDelay();
                          setD4567(cmd<<4);
                          PIO_SetOutput =(1<<LCD_E);
                          clcd_minDelay();
                          PIO_ClearOutput =(1<<LCD_E);
                          clcd_Delay();
                        }
                        // ============================================================================
                        void lcd_init()
                        {
                          //PIO_enable =0X00;
                          PIO_CfgOutput = ((1<<LCD_RS)|(1<<LCD_E)|(1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
                          clcd_Delay();
                          setD4567(0);
                          setD4567((1<<5)|(1<<4));
                        PIO_SetOutput=(1<<LCD_E);
                          clcd_minDelay();
                        PIO_ClearOutput =(1<<LCD_E);
                          clcd_Delay();
                          setD4567((1<<5)|(1<<4));
                          PIO_SetOutput =(1<<LCD_E);
                          clcd_minDelay();
                          PIO_ClearOutput =(1<<LCD_E);
                          clcd_Delay();
                          setD4567(1<<5);
                          PIO_SetOutput =(1<<LCD_E);
                          clcd_minDelay();
                          PIO_ClearOutput =(1<<LCD_E);
                          clcd_Delay();
                          lcd_command(0x28);
                          lcd_command(0x0c);
                          clcd_Delay();
                        }
                        //*******************************************************
                        void lcd_gotoxy(char y, char x)  //Cursor to X Y position
                        {
                          char DDRAMAddr;
                        x=x-1;
                          switch(y)
                          {
                           case 1: DDRAMAddr = 0x00+x; break;
                           case 2: DDRAMAddr = 0x40+x; break;
                           case 3: DDRAMAddr = 0x14+x; break;
                           case 4: DDRAMAddr = 0x54+x; break;
                           default: DDRAMAddr = 0x00+x;
                          }
                          lcd_command(1<<7 | DDRAMAddr);
                        }
                        // ============================================================================
                        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_command(a++);
                           clcd_Delay();
                           lcd_putchar(pc[i]);
                           clcd_Delay();
                          }
                        }
                        // ============================================================================
                        void lcd_clear(void)      //Clears LCD
                        {
                          lcd_command(0x01);
                        lcd_command(0x02);
                          clcd_Delay();
                          clcd_Delay();
                          clcd_Delay();
                        }
                        //============================================================
                        void lcd_shift_left(char n)  //Scrol n of characters Right
                        {
                          char i;
                          for (i = 0 ; i < n ; i++)
                          {
                           lcd_command(0x1E);
                           clcd_Delay();
                          }
                        }
                        //========================================================
                        void lcd_shift_right(char n)  //Scrol n of characters Left
                        {
                          char i;
                          for (i = 0 ; i < n ; i++)
                          {
                           lcd_command(0x18);
                           clcd_Delay();
                          }
                        }
                        //============================================================================
                         void lcd_puts(int num)
                        {
                          int i,j;
                          int p,f=0;
                          char ch[5];
                         for(i=0;i<5;i++)
                          {
                           p=1;
                           for(j=4-i;j>0;j--)
                            p = p*10;
                           ch[i] = (num/p);
                          if (num>=p && !f){
                           f=1;
                          }
                           num =num - ch[i] *p ;
                          ch[i] = ch[i] +48;
                           if(f) lcd_putchar(ch[i]);
                          }
                        }
                        // ============================================================================
                        void lcd_putsf(char* data)  //Outputs string to LCD
                        {
                          char *p;
                          p = data;
                          if (!p)
                           return;
                          for(; *p ; )
                          {
                           lcd_putchar(*p);
                           p++;
                          }
                        }
                        //=============================================================
                        void Display_off(void)
                        {
                          lcd_command(0x08);
                          clcd_Delay();
                        }
                        //=============================================================
                        void Display_on(void)
                        {
                          lcd_command(0x0C);
                          clcd_Delay();
                        }
                        //=============================================================
                        void cursor_off(void)
                        {
                          lcd_command(0x0C);
                          clcd_Delay();
                        }
                        //=============================================================
                        void cursor_on(void)
                        {
                          lcd_command(0x0E);
                          clcd_Delay();
                        }
                        //=============================================================
                        void cursor_blink(void)
                        {
                          lcd_command(0x0F);
                          clcd_Delay();
                        }
                        #endif
                        آره منم از همین استفاده کردم ولی برای بعضی از lcd ها کار نمی کرد که مجبور شدم تو تابع init یه delay کوچیک بزارم که بعدش درست شد.
                        ممنونم.

                        دیدگاه

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