-diese Library dient zum ansteuern eines Grafik LC-Displays mit einem ST7783-Chip.
(240 x 320 Pixel und 16bit Farbe)
-das Display wird über den External-Memory-Contoller “FSMC” verwaltet und muss dementsprechend mit der CPU verbunden werden (siehe Pinbelegung in der Library)
-die Library bedient die Grundfunktionen wie Initialisierung, Screen-Ausrichtung, Hintergrundbeleuchtung, setzen vom Cursor und löschen vom Bildschirm.
-für die Grafik-Funktionen (Linen, Kreise, Bilder) gibt es eine Graphic-Library
-für Textausgabe gibt es eine Font-Library
Geschwindigkeit : ein “ClearScreen” mit einer Farbe dauert ca. 9ms
Backlight : (Hinweis)
Das CPU-Signal “LCD_Backlight” kann (und darf) nicht direkt an die LEDs der Hintergrundbeleuchtung angeschlossen werden !! Es muss ein PNP-Transistor dazwischengeschaltet werden (siehe Bild). [PB0 = LED_EN]
16bit 8080-Parallel-Mode :
1 2 3 4 | IM0 = Lo IM1 = Hi IM2 = Lo IM3 = Lo |
Beispielbild (per Graphic-LIB) :
Benutzte Pins :
1 2 3 4 5 6 7 8 9 10 11 | PB0 -> LCD_Backlight PE3 -> LCD_RS PD0 -> LCD_D2 PE7 -> LCD_D4 PD1 -> LCD_D3 PE8 -> LCD_D5 PD4 -> LCD_RD PE9 -> LCD_D6 PD5 -> LCD_WR PE10 -> LCD_D7 PD7 -> LCD_CS PE11 -> LCD_D8 PD8 -> LCD_D13 PE12 -> LCD_D9 PD9 -> LCD_D14 PE13 -> LCD_D10 PD10 -> LCD_D15 PE14 -> LCD_D11 PD14 -> LCD_D0 PE15 -> LCD_D12 PD15 -> LCD_D1 |
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : GPIO,FSMC Benutzte Librarys : keine |
Standard Farben :
1 2 3 4 5 6 7 8 9 10 11 | #define RGB_COL_BLACK 0x0000 #define RGB_COL_BLUE 0x001F #define RGB_COL_GREEN 0x07E0 #define RGB_COL_RED 0xF800 #define RGB_COL_WHITE 0xFFFF #define RGB_COL_CYAN 0x07FF #define RGB_COL_MAGENTA 0xF81F #define RGB_COL_YELLOW 0xFFE0 #define RGB_COL_GREY 0xF7DE |
Funktionen :
1 2 3 4 5 6 7 | ErrorStatus UB_LCD_Init(void); // init vom LCD void UB_LCD_SetCursor2Draw(uint16_t xpos, uint16_t ypos); // setzt den Cursor zum zeichnen void UB_LCD_FillScreen(uint16_t color); // füllt den Screen mit einer Farbe void UB_LCD_Backlight_On(void); // Backlight einschalten void UB_LCD_Backlight_Off(void); // Backlight ausschalten void UB_LCD_SetMode(LCD_MODE_t mode); // Modus : Portrait,Landscape void UB_LCD_SetWindow(uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend); // setzt ein Window zum zeichnen |
Beispiel :
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 31 32 33 34 35 36 37 38 39 40 41 42 | //-------------------------------------------------------------- // File : main.c // Datum : 18.02.2013 // Version : 1.1 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der LCD-Library (ST7783) // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_lcd_st7783.h" int main(void) { uint32_t n; SystemInit(); // Quarz Einstellungen aktivieren UB_LCD_Init(); // Init vom LCD // Display mit einer Farbe loeschen UB_LCD_FillScreen(RGB_COL_BLUE); // Cursor setzen UB_LCD_SetCursor2Draw(10,50); // einen roten Strich zeichnen for(n=0;n<100;n++) { LCD_RAM=RGB_COL_RED; } while(1) { } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
Woher bekommt man ein Display mit einem ST7783 Controller?
Meines war bei dem Motherboard von EBay dabei…aber es funktioniert auch ein Display mit SSD1289-Controller (den gibt es häufiger). Man muss dann nur die Initialisierung anpassen. (da hab ich ein Beispiel hier)
Ja ein SSD1289 Display habe ich hier. Könntest du mir die Initialisierung dafür zur Verfügung stellen?
Wäre sehr nett.
ok, geb mir etwas zeit…ich melde mich per Email wieder.
du hast post….sag bescheid ob die LIB geht oder nicht
Ich würde mich auch für die LIB für das SSD1289 interessieren. Wäre super, wenn es funktioniert und du mir dann die LIB zukommen lassen könntest.
Vielen herzlichen Dank schon mal im voraus!
Hi, auf der Startseite im Blog gibt es die Version 1.0 zum download. Damit kannst du (und alle die wollen) testen.
Hi,
erstmal respekt für Deine Arbeit, danke. Die libs haben mir ein paar Tage Einarbeitung gespart. Ich habe mir die stm32F3 und stm32F4 – Discovery Boards zugelegt.
Meine Frage; deine ST7783-Library nutzt den FSM-Controller, u.a den Pin PE3 als LCD_RS (FSMC_A19). PE3 ist auf dem F4-Board auch als Chipselect für den LIS302 angeschlossen. Gibs da Probleme im Bertrieb wenn ich ich beides nutze, LCD und LIS302? Ich “stricke” auf basis deiner Grafik-Lib eine HX8347D-Lib zusammen.
Gruß
Hi Marco,
Ich kann das Display und den LIS302 gleichzeitig benutzen, aber nur wenn ich nicht den DMA benutze, sondern einzeln darauf zugreife. Beim Discovery-Board muss man halt einige abstriche machen. Sauber wäre natürlich wenn die Signale getrennt wären.
Danke für die Antwort, dann muss wohl ein anderes Board her.
Erst mal RESPEKT für Deine Arbeit! Dank Dir trau ich mich jetzt wohl mal an den STM32F4 ran
Kann es sein, das es zu dem Discovery Board die unterschiedlichsten LC Displays gibt? Ich hab hier nämlich ein mit einem SSD2119 Controller und suche dementsprechend dafür die Libs. Da hast Du nicht zufällig was für?
Kleiner Nachtrag: Habe nun nach ein paar “Spielereien” ein zu 1/4 initialisiertes Display mit rotem Hintergrund und einer blauen Linie – Farben also genau falschherum Also grundsätzlich funktioniert da irgendwas, nur die Register sind wohl leicht anders vom SSD2119.
Ich musste auch (und ich bin blutiger Anfänger mit dem STM32 – umsteiger vom Atmel) zwecks Test den Pin PB0 (Backlight für SSD2189) mal für den Reset Pin missbrauchen, damit sich das Display überhaupt rührt.
Pinbelegung vom DM-LCD35RT (Farnell / ST) ist soweit identisch wie die vom anderem Display. Allerdings liegt auf PD13 die PWM Hintergrundbeleuchtung und an PD3 halt RESET.
Nun wed ich mal die Register studieren und schauen, wo da der Wurm drin ist. Aber echt schön das es die Seite hier gibt und schon nach weniger als 8 Stunden das Display zappelt – DANKE!
da muss es ein Register geben in dem “BGR” auf “RGB” umgestellt werden kann.
Hallo,
erstmal möchte ich mich für deine Arbeit bedanken.
Ich bin gerade am programmieren und werde erst in Wochen ein Display bekommen. Da ich keine lust habe dann meine komplette Visualisierung neu zu gestellten, würde ich diese gerne direkt richtig programmieren
Ich habe lediglich eine kleine Frage, wo befinden sich die Curserpositionen?
Wo befindet sich die absolute Koordinate x=0, y=0? In der oberen linken Ecke des Displays?
Wo befindet sich der Curser bei der Textausgabe? Unten links, oben links, oben rechts etc?
Schon mal danke im voraus.
Gruß
Frank
Cursor 0,0 ist in der Ecke links oben. Auf dem Bild da wo das Signalstärke-Symbol ist.
x geht bis 239 (dass ist dann ganz rechts)
y geht bis 319 (dass ist ganz unten)
Die Textausgabe benutzt die gleichen Koordinaten, bei 0,0 erscheint der Text
ganz oben links … 319 für y geht bei Text nicht, weil der Text selber ja eine bestimmte höhe hat (z.B. 10 Pixel) dann ist die letzt gültige Position (320-10)
auf dem Link siehst du die Textausgabe und die zugehörenden Pixelpositionen :
http://mikrocontroller.bplaced.net/wordpress/?page_id=527