Arkadaşlar merhaba,
TFT'yi almıştım ebay'dan sürmeye başladım fakat ekrana papatyalı image'den başka bir image i tam bastıramadım.Diğer resimleri extern ettim programa tıpkı papatyalı resim gibi bastırıyorum fakat abuk subuk bir şey basıyor yardımcı olabilir misiniz? Image2lcd programını kurdum bir kaç fotoyu yaptım forum da bahsedildiği gibi fakat resimi sağlıklı bir şekilde bastıramıyorum.Bir diğer problemimde ekrana bastırdığım yazılar sanki büyük gibi yazıların boyutunu küçültebilir miyim?
Not: SSD1289 library kullanıyorum.Forumda Diot Hoca'nın paylaştığı library.#include "main.h"
#include "system_stm32f4xx.h"
#include "stm3240f_lcd.h"
#include "touch_7846.h"
char degerx[30]= " Umit KAYACIK ";
char degery[30]= " Anadolu University ";
char degerz[30]= " SUNATOLIA ";
char degert[30]= " Solar Car Project ";
extern unsigned int xxx,yyy;
extern unsigned char flag;
extern u8 gImage_ikon[];
extern u8 gImage_r2[];
extern u8 gImage_r1[];
static __IO uint32_t TimingDelay;
void GPIO_Configuration(void);
int main()
{
if (SysTick_Config(SystemCoreClock / 1000)){ while (1);}
GPIO_Configuration();
Delay(250);
STM3240F_LCD_Init();
Delay(250);
LCD_Clear(LCD_COLOR_YELLOW);
LCD_WindowModeDisable();
LCD_SetTextColor(LCD_COLOR_BLUE);
LCD_SetBackColor(LCD_COLOR_RED);
LCD_DisplayStringLine(60, (uint8_t *)degerz);
LCD_DisplayStringLine(80, (uint8_t *)degert);
LCD_SetTextColor(LCD_COLOR_BLUE);
LCD_SetBackColor(LCD_COLOR_RED);
LCD_DisplayStringLine(120, (uint8_t *)degerx);
LCD_DisplayStringLine(140, (uint8_t *)degery);
LCD_DrawRect(10,100,40,80);
LCD_DrawRect(10,200,40,80);
LCD_DrawRect(10,300,40,80);
LCD_DrawRect(180,100,40,80);
LCD_DrawRect(180,200,40,80);
LCD_DrawRect(180,300,40,80);
Delay(1000); Delay(1000); Delay(1000);
LCD_Clear(LCD_COLOR_BLACK);
LCD_WriteBMP2(239, 319, 240, 320,gImage_ikon); // Resim
Delay(1000); Delay(1000); Delay(1000);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE);
//Ledler
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_12;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOD,&GPIO_InitStruct);
//buton
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
/**
* @brief Inserts a delay time.
* @param nTime: specifies the delay time length, in milliseconds.
* @retval None
*/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief Decrements the TimingDelay variable.
* @param None
* @retval None
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
Merhaba M_B Hocamın ssd 1963 için verdiği kodları düzenleyip kullanabilirsin. Ben denedim çalışıyor. Ayrıca resim için ST nin GUI editörünü kullan. Orada image ekleyip kod üretirsen o kodları alıp resim basabilirsin.
O chip bizim kulladığımızdan farklı sanırım kullanabilir miyiz ki? birde ST GUI dediğimiz ne oluyo usta image i C coduna çeviren bir program mı?
Ssd1289 a göre yazılmıs main fonksiyonunu yazdım sadece diger kutuphaneler yepyeniprojelerdeki ve element14 deki lıbraryler ile aynı while içerisinde görebilirisin 2 tane farklı resim basmıstım. istersen arrtırabilirsinde yardımcı olması dılegıyle :)
http://kaankandemir.wordpress.com/2013/05/27/stm32f4-discovery-3-2-tft-lcd-surme/ (http://kaankandemir.wordpress.com/2013/05/27/stm32f4-discovery-3-2-tft-lcd-surme/)
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32%2c%20Embedded%20UI%20Resource%20Editor%20and%20Keil&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1345 (https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32%2c%20Embedded%20UI%20Resource%20Editor%20and%20Keil&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1345)
Evet bu bir editor burada bahsediliyor.
Teşekkür ederim Kaanx ve respected . Peki ekrana bastırdığımız yazı fontunu nasıl değiştirebileceğiz.Yazının şeklini ,büyüklüğünü falan birde bastırmak için illa ki arka plan rengi mi eklememiz lazım? Bu konular hakkında bir bilginiz var mı?
Alıntı yapılan: respected - 28 Mayıs 2013, 01:47:36
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32%2c%20Embedded%20UI%20Resource%20Editor%20and%20Keil&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1345 (https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32%2c%20Embedded%20UI%20Resource%20Editor%20and%20Keil&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1345)
Evet bu bir editor burada bahsediliyor.
Editörün linki:
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257934 (http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257934)
en altta download'a basarak indirebilirsiniz. Denemekte fayda var.
Hocam SSD1289 kütühanesini incelerseniz hatta söyle vereyım headerını
#ifndef __SSD1289_H
#define __SSD1289_H
#include "stm32f4xx.h"
#include "fonts.h"
#include "delay.h"
typedef struct
{
int16_t X;
int16_t Y;
} Point, * pPoint;
#define LCD_REG_0 0x00
#define LCD_REG_1 0x01
#define LCD_REG_2 0x02
#define LCD_REG_3 0x03
#define LCD_REG_4 0x04
#define LCD_REG_5 0x05
#define LCD_REG_6 0x06
#define LCD_REG_7 0x07
#define LCD_REG_8 0x08
#define LCD_REG_9 0x09
#define LCD_REG_10 0x0A
#define LCD_REG_12 0x0C
#define LCD_REG_13 0x0D
#define LCD_REG_14 0x0E
#define LCD_REG_15 0x0F
#define LCD_REG_16 0x10
#define LCD_REG_17 0x11
#define LCD_REG_18 0x12
#define LCD_REG_19 0x13
#define LCD_REG_20 0x14
#define LCD_REG_21 0x15
#define LCD_REG_22 0x16
#define LCD_REG_23 0x17
#define LCD_REG_24 0x18
#define LCD_REG_25 0x19
#define LCD_REG_26 0x1A
#define LCD_REG_27 0x1B
#define LCD_REG_28 0x1C
#define LCD_REG_29 0x1D
#define LCD_REG_30 0x1E
#define LCD_REG_31 0x1F
#define LCD_REG_32 0x20
#define LCD_REG_33 0x21
#define LCD_REG_34 0x22
#define LCD_REG_36 0x24
#define LCD_REG_37 0x25
#define LCD_REG_40 0x28
#define LCD_REG_41 0x29
#define LCD_REG_43 0x2B
#define LCD_REG_45 0x2D
#define LCD_REG_48 0x30
#define LCD_REG_49 0x31
#define LCD_REG_50 0x32
#define LCD_REG_51 0x33
#define LCD_REG_52 0x34
#define LCD_REG_53 0x35
#define LCD_REG_54 0x36
#define LCD_REG_55 0x37
#define LCD_REG_56 0x38
#define LCD_REG_57 0x39
#define LCD_REG_58 0x3A
#define LCD_REG_59 0x3B
#define LCD_REG_60 0x3C
#define LCD_REG_61 0x3D
#define LCD_REG_62 0x3E
#define LCD_REG_63 0x3F
#define LCD_REG_64 0x40
#define LCD_REG_65 0x41
#define LCD_REG_66 0x42
#define LCD_REG_67 0x43
#define LCD_REG_68 0x44
#define LCD_REG_69 0x45
#define LCD_REG_70 0x46
#define LCD_REG_71 0x47
#define LCD_REG_72 0x48
#define LCD_REG_73 0x49
#define LCD_REG_74 0x4A
#define LCD_REG_75 0x4B
#define LCD_REG_76 0x4C
#define LCD_REG_77 0x4D
#define LCD_REG_78 0x4E
#define LCD_REG_79 0x4F
#define LCD_REG_80 0x50
#define LCD_REG_81 0x51
#define LCD_REG_82 0x52
#define LCD_REG_83 0x53
#define LCD_REG_96 0x60
#define LCD_REG_97 0x61
#define LCD_REG_106 0x6A
#define LCD_REG_118 0x76
#define LCD_REG_128 0x80
#define LCD_REG_129 0x81
#define LCD_REG_130 0x82
#define LCD_REG_131 0x83
#define LCD_REG_132 0x84
#define LCD_REG_133 0x85
#define LCD_REG_134 0x86
#define LCD_REG_135 0x87
#define LCD_REG_136 0x88
#define LCD_REG_137 0x89
#define LCD_REG_139 0x8B
#define LCD_REG_140 0x8C
#define LCD_REG_141 0x8D
#define LCD_REG_143 0x8F
#define LCD_REG_144 0x90
#define LCD_REG_145 0x91
#define LCD_REG_146 0x92
#define LCD_REG_147 0x93
#define LCD_REG_148 0x94
#define LCD_REG_149 0x95
#define LCD_REG_150 0x96
#define LCD_REG_151 0x97
#define LCD_REG_152 0x98
#define LCD_REG_153 0x99
#define LCD_REG_154 0x9A
#define LCD_REG_157 0x9D
#define LCD_REG_192 0xC0
#define LCD_REG_193 0xC1
#define LCD_REG_229 0xE5
#define LCD_COLOR_WHITE 0xFFFF
#define LCD_COLOR_BLACK 0x0000
#define LCD_COLOR_GREY 0xF7DE
#define LCD_COLOR_BLUE 0x001F
#define LCD_COLOR_BLUE2 0x051F
#define LCD_COLOR_RED 0xF800
#define LCD_COLOR_MAGENTA 0xF81F
#define LCD_COLOR_GREEN 0x07E0
#define LCD_COLOR_CYAN 0x7FFF
#define LCD_COLOR_YELLOW 0xFFE0
#define BLACK 0x0000
#define NAVY 0x000F
#define DGREEN 0x03E0
#define DCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define GREY 0xF7DE
#define LGRAY 0xC618
#define DGRAY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define LCD_DIR_HORIZONTAL 0x0000
#define LCD_DIR_VERTICAL 0x0001
#define LCD_PIXEL_HEIGHT 0x0140
#define LCD_PIXEL_WIDTH 0x00F0
#define ASSEMBLE_RGB(R ,G, B) ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))
void LCD_Init(void);
void TIM_Config(void);
void LCD_CtrlLinesConfig(void);
void LCD_FSMCConfig(void);
void PutPixel(int16_t x, int16_t y);
void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
void LCD_SetTextColor(__IO uint16_t Color);
void LCD_SetBackColor(__IO uint16_t Color);
void LCD_Clear(uint16_t Color);
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);
void LCD_CharSize(__IO uint16_t size);
void Pixel(int16_t x, int16_t y,int16_t c);
void LCD_PutChar(int16_t PosX, int16_t PosY, char c);
void LCD_StringLine(uint16_t PosX, uint16_t PosY, uint8_t *str);
void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
void LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
void LCD_DrawSquare(uint16_t Xpos, uint16_t Ypos, uint16_t a);
void LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);;
void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
void LCD_PolyLine(pPoint Points, uint16_t PointCount);
void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
void LCD_WriteBMP(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width, uint8_t *bitmap);
void LCD_DrawFullSquare(uint16_t Xpos, uint16_t Ypos, uint16_t a);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(uint16_t RGB_Code);
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
void LCD_BackLight(int procentai);
#endif
Burada verilen fonksiyonları ssd1289.c den ne yaptıgını ve nasıl işlediğine bakabilirisniz.
Mesela lcd_displaystringline font yazdırır.
lcd_writebmp2 resim çizdirir. vs vs...
mesaj birleştirme:: 28 Mayıs 2013, 12:42:54
Alıntı yapılan: muhendisbey - 28 Mayıs 2013, 11:24:31
Editörün linki:
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257934 (http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257934)
en altta download'a basarak indirebilirsiniz. Denemekte fayda var.
Hocam Bu dökuman ne işe yarıyor GUİ olarak indi ama k. bkmayın anlayamadım
St embedded gui library ile gelen örneklerin içinde stm32f4 için hazır şablon yok. Bu library basitce arabirim hazırlamak için ideal. Eski visualbasic editörü gibi bir yapısı var, Resurce editör ile birkaç tane c dodyası üretiyorsunuz ve bu dosyalarışablon projenizin içine atıp görsel arabiriminiz çalışır hale geliyor.St şuan itibari ile görsel ögeleri güçlendirmek için emwin yazılımına destek veriyor. KEndi gui library leri amatörce işler yapmak için gerekli boşluğu doldurdu denebilir. Yakın zamanda emwin ile görsel arabirim hazırlama üzerine örnekler yayınlanacağını düşünüyorum...
STM32 embedded graphic object/touchscreen library (http://www.youtube.com/watch?v=PL3enedXTs4#noexternalembed-ws)
Hocam bende bu vıdeoyu izledim aklıma direk FreeRTOS ve Chibi OS lar geldi dedim orada yapıyolar sanırım bunları bulamamıstım siz kullandınız mı böyle birşey ?
Alıntı yapılan: pisayisi - 28 Mayıs 2013, 12:45:34
St embedded gui library ile gelen örneklerin içinde stm32f4 için hazır şablon yok. Bu library basitce arabirim hazırlamak için ideal. Eski visualbasic editörü gibi bir yapısı var, Resurce editör ile birkaç tane c dodyası üretiyorsunuz ve bu dosyalarışablon projenizin içine atıp görsel arabiriminiz çalışır hale geliyor.St şuan itibari ile görsel ögeleri güçlendirmek için emwin yazılımına destek veriyor. KEndi gui library leri amatörce işler yapmak için gerekli boşluğu doldurdu denebilir. Yakın zamanda emwin ile görsel arabirim hazırlama üzerine örnekler yayınlanacağını düşünüyorum...
STM32 embedded graphic object/touchscreen library (http://www.youtube.com/watch?v=PL3enedXTs4#noexternalembed-ws)
Hocam sanki diğer cihazlarda ör:STM32F4'te de kullanılabilir gibi geliyor. Dediğim gibi "gibi geliyor"
Alternatif, renkli görüntüyü (resmi) koda çevirecek bir araç var mı? Renkli grafik LCD'lere yeni el atıyorum.
Fujitsu Bitmap Converter
Kaanx hocam elinde varsa keil dosyasını atarmısın? farklı resimlerin olduğu.
Hocam en kısa zamanda upload edicem bu aralar yogunum biraz.
Tamamdır hocam bekliyorum
Merhaba arkadaşlar ekrana resim basmakta zorlanmıştım epey ama diot ve analyser hocaların yardımıyla problemi çözdüm.İzlenilecek yol şu şekildedir.
Öncelikle Image2LCD programını makinamıza kuruyoruz, ardından program açıldıktan sonra resim load etmeden önce şu işlemler yapılır;
Output File: C array
Scan Mode: Horizantal Scan
BitPixel: 16bit True Color
max W and H: W=320x240 seçeriz
ardından tick atılan kısımda sadece "Scan bottom to Top"seçilir elinizdeki kodlara bakarak tarama şeklini anlayabilirsiniz(Yani bendeki driver kod bu şekilde çalıştı) .Yada deneme yanılma yoluyla anlayabilirsiniz.
Programın en alt kısmında tab lar bulunur oradan 16bit Color seçilir.Color bit formatı olarak 565 seçilir.Ardından herhangi bir resmi Load directory sinden ekleyip save e basıldığında .c uzantılı dosyamızı oluşturur.Direkt olarak kodlarınızda kullanabilirsiniz.İsteyen arkadaşlar olursa kodları da paylaşabilirim.
Merhaba,
Benim kullandığım st nin tft kütüphanelerinde lcd ye resim basmak için kullanılan fonksiyon aşağıdaki şekilde...
void LCD_WriteBMP(uint32_t BmpAddress);
Image2LCD ile elde ettiğim dizinin adresini bu fonksiyona gönderdiğimde kabul etmiyor. (Kullandığım TFT-LCD de ILI93XX driver var.)
Ayrıca Image2LCD programı neden 16bitlik (565) formatı seçmemize rağmen diziyi byte dizisi şeklinde çıkarıyor. 16 bitlik word dizisi olarak vermesi gerekmezmi ?