NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3045 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 16 از 16

موضوع: اشکال رنگ بندی در راه اندازی السیدی 7 اینچ تحت emwin با برد آموزشی stm32f103vet6 کویر

  1. #1
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    Gadid اشکال رنگ بندی در راه اندازی السیدی 7 اینچ تحت emwin با برد آموزشی stm32f103vet6 کویر

    با سلام
    بنده برد آموزشی stm32f103vet6 رو که درایور ssd1963 رو داره برای راه اندازی emwin و السیدی 7 اینچ خریداری کردم. ورژن 5.16 که توی cd آموزشی همراه برد بود که شامل ucos هم بود روی برد پرگرام کردم و
    ورژن 5.24 emwin رو راه اندازی کردم. ولی مشکل در سیستم تنظیمات رنگ وجود داره . مثلا با تنظیم رنگ قرمز ، رنگ سبز روی صفحه نمایش نشون داده میشه!!
    در ضمن رنگ خوانده شده توسط تابع LCD_X_8080_16_ReadM01_16 فقط سیاه می باشد و به این علت کرسر روی صفحه با حرکت روی تصویر رنگ سیاه از خود به جا میگذارد.
    لطفا راهنمایی بفرمایید. فایلهای تنظیمات مربوط به emwin و lcd رو ضمیمه کردم تا بتواند در بررسی کمک کند.

    SSD1963_lcdconf.zip

    تنظیمات زیر رو برای السیدی در LCDConf.c انجام دادم

    کد:
    #define XSIZE_PHYS 800
    #define YSIZE_PHYS 480
    #define COLOR_CONVERSION GUICC_M565
    #define DISPLAY_DRIVER GUIDRV_FLEXCOLOR
    
    void LCD_X_Config(void) {
      GUI_DEVICE * pDevice;
      GUI_PORT_API PortAPI = {0};
      CONFIG_FLEXCOLOR Config = {0};
    
      //
      // Set display driver and color conversion for 1st layer
      //
      pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
      //
      // Display driver configuration
      //
          Config.Orientation = DISPLAY_ORIENTATION;    
          Config.RegEntryMode  = 0;
            Config.NumDummyReads=2;
            Config.FirstCOM=1;
        GUIDRV_FlexColor_Config(pDevice, &Config);
     
       if (LCD_GetSwapXY()) {
        LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
     
      } else {
        LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
     
      }        
      LCD_SetVRAMAddrEx(0, (void *)0xc00000);   // Video RAM start address    
     
      //GUIDRV_FlexColor_SetInterface();
     // GUIDRV_FlexColor_SetReadFunc();
      GUIDRV_FlexColor_SetReadFunc66720_B16(pDevice,GUIDRV_FLEXCOLOR_READ_FUNC_II);
        
    
      //
      // Function selection, hardware routines (PortAPI) and operation mode (bus, bpp and cache)
      //
        PortAPI.pfWrite16_A0  = LCD_X_8080_16_Write00_16;
        PortAPI.pfWrite16_A1  = LCD_X_8080_16_Write01_16;
        PortAPI.pfWriteM16_A0 = LCD_X_8080_16_WriteM00_16;
        PortAPI.pfWriteM16_A1 = LCD_X_8080_16_WriteM01_16;
        PortAPI.pfRead16_A0   = LCD_X_8080_16_Read00_16;
        PortAPI.pfRead16_A1   = LCD_X_8080_16_Read01_16;
        PortAPI.pfReadM16_A0  = LCD_X_8080_16_ReadM00_16;
        PortAPI.pfReadM16_A1  = LCD_X_8080_16_ReadM01_16;
      
      GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720,GUIDRV_FLEXCOLOR_M16C0B16);// GUIDRV_FLEXCOLOR_M16C0B16);
      
    }

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    سلام توابع خوندن از ssd رو دوباره بررسی کن.
    LCD_X_8080_16_Read00_16;
    LCD_X_8080_16_Read01_16;
    LCD_X_8080_16_ReadM00_16;
    LCD_X_8080_16_ReadM01_16;

  4. تشکرها از این نوشته :


  5. #3
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    ممنون از جوابتون
    فایل LCD_X_8080_16.c رو که این 4 تا تابع رو پیاده سازی کرده توی فایلهای ضمیمه گذاشتم . ممکنه اگه ایرادی داره بفرمایید. دیگه نمیدونم چیکار کنم ؟ از طریق ST-Link و کیل هم برنامه رو دیباگ کردم دقیقا نتایج تابع LCD_X_8080_16_ReadM01_16 رو بررسی کردم ولی هر بار خروجی صفر رو میگیرم . جالبه که توابع دیگر که شما هم ذکر کردین البته به غیر از LCD_X_8080_16_ReadM01_16 در طول اجرای برنامه مورد استفاده قرار نمیگیرند. یعنی با وجود فعال کردن breakpoint در آن توابع پوینتر اجرای برنامه اصلا در آن توابع توقف نمیکند . حالا شاید بنده درست تنظیمشان نکرده باشم.
    تابع LCD_X_8080_16_ReadM00_16 برای خواندن رجیستر استفاده میشه ولی من توی فایل ssd1963.c تابعی برای خواندن رجیستر پیدا نکردم که بتونم به آن نسبت بدم. لطفا راهنمایی بفرمایید

  6. #4
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    این دوتا دستور رو در توابع خواندن از روی ssd1963 فعال کن:
    Lcd_clr_a0
    lcd_set_a0
    اگه در مد fsmc جواب نگرفتی با gpio راه اندازی کن.
    ویرایش توسط mohammadne : 24-12-2015 در ساعت 17:34

  7. تشکرها از این نوشته :


  8. #5
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    والا این دو تا دستور رو میخوام توی فایل ssd1963.c در تابع LCD_RD_data اضافه کنم اما نمیشناسه و خطا میده . ممکنه بفرمایید منظور از a0 چیه ؟ و این دوتا دستور قرار چیکار کنند؟ تابع اونها رو برام میفرستید؟
    با gpio خیلی کند میشه .

    ممنون

  9. #6
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    درسته با GPIO کند میشه اما در عوض مشکل برنامتو پیدا میکنی.
    این دوتا دستور که نیاز به تابع ندارن، فقط برای 0 یا 1 پین RS به منظور انتخاب نوشتن روی رجیستر یا دیتا به کار میرن.
    وقتی میخای از دیتا بخونی این پین باید 1 باش.
    داخل emWIN فقط دستور LCD_X_8080_16_ReadM01_16 اجرا میشه .

    این دوتا تابع رو جایگذین کن ببین جواب میده. هدر GPIO رو بالا فراخوانی کن ، پورت و پین RS رو هم داخل دوتا تابع بذار
    کد:
    u16 LCD_X_8080_16_Read01_16(void) { U16 c; GPIO_SetBits(GPIOx,GPIO_Pin); c=LCD_RD_data(); return c; } void LCD_X_8080_16_ReadM01_16(u16 * pData, int NumWords) { GPIO_SetBits(GPIOx,GPIO_Pin); for (; NumWords; NumWords--) { *pData=LCD_X_8080_16_Read01_16(); pData++; } }

  10. تشکرها از این نوشته :


  11. #7
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    جواب نداد . مثل اینکه در حالت fsmc چونکه پین ها در موقع تنظیم در مد GPIO_Mode_AF_PP تنظیم شده اند قابل تغییر نیستند . در حالت fsmc راهی هست تا بشه پایه مورد نظر رو تغییر داد؟ یا اینکه باید در حالت gpio تنظیم شود .
    ممنون

  12. #8
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    این دو دستور برای صفر و یک کردن در حالت GPIO هستن.

    کد:
    GPIO_SetBits(GPIOx,GPIO_Pin);
    GPIO_ResetBits(GPIOx,GPIO_Pin);

  13. #9
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    من هم از این دو تا دستور برای یک کردن و صفر کردن پایه RS استفاده کردم ولی تاثیر نداشته . در ضمن آیا وقتی پایه های مورد نظر در حالت GPIO_Mode_AF_PP تنظیم شده باشند ، تغییر وضعیت پین ها امکان پذیر هستش یا خیر ؟
    ممنون

  14. #10
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    الان میخوام ssd1963 رو در حالت gpio درایو کنم . منتها یه مشکلی که وجود داره اینه که پایه های lcd به پایه های متفاوتی از میکرو وصل شده .
    LCD_D0->D14
    LCD_D1->D15
    LCD_D2->D0
    LCD_D3->D1
    LCD_D4->E7
    LCD_D5->E8
    LCD_D6->E9
    LCD_D7->E10
    LCD_D8->E11
    LCD_D9->E12
    LCD_D10->E13
    LCD_D11->E14
    LCD_D12->E15
    LCD_D13->D8
    LCD_D14->D9
    LCD_D15->D10
    برای خوندن از LCD تابع رو به صورت زیر تغییر دادم

    کد:
    unsigned int LCD_RD_data(void){
        unsigned int a=0,b=0;
    
            
      GPIO_InitTypeDef GPIO_InitStructure;
        
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |  GPIO_Pin_14 |  GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOD, &GPIO_InitStructure);
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | 
                                    GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | 
                                    GPIO_Pin_15;
      GPIO_Init(GPIOE, &GPIO_InitStructure); 
                 
        Clr_Cs;
        Set_Rs;    
        Clr_nRd;//TFTLCD_RD_LOW;
        Clr_nWr;
        Set_nWr;//TFTLCD_WR_HIGH;
        LCD_DelayUs(100);
        a |= GPIO_ReadInputData(GPIOE);
        a >>=3;
        a &=0x1ff0;
        b = GPIO_ReadInputData(GPIOD);
         
        a=a|( (b&GPIO_Pin_14)|(b&GPIO_Pin_15)<<1 | (b&GPIO_Pin_0)<<2 | (b&GPIO_Pin_1)<<3 | (b&GPIO_Pin_8)<<13 | (b&GPIO_Pin_9)<<14 | (b&GPIO_Pin_10)<<15);
        Set_nRd;
        Set_Cs;
    
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |  GPIO_Pin_14 |  GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_Init(GPIOD, &GPIO_InitStructure);
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | 
                                    GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | 
                                    GPIO_Pin_15;
      GPIO_Init(GPIOE, &GPIO_InitStructure); 
        
            
    //    a=*(__IO uint16_t *) (Bank1_LCD_D); //L
    
        return(a);    
    }
    به نظر شما خوبه ؟ مشکلی نداره ؟

  15. #11
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    بله مثل اینکه این دستور روی وضعیت پینها در این مد جوابگو نیست. هنوز با fsmc کار نکردم دیروز یه برد stm32f407 تهیه کردم ، این هفته باید با این رابط کار کنم اگه مشکل حل شد خبر میدم.

  16. #12
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    اون تنظیم GPIO که گذاشتی اشتباهه، باید برای هر پورت این چند خط رو بذاری و پینهارو با OR جدا کنی. مد کاری هم برای 16 پین دیتا GPIO_Mode_Out_PP باش و وقتی خواستی بخونیشون به GPIO_Mode_IN_FLOATING تغییر بده و دوباره خروجی کن.

    کد:
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
    ویرایش توسط mohammadne : 25-12-2015 در ساعت 01:16

  17. #13
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

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

  18. #14
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    برای تنظیم GPIO ابتدا باید پینهای مورد نظر رو در متغییر GPIO_InitStructure.GPIO_Pin قرار بدیم، بعد مد کاری رو انتخاب کنیم که در اینجا باید GPIO_Mode_Out_PP باشه، و سرعت کلاک PLL برای این پورت که روی 50 مگاهرتز قرار میدیم و در اخر با دستور GPIO_Init این ساختار رو روی پورت مورد نظر اعمال میکنیم.
    مشکل شما اینه که برای پورت E هیچ تنظیمی قرار ندادین. برای هر پورت به صورت جداگونه این تنظیم رو انجام بدین.
    اون دستور شیفت کردن بیتها هم فکر کنم یه مشکلی دارن.

  19. تشکرها از این نوشته :


  20. #15
    عضو جدید
    تاریخ عضویت
    Jul 2011
    نوشته ها
    11
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mohammadne نمایش پست ها
    برای تنظیم gpio ابتدا باید پینهای مورد نظر رو در متغییر gpio_initstructure.gpio_pin قرار بدیم، بعد مد کاری رو انتخاب کنیم که در اینجا باید gpio_mode_out_pp باشه، و سرعت کلاک pll برای این پورت که روی 50 مگاهرتز قرار میدیم و در اخر با دستور gpio_init این ساختار رو روی پورت مورد نظر اعمال میکنیم. مشکل شما اینه که برای پورت e هیچ تنظیمی قرار ندادین. برای هر پورت به صورت جداگونه این تنظیم رو انجام بدین. اون دستور شیفت کردن بیتها هم فکر کنم یه مشکلی دارن.
    اگه دقت کنید پورت e هم درست تنظیم شده و مشکلی نداره ولی گمان میکنم شاید اون ترکیب کدهایی که شیفت داده اشتباهی داشته باشه.

  21. #16
    کاربر فعال mohammadne آواتار ها
    تاریخ عضویت
    Dec 2013
    نام
    محمد پورخلیلی
    نوشته ها
    276
    تشکر
    43
    تشکر شده 214 بار در 132 پست

    پیش فرض

    بله حالا متوجه شدم درسته .

موضوعات مشابه

  1. [آموزش] فیلم آموزش Emwin با LPC1788 و تکمیلی lpc1768 رسید!
    توسط yraeisi در انجمن LPC series (NXP)
    پاسخ: 633
    آخرين نوشته: 13-05-2021, 00:57
  2. آموزش emWin
    توسط majidma3000 در انجمن LPC series (NXP)
    پاسخ: 1103
    آخرين نوشته: 30-08-2020, 23:50
  3. اسیلوسکوپ با stm32f103vet6
    توسط sadmonew در انجمن stm32
    پاسخ: 22
    آخرين نوشته: 21-10-2016, 18:57
  4. مشکل در راه اندازی برد آموزشی کویر
    توسط mohammad_sth در انجمن LPC series (NXP)
    پاسخ: 0
    آخرين نوشته: 07-02-2014, 02:59

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

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