Forum: Mikrocontroller und Digitale Elektronik STM32F103VC + SSD1963 Problem


von JUPPECK (Gast)


Lesenswert?

Hallo,

ich hab mir vor einigen Monaten ein 3.5" TFT Display (Hy35A) mit SSD1963 
Controller und Touch-Controller ersteigert. Dies sollte ein kleineres 
TFT-Display (HY32D) ersetzten. Die Hardware-Anpassung habe ich mit einer 
Adapterplatine gelöst, die zwischen dem HY-MINI STM32V Controller Board, 
dass einen STM32F103VC besitzt, gebaut ist.
Mir ist aufgefallen, dass das Timing des FSMC bis auf 2Mhz gedrosselt 
werden muss, damit das Display halbwegs stabil läuft. Die Demo von 
Segger läuft, jedoch schmiert das Display zwischenzeitlich ab und die 
Hintergrundbeleuchtung geht aus (wird vom ssd1963 Controller gesteuert).

Mir geht es jetzt nicht wirklich darum, die Segger µcGui Demo zum laufen 
zu bringen da ich statt der µC-GUI lieber freie Sachen nutzen möchte. 
Nun, ich frage mich, ob das Abstürzen der Demo evtl. am 
Display-Controller liegen kann, denn die Demo läuft mit dem kleineren 
Display (SSD1289) einwandfrei und ohne den FSMC zu drosseln.
Ich habe mit dem Timing schon gespielt - das Display wird langsamer, 
aber nicht stabiler.
Ist der SSD1963 also besonders empfindlich oder gibt bei diesem Display 
etwas besonderes zu beachten?
Gibt es eine freie GUI-Library die den SSD1963 unterstützt? Als OS 
möchte ich gern CoOS nutzen.

Für Tipps bin ich sehr dankbar.

Juppeck

von Mehmet K. (mkmk)


Lesenswert?

Ein Display mit dem SSD1289 habe ich zwar hier auf dem Tisch, aber noch 
nicht im Einsatz. Was ich aber schon mehrmals gelesen habe und deshalb 
besonders darauf achten werde: eine stabile und grosszügig bemessene 
Stromversorgung scheint wichtig zu sein.

von Juppeck (Gast)


Lesenswert?

Das mit der Stromversorgung könnte ein Thema sein. Die Energieversorgung 
wird vom HY-MINI STm32V CPU Board gemacht - was aber nicht unbedingt 
beutet, dass sie auch ausreichend ist. Dem Hinweis werde ich mal mit 
Hilfe des OSZI nachgehen und messen, ob die Spannung zusammenbricht, 
wenn viel Aktivität auf dem Display passiert. Ich hatte auch schon 
darüber nachgedacht, mal das 7" TFT mit SSD1963 in China zu ordern - 
dort ist es bezahlbar. Damit kann man in Verbindung mit einem Cortex-M4 
schon eine Menge im Amateurfunk anstellen bzw. anzeigen.

besten Dank für den Hinweis
Juppeck

von Gerhard G. (g_g)


Lesenswert?

Hallo,

ich habe diese Woche mein Display mit einem SSD1963 Controller in 
Betrieb genommen(STM32F4-Discovery).

http://www.exp-tech.de/Displays/4-3--TFT-LCD-Module-ITDB02-4-3.html

War schon ein Stück Arbeit!

Die Spannungsversorgung für Displaybeleuchtung und Controller wird nur 
über 2 Pins geführt! Habe dann die Pins mit "NC" als zusätzliche 
Verbindung für die Stromversorgung genommen!

Grund: Spannungsschwankungen an verschiedenen Spannungsquellen ergaben 
erhebliche Timing-Probleme. Bestens funktioniert es mit einer stabilen 5 
Volt Versorgung! Die Spannungsquellen auf dem Discovery sind für diese 
Art von Displays nicht besonders geeignet.

Aufpassen sollte man auch bei der Beschaltung des Displays, im 
allgemeinen befindet sich hier ein Brücke zur Spannungsanpassung 3,3 
oder 5 Volt. Diese Brücke ist eine SUB/MINI Ausführung! Verdammt 
schwierig zu löten.

Habe zugleich die SD-Card mit SDIO in Betrieb genommen.
Das war mir der Sample-Software:
STM32F4Discovery mit CooCox: GPIO,SDIO,Timer,SoftTimer,USART,printf
Beitrag "STM32F4Discovery mit CooCox :: GPIO,SDIO,Timer,SoftTimer,USART,printf"

kein Problem. Die LIB für das Display: UTFT

Gruß G.G.

von Torsten S. (tse)


Lesenswert?

Juppeck

Das gleiche Problem hatte ich auch.
Schau Dir mal diesen Thread genauer an:

Beitrag "Open407I-C (Board für STM32) mit OV9655 (Kameramodul) auf 5"-Touchdisplay"

von Juppeck (Gast)


Lesenswert?

Das Display schaltete immer auf Dunkel (oder sonst was) - jedenfalls 
ging die Hintergrundbeleuchtung aus. Einen Moduldefekt des Moduls 
schloss ich aus, denn wenn ich bestimmte Funktionen nicht nutzte, 
funktionierte es tadellos.
Letztendlich war es kein Problem mit der Energieversorgung sondern eine 
falsche Definition der Farbe "Weiß", die immer dann zum Einsatz kam, 
wenn die Schriftfarbe geändert wurde. Die Definition für Weiß war 
"0x00FFFFFF" und hat zum Ausschalten der Hintergrundbeleuchtung geführt.
Wenn dies innerhalb eines mem_dev Bereichs auf Schriftausgaben 
angewendet wurde, wurde die Hintergrundbeleuchtung ausgeschaltet.

Leider kann ich keine weiteren Untersuchungen zur wirklichen Ursache 
anstellen, da ich nicht über den Quellkode der emWIN / ucGui Bibliothek 
verfüge. Ein Ticket Hersteller Segger spare ich mir denn die Library ist 
von ST geladen und kostete mich nichts. Ich will auch nicht ausschließen 
dass es an der GNU Tool-Chain liegt. Ich konnte bei meinen Recherchen 
nichts finden, dass auf dieses Problem hindeutet. Fakt ist jedoch, dass 
dieses Problem Hardware-übergreifend ist, da ich derzeit 2 verschiedene 
MPU-Board (STM-Discovery-F4 und miniSTM32 mit einem STM32F103VC) mit 
unterschiedlichen Energieverteilungen einsetzte. Ich denke dass es ein 
Problem des TFT-Treibers sein wird. Sowohl in der UCGUI3.90xx als auch 
in der verfügbaren emWIN5.20d von ST ladbar, offenbaren beide das 
gleiche Problem. Ich habe mal einen Testprogramm eingefügt, das die 
Situation verdeutlichen hilft. Es muss dazu nur ein Programmrumpf 
vorhanden sein, der das GUI_Init() enthält, bevor man die void 
DemoBandingMemdev(void) startet. Das TFT hat eine Auslösung von 320x240 
Pixel, hat 16 Bit Farben (565) und ist mit FSMC angebunden. Die 
Hintergrundbeleuchtung wird vom SSD1963 gesteuert. Das Problem tritt 
beim SSD1289 nicht auf - die Hintergrundbeleuchtung wird dort jedoch mit 
PWM der MPU bedient.



#include <stm32f4xx.h>
#include <RTL.h>
#include "GUI.h"
#include "adc1.h"



#define USE_BANDING_MEMDEV (1) 
/* Set to 0 for drawing without banding memory device */
#define SIZE_OF_ARRAY(Array) (sizeof(Array) / sizeof ( Array[0] ) )


extern volatile uint16_t ADCBuffer[];                    // DMA Buffers 
- one Halfword used by every ADC-Channel.


static const GUI_POINT aPoints[] =
 {
  {-50,  0},
  {-10, 10},
  {  0, 50},
  { 10, 10},
  { 50,  0},
  { 10,-10},
  {  0,-50},
  {-10,-10}
};



typedef struct
 {
  int         XPos_Poly;
  int         YPos_Poly;
  int         XPos_Text;
  int         YPos_Text;

  GUI_POINT   aPointsDest[8];
 }
 tDrawItContext;




// 
######################################################################## 
###################################

static void _DrawIt(void * pData)
 {
  tDrawItContext *pDrawItContext = (tDrawItContext *) pData;

  GUI_Clear();


   // ######### draw background ######
  GUI_SetColor ( GUI_GREEN );
  GUI_FillRect(pDrawItContext->XPos_Text, pDrawItContext->YPos_Text - 
25, pDrawItContext->XPos_Text + 100, pDrawItContext->YPos_Text - 5 );

  // ######### draw foreground
  GUI_SetColor(GUI_RED);
  GUI_FillRect ( 220 - pDrawItContext->XPos_Text, 
pDrawItContext->YPos_Text + 5, 220 - pDrawItContext->XPos_Text + 100, 
pDrawItContext->YPos_Text + 25  );

  // ###### draw polygon #######
  GUI_SetColor ( GUI_BLUE );
  GUI_FillPolygon ( pDrawItContext->aPointsDest, SIZE_OF_ARRAY ( aPoints 
), 160, 120);




   //  GUI_SetColor ( GUI_WHITE );   // Display stürzt ab bei Weiß ??
  GUI_SetColor(GUI_RED);
  GUI_DispStringHCenterAt ( "MEMDEV_Banding - Sample", 160, 30 );
  GUI_DispStringHCenterAt ( "MEMDEV_Banding - Sample", 160, 5 );
  GUI_DispStringHCenterAt ( "Banding memory device\nwithout flickering", 
160, 40 );
  }





/*******************************************************************
*
*       DemoBandingMemdev - main routine of this demo
*/
void DemoBandingMemdev(void)
 {
  int i;
  int swap     = 0;
  float angle = 0.0;
    GUI_MEMDEV_Handle  hMem;
  tDrawItContext   DrawItContext;

  GUI_RECT  Rect = { 0, 0, 319,170};

  DrawItContext.XPos_Poly = 160;
  DrawItContext.YPos_Poly = 120;
  DrawItContext.YPos_Text = 116;



//  hMem = GUI_MEMDEV_CreateFixed ( 0, 0, 319, 170, GUI_MEMDEV_HASTRANS, 
GUI_MEMDEV_APILIST_16, GUICC_565);
//  GUI_MEMDEV_Select(hMem);

  while (1)
   {
    swap = ~swap;

    for (i = 0; i < 220; i++)
     {
      angle = ( ADCBuffer[0] * ( 6.28 / 4096 ) );                   // 
360° in 4096 steps
      DrawItContext.XPos_Text = ( swap ) ? i : 220 - i;

      GUI_RotatePolygon ( DrawItContext.aPointsDest, aPoints, 
SIZE_OF_ARRAY ( aPoints ) , angle );  // ####### Rotate the polygon
      GUI_MEMDEV_Draw ( &Rect, &_DrawIt, &DrawItContext, 1, 
GUI_MEMDEV_NOTRANS );                                     // ###### Use 
banding memory device for drawing
    }
     //os_dly_wait(1);
  }
}

von Harald Ma. (Gast)


Lesenswert?

Hallo zusammen !

Ich bin ein absoluter Anfänger was dieses Thema betrifft. Aber wir haben 
ein TFT Display des Typs SSD1963 und da ist ein SD Karten Slot drauf. 
Auf dem TFT ist ein Teil zum Bedienen vorbereitet und auf dem oberen 
Teil ist das Logo des Herstellers drauf, jetzt habe Ich die SD Karte 
entnommen und wollte dort unser Logo einfügen, aber leider hat es nicht 
geklappt da es nur Wirre Linien und Punkte anzeigt. Kann mir jemand von 
euch helfen ? Bitte !

von Harald Ma. (Gast)


Lesenswert?

Hallo alle zusammen,

Ein Freak hat mal wieder ganze Arbeit geleistet! Vielen Dank er trägt
seinen Namen zurecht. Mein Problem ist soweit gelöst !
Vielen Dank

von Juppeck (Gast)


Lesenswert?

Als Ergänzung habe ich derweilen auch ein 3.5" (320x240) und auch ein 5" 
Display (800x480 Pixel) mit SSD1963 an ein STM32F4Disco angeheftet. Das 
Timing der Register für die interne PLL muss natürlich gegenüber einem 
320x240 Pixel Display  angepasst werden. Die Bedingung, dass die 
Farbtabelle auf 5-6-5 RGB Bits konvertiert werden muss, bleibt 
unverändert.
Ich benutze seit einigen Wochen die von ST bereitgestellte emWIN V5.24.4
für die SSD1963iger und die scheint sehr zuverlässig zu sein.
Derzeit überlege ich zu einer anderen IDE zu wechseln, da die µVision 
mit den auferlegten 32KByte-Begrenzung der Trial langsam zu einem sehr 
engen Korsett wird.
Schaun wir mal - vy 73 de Juppeck

von Thomas M. (Gast)


Lesenswert?

Guten Abend,

ich muss diesen Beitrag wieder nach oben holen :)
Ist vielleicht ein Beispielprojekt vorhanden, welches den SSD1963 
benutzt? Ich würde gerne den selbigen benutzen und hoffe mir die 
tagelangen Experimente etwas zu verkürzen.

Danke!

Beste Grüße, Thomas.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.