سلام
من میخوام یک lcd ۷ اینچی رو با استفاده از ssd1963 و stm32f103 راه اندازی کنم. اما تصویری که روی Lcd میگیرم یک تصویر برفکی قرمز هست نمیدونم مشکل کجاست اگر کسی اطلاعی داره لطفا منو راهنمایی کنه
سلام
من میخوام یک lcd ۷ اینچی رو با استفاده از ssd1963 و stm32f103 راه اندازی کنم. اما تصویری که روی Lcd میگیرم یک تصویر برفکی قرمز هست نمیدونم مشکل کجاست اگر کسی اطلاعی داره لطفا منو راهنمایی کنه
سلام
از چه بردی استفاده می کنید و از چه سمپلی؟
برد رو خودم طراحی کردم آماده نیست و قبلا ازش جواب گرفتم به تازگی یک سری تغییرات روی پایه ها اعمال کردم و خواستم کد رو با توجه به تغییرات درست کنم که جواب نمیده
کد فعال سازی رو اینجا میذارم
void SSD1963_Init (void)
{
SSD1963_DATAPORTX->BRR= 0xFF; // reset extra bits
SSD1963_CTRLPORT->BRR = SSD1963_PIN_RST;
HAL_Delay(100);
SSD1963_CTRLPORT->BSRR = SSD1963_PIN_RST;
HAL_Delay(100);
SSD1963_CTRLPORT->BRR = SSD1963_PIN_RST;
HAL_Delay(100);
SSD1963_CTRLPORT->BSRR = SSD1963_PIN_RST;
HAL_Delay(100);
SSD1963_WriteCommand(SSD1963_SOFT_RESET);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SOFT_RESET);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SOFT_RESET);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SOFT_RESET);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SET_PLL_MN);
SSD1963_WriteData(39); // PLLclk = REFclk * 40 (400MHz)
SSD1963_WriteData(1); // SYSclk = PLLclk / 2 (200MHz)
SSD1963_WriteData(0x54); // effectuate values
SSD1963_WriteCommand(SSD1963_SET_PLL);
SSD1963_WriteData(0x01);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SET_PLL);
SSD1963_WriteData(0x03);
SSD1963_WriteCommand(SSD1963_SOFT_RESET);
HAL_Delay(10);
SSD1963_WriteCommand(SSD1963_SET_LCD_MODE); // B0
SSD1963_WriteData(0x20); // 0x20 for 24bit
SSD1963_WriteData(0x00);
SSD1963_WriteData(mHIGH((TFT_WIDTH-1)));
SSD1963_WriteData(mLOW((TFT_WIDTH-1)));
SSD1963_WriteData(mHIGH((TFT_HEIGHT-1)));
SSD1963_WriteData(mLOW((TFT_HEIGHT-1)));
SSD1963_WriteData(0x00);
SSD1963_WriteCommand(SSD1963_SET_PIXEL_DATA_INTERF ACE);
SSD1963_WriteData(SSD1963_PDI_16BIT565);
SSD1963_WriteCommand(SSD1963_SET_LSHIFT_FREQ);
SSD1963_WriteData((LCD_FPR >> 16) & 0xFF);
SSD1963_WriteData((LCD_FPR >> 8) & 0xFF);
SSD1963_WriteData(LCD_FPR & 0xFF);
SSD1963_WriteCommand(SSD1963_SET_HORI_PERIOD); // B4
SSD1963_WriteData(mHIGH(TFT_HSYNC_PERIOD -1));
SSD1963_WriteData(mLOW(TFT_HSYNC_PERIOD -1));
SSD1963_WriteData(mHIGH((TFT_HSYNC_PULSE + TFT_HSYNC_BACK_PORCH)));
SSD1963_WriteData(mLOW((TFT_HSYNC_PULSE + TFT_HSYNC_BACK_PORCH)));
SSD1963_WriteData(TFT_HSYNC_PULSE -1);
SSD1963_WriteData(mHIGH(TFT_LPS));
SSD1963_WriteData(mLOW(TFT_LPS));
SSD1963_WriteData(0x00);
SSD1963_WriteCommand(SSD1963_SET_VERT_PERIOD); // B6
SSD1963_WriteData(mHIGH(TFT_VSYNC_PERIOD -1));
SSD1963_WriteData(mLOW(TFT_VSYNC_PERIOD -1));
SSD1963_WriteData(mHIGH((TFT_VSYNC_PULSE + TFT_VSYNC_BACK_PORCH)));
SSD1963_WriteData(mLOW((TFT_VSYNC_PULSE + TFT_VSYNC_BACK_PORCH)));
SSD1963_WriteData(TFT_VSYNC_PULSE -1);
SSD1963_WriteData(mHIGH(TFT_FRPS));
SSD1963_WriteData(mLOW(TFT_FRPS));
SSD1963_WriteCommand(SSD1963_ENTER_NORMAL_MODE);
SSD1963_WriteCommand(SSD1963_SET_DISPLAY_ON); //SET display on
HAL_Delay(100);
}
void LCD_Backlight(uint8_t br) {
SSD1963_WriteCommand(SSD1963_SET_PWM_CONF);
SSD1963_WriteData(0x03); // PWMF
SSD1963_WriteData(br); // PWM DutyCycle
SSD1963_WriteData(0x01); // PWM Enable
SSD1963_WriteData(0xff); // DBC Manual Brightness
SSD1963_WriteData(0xf0); // DBC Minimum Brightness
SSD1963_WriteData(0x06);
}
void SSD_Init() {
GPIOC->ODR |= 1<<5; // 8080 Mode
SSD1963_Init();
SSD1963_WriteCommand(SSD1963_SET_GPIO_CONF);
SSD1963_WriteData(0x0f); // control by host, output
SSD1963_WriteData(0x01); // control by host, output
SSD1963_WriteCommand(SSD1963_SET_GPIO_VALUE);
SSD1963_WriteData(0x0e);
SSD1963_WriteCommand(SSD1963_SET_ADDRESS_MODE);
SSD1963_WriteData(0x80); // horizontal
SSD1963_WriteCommand(SSD1963_SET_GAMMA_CURVE);
SSD1963_WriteData(0x08);
LCD_Backlight(255); // we don't need high backlight, don't want to unstabilize power
}
int main(void)
{
SSD_Init();
SSD1963_ClearScreen(RGB565(0,0,0), 0); // black}
ار مد fSMC استفاده می کنید یا با gpio؟
اگر کد قبلا درست بوده و الان این طور شده باید اطمینان حاصل کنید خود سمپل درست کار می کنه. می توانید از یک هرد برد استفاده کنید و با سیم بندی پایه های میکرو متصل کنید به درایور و سمپل تست کنید. اگر درست برود بردتان مشکل دارد.
در فیلم پیشرفته stm32 نیز راه اندازی tft در دو حالت gpio و مد fsmc شرح داده شده است.
چون lcd روشن میشه و یه تصویری داره نشون میده به نظرم مشکل از نرم افزاره اما نمیدونم کدوم قسمت تنظیمات ممکنه باعث این مساله بشه
سلام ، لطفا این لینک رو نگاه کنید
_____________________________________
_____________________________________
سلام، من از مد gpio استفاده میکنم، data bus بین میکرو و ssd1963 رو به صورت خروجی تعریف کردم و دو طرفه نیست ارتباط، مشکل میتونه از این باشه؟؟
ویرایش توسط afra151 : 07-12-2018 در ساعت 14:08
بله باید خروجی gpio تعریف کنید. چون از حالت ورودی استفاده نشده.