اطلاعیه

Collapse
No announcement yet.

تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

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

    تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

    سلام دوستان
    من چند روزی هست بدنبال یک اموزش جامع راجع به راه اندازی LCD به کمک (flexible static memory controller)FSMC هستم اما نتونستم چیز دقیقی گیر بیارم و برام گنگ بود.
    LCD مورد نظر ما مدل N96 معروف هست که 2.8 اینچ هست و درایور ILI9325 داره
    از اونجا که باید به صورت 16 بیت راه اندازی بشه من هرچی مثال دیدم و لایبرری به صورت 8 بیت بوده .
    و اینکه چطوری باید ال سی دی را با FSMC راه انداخت؟
    هدف نهایی هم اضافه کردن emwin به این ال سی دی هست .اما فعلا اینجا گیر افتادم .
    دوستانی که تونستن این ال سی دی رو به کمک FSMC راه اندازی کنن یا راهنمایی دارید ممنون میشم به اشتراک بزارید.
    میکرو مورد استفاده هم STM32F407 هست.(بورد دیسکاوری)

    #2
    پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

    من مشکلی با راه اندازی
    FSMC ندارم . lcd وقتی با emwin راه اندازی میکنم توی gui_init گیر میکنه

    دیدگاه


      #3
      پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

      سلام خوب هستید مهندس؟
      شما هم lcd 2.8 " رو با FSMC راه اندازی کردید؟

      دیدگاه


        #4
        پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

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

        دیدگاه


          #5
          پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

          ممنون .لطف میکنید.از الان منتظر فردا هستم

          دیدگاه


            #6
            پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

            به صورت ساده بگم
            اول تنظیمات FSMC انجام بده مثل این

            /* FSMC initialization function */
            static void MX_FSMC_Init(void)
            {
            FSMC_NORSRAM_TimingTypeDef Timing;


            /** Perform the SRAM1 memory initialization sequence
            */
            hsram1.Instance = FSMC_NORSRAM_DEVICE;
            hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
            /* hsram1.Init */
            hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
            hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
            hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
            hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
            hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
            hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
            hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
            hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
            hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
            hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
            hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
            hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
            hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
            /* Timing */
            Timing.AddressSetupTime = 15;
            Timing.AddressHoldTime = 15;
            Timing.DataSetupTime = 255;
            Timing.BusTurnAroundDuration = 15;
            Timing.CLKDivision = 16;
            Timing.DataLatency = 17;
            Timing.AccessMode = FSMC_ACCESS_MODE_A;
            /* ExtTiming */


            if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
            {
            _Error_Handler(__FILE__, __LINE__);
            }


            /** Disconnect NADV
            */


            __HAL_AFIO_FSMCNADV_DISCONNECTED();


            }



            بعدش برو توی هر کتابخانه ای که داری و مال هر نوع LCD هست . دو تا تابع داره


            define LCD_REG (*((volatile unsigned short *) 0x60000000)) /* RS = 0
            define LCD_RAM (*((volatile unsigned short *) 0x60020000)) /* RS = 1

            void LCD_WR_REG(uint16_t LCD_Reg)
            {
            // RD_SET; /*???*/
            // CS_CLR; /*??*/
            // RS_CLR; /*0????*/
            // DataToWrite(LCD_Reg);
            // WR_CLR;
            // WR_SET; /*?????*/
            // CS_SET;
            LCD_REG = LCD_Reg;

            }
            ////////////////////////////////////////////////////
            void LCD_WR_DATA(uint16_t LCD_Data)
            {
            // RD_SET; /*???*/
            // CS_CLR;
            // RS_SET; /*1????*/
            // DataToWrite(LCD_Data);
            // WR_CLR;
            // WR_SET; /*?????*/
            // CS_SET;
            LCD_RAM = LCD_Data;

            }


            فکر کنم متوجه شده باشی چی شد .
            این برای STM32F103 هست
            تست کن . خبرشو بده .
            جدیدترین ویرایش توسط sepehr63; ۰۸:۳۱ ۱۳۹۶/۱۰/۰۶.

            دیدگاه


              #7
              پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

              سلام ممنون از پاسختون.
              من ابتدا داخل stm32cube ,تیک FSMC را میزنم روی مد 16 بیت برای LCD interface .,خوب پایه های RD, WR , RS را به کجا وصل کنم؟هر GPIO که شد؟
              2-من کتابخانه LCD N96 که داخل انجمن هم هست که اقای ایمانی فر تهیه کردند رو دارم.داخل اون این دو تا تابع هست:
              lcd_write_index_register( )
              lcd_write_wdr( )

              داخل کتابخانه هم چون برای AVR نوشته شده به این شکل هست .سوال اصلیم اینه چطوری این دو تا تابع رو بیارم بر بستر fsmc?
              مثلا به این شکل هست:
              کد:
              void lcd_write_index_register(char ins)
                  {
                  CS_LOW;
                  RS_LOW;
                  LCD_DATAPORT_MSB_PORT=0x00; 
                  LCD_DATAPORT_LSB_PORT=ins;
                  WR_LOW; 
                  WR_HIGH;
                  CS_HIGH;        
                  }
              و مثلا شما خودتون تابع
              کد:
              [COLOR=#008200][FONT=Consolas]DataToWrite(LCD_Reg);[/FONT][/COLOR]
              رو کجا تعریف کردید؟

              ببخشید یکم زیاد شد اخه همین ها باعث سردرگمی شده برام

              دیدگاه


                #8
                پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                نه خواهش میکنم . سوالاتی بوده که خودم هم تو انجمن پرسیدم.
                شما دستورات توی این تابع کلا پک کن اینجوری بنویس

                void lcd_write_index_register(char ins)
                {
                LCD_REG = ins
                ; }




                FSMC_NOE = RD
                FSMC_NWE=WR
                FSMC_NE1=CS

                دیدگاه


                  #9
                  پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                  خیلی ممنونم از راهنماییهاتون .
                  فقط لطفا این دو مورد را بهم توضیح میدید چون داخل دیگر انجمن ها هم از این دستور استفاده کرده بودند اما من دلیلش را متوجه نشدم.
                  کد:
                  [COLOR=#28282B][FONT=Consolas]define LCD_REG              (*((volatile unsigned short *) 0x60000000)) /* RS = 0 [/FONT][/COLOR]
                  [COLOR=#28282B][FONT=Consolas]define LCD_RAM              (*((volatile unsigned short *) 0x60020000)) /* RS = 1 [/FONT][/COLOR]
                  [COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR]
                  و اینکه پایه های CS,RD,RW را به این پایه ها وصل کردید ایا منظور همان پروتکل 8080 هست دیگه؟
                  و یدونه سوال اخر اینکه: در صورت استفاده از FSMC و مواردی که شما فرمودید دیگه نیاز نیست به صورت دستی کنترل پایه های RD,CS,WR را دوباره در دست بگیریم؟و خود FSMC همه کارا رو انجام میده؟

                  دیدگاه


                    #10
                    پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                    پایه RST مربوط به LCD را باید به کدوم پایه وصل کنیم؟
                    داخل کتابخانه LCD که اقای دهقان گذاشته بودن اینطور تعریف شده بودن مواردی که شما بالا ذکر کردید.حالا باید دوباره تغییرشون بدم به همون شکلی که شما نوشتید؟
                    در کتابخانه موجود:
                    کد:
                    typedef struct
                    {
                    	u16 LCD_REG;
                    	u16 LCD_RAM;
                    } LCD_TypeDef;
                    کدی که شما گفتید:
                    کد:
                    [COLOR=#28282B][FONT=Consolas]define LCD_REG              (*((volatile unsigned short *) 0x60000000)) /* RS = 0 [/FONT][/COLOR]
                    [COLOR=#28282B][FONT=Consolas]define LCD_RAM              (*((volatile unsigned short *) 0x60020000)) /* RS = 1 [/FONT][/COLOR]
                    کدامش درسته؟!

                    دیدگاه


                      #11
                      پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                      پایه ریست یا به مثبت بزن یا به پایه ریست میکرو که وقتی کلید زدی هم میکرو ریست بشه و هم lcd و یا به یکی از پین های میکرو بزن که وقتی به تابع lcd init رفتی یک لحظه این پایه 0 و بعد 1 کنه تا ریست بشه

                      دیدگاه


                        #12
                        پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                        نوشته اصلی توسط sepehr63 نمایش پست ها
                        بعدش برو توی هر کتابخانه ای که داری و مال هر نوع LCD هست . دو تا تابع داره
                        1
                        2
                        3
                        4
                        5
                        6
                        7
                        8
                        9
                        10
                        11
                        12
                        13
                        14
                        15
                        16
                        17
                        18
                        19
                        20
                        21
                        22
                        23
                        24
                        25
                        26
                        27
                        28
                        29
                        30

                        define LCD_REG (*((volatile unsigned short *) 0x60000000)) /* RS = 0
                        define LCD_RAM (*((volatile unsigned short *) 0x60020000)) /* RS = 1

                        void LCD_WR_REG(uint16_t LCD_Reg)
                        {
                        // RD_SET; /*???*/
                        // CS_CLR; /*??*/
                        // RS_CLR; /*0????*/
                        // DataToWrite(LCD_Reg);
                        // WR_CLR;
                        // WR_SET; /*?????*/
                        // CS_SET;
                        LCD_REG = LCD_Reg;

                        }
                        ////////////////////////////////////////////////////
                        void LCD_WR_DATA(uint16_t LCD_Data)
                        {
                        // RD_SET; /*???*/
                        // CS_CLR;
                        // RS_SET; /*1????*/
                        // DataToWrite(LCD_Data);
                        // WR_CLR;
                        // WR_SET; /*?????*/
                        // CS_SET;
                        LCD_RAM = LCD_Data;

                        }


                        فکر کنم متوجه شده باشی چی شد .
                        این برای STM32F103 هست
                        تست کن . خبرشو بده .
                        عالی بود! عالییییییییییییییییییییییی
                        ممنوننننننننن

                        دیدگاه


                          #13
                          پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                          سلام من یک lcd ssd1289 خریدم و با برد کاتالیست eca وقتی پروژه فروشگاه لود میکنم خوب کار میکنه ولی همین کتابخونه با توجه به فرمایشات شما سعی کردم با کتابخونه hal راه بندازم بانک روی ne4 و A10 که طبق pcb برد هست تو کیوب تنطیم کزدم fsmc رو ...ولی عجیب هر کاری میکنم ایندفعه راه نمیفته میشه راهنمایی بفرمایید ممنون میشم

                          دیدگاه


                            #14
                            پاسخ : تاپیک جامع راه اندازی LCD 2.8 ILI9325 به کمک FSMC

                            نوشته اصلی توسط AMIN.ENG3 نمایش پست ها
                            سلام من یک lcd ssd1289 خریدم و با برد کاتالیست eca وقتی پروژه فروشگاه لود میکنم خوب کار میکنه ولی همین کتابخونه با توجه به فرمایشات شما سعی کردم با کتابخونه hal راه بندازم بانک روی ne4 و A10 که طبق pcb برد هست تو کیوب تنطیم کزدم fsmc رو ...ولی عجیب هر کاری میکنم ایندفعه راه نمیفته میشه راهنمایی بفرمایید ممنون میشم
                            دوستان من هم همین مشکل رو دارم
                            کسی تونسته با stm32 و HAL و FSMC یدونه LCD با درایور ssd1289 رو راه اندازی کنه؟
                            اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
                            شهيد دکتر مصطفي چمران
                            اللهم صل علي محمد و ال محمد و عجل فرجهم
                            ; C is not for children

                            دیدگاه

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