mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik VGA Display am PIC24FJ256DA210 läuft nicht


Autor: Andreas Häusler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Neuer Tag neues Problem...

Versuche nach dem erfolgreichen Einbinden des 3,5" 320x240 Display 
ET0350G0DH6 nun auch das VGA Display ETV570G2DHU mit einer Auflösung von 
640x480 am PIC24FJ256DA210 zum Laufen zu bringen.

(Die beiden Displays stammen übrigens aus dem Familienkonzept der Firma 
Glyn.)

Mit der Anpassung des Microchip Demos (AN1227) habe ich bereits erste 
Erfolge gehabt. Die Buttons sind auf dem Display sichtbar.

Ich habe nun aber das Problem, dass nicht der gesamte Screen mit Daten 
gefüllt wird. Horizontal scheint alles zu stimmen, vertikal werden Daten 
nur ca. bis Zeile 410 anstatt 480 angezeigt. (Ich zeichne unter anderem 
einen Rahmen mit folgenden Daten:
   PolyPoints[0]=1;
   PolyPoints[1]=1;
   
   PolyPoints[2]=640;
   PolyPoints[3]=1;
   
   PolyPoints[4]=640;
   PolyPoints[5]=480;
   
   PolyPoints[6]=1;
   PolyPoints[7]=480;
   
   PolyPoints[8]=1;
   PolyPoints[9]=1;
  
   pPoints = &PolyPoints[0]; 
   
   while(!DrawPoly(5, pPoints));

Ich verwende folgende Konfiguration des Displays:

//Auto Generated Code
#define PIC24FJ256DA210_DEV_BOARD
#define USE_USB_INTERFACE
#define ENABLE_USB_MSD_DEMO
#define ENABLE_USB_HOST_HID_DEMO
#define USE_16BIT_PMP
#define DISPLAY_CONTROLLER MCHP_DA210
#define DISPLAY_PANEL TFT_ETV570G2DHU
#define COLOR_DEPTH 8  //16
#define GFX_GCLK_DIVIDER 12 // _GCLKDIV=(96MHz/24MHz)-1) / 0,25 = 12
#define GFX_DISPLAY_BUFFER_START_ADDRESS 0x00020000ul
#define GFX_DISPLAY_BUFFER_LENGTH 0x00F00000ul
#define GFX_WORK_AREA1_START_ADDRESS 0x00020000ul
#define GFX_WORK_AREA2_START_ADDRESS 0x00020000ul
#define GFX_EPMP_CS1_BASE_ADDRESS 0x00020000ul
//End Auto Generated Code

und

// --------------------------------------------------------------------------
// Glyn Familien Konzept Displays
// --------------------------------------------------------------------------
    
#if (DISPLAY_PANEL == TFT_ETV570G2DHU)  
  #define DISP_ORIENTATION  0
        #define DISP_HOR_RESOLUTION  640
        #define DISP_VER_RESOLUTION  480
        #define DISP_DATA_WIDTH    18  
        #define DISP_HOR_PULSE_WIDTH    30    
        #define DISP_HOR_BACK_PORCH     144  
        #define DISP_HOR_FRONT_PORCH    16  
        #define DISP_VER_PULSE_WIDTH    3  
        #define DISP_VER_BACK_PORCH     35  
        #define DISP_VER_FRONT_PORCH    40  
        
        #if (DISPLAY_CONTROLLER == MCHP_DA210)
            #define GFX_LCD_TYPE                        GFX_LCD_TFT
            #define GFX_DISPLAYENABLE_ENABLE
            #define GFX_HSYNC_ENABLE
            #define GFX_VSYNC_ENABLE
            #define GFX_DISPLAYPOWER_ENABLE
            #define GFX_CLOCK_POLARITY                  GFX_ACTIVE_HIGH
            #define GFX_DISPLAYENABLE_POLARITY          GFX_ACTIVE_HIGH
            #define GFX_HSYNC_POLARITY                  GFX_ACTIVE_LOW
            #define GFX_VSYNC_POLARITY                  GFX_ACTIVE_LOW
            #define GFX_DISPLAYPOWER_POLARITY           GFX_ACTIVE_HIGH
        #endif
       
#endif // #if (DISPLAY_PANEL == TFT_ETV570G2DHU)


Ich finde die Daten im Datenblatt sehr verwirrend und bin mir nicht 
sicher, ob alles korrekt im Headerfile eingetragen wurde.

Durch die Farbtiefe von nur 8Bit, sehen die Buttons nicht ansehlich aus.
Könnte man da was mit der Palette machen?

Bin für jede Hilfe sehr dankbar.
Im Voraus besten Dank...

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hängt denn für ein Speicher am PIC?
640 * 410 ~ 256k, 640*480 wären 307k...

Autor: Andreas Häusler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht genau nach diesem Problem aus...

Auf dem PIC24FJ256DA210 Development Board befindet sich ein externes 
512kB SRAM. Per default ist dieses aber nur bis 256kB verwendbar (Jumper 
auf Adresse 17 nicht gesetzt)

-------
The PIC24FJ256DA210 Development Board is provided with 512 Kbyte of 
external
SRAM, populating U6. By default, only 256 out of the 512 KByte is 
enabled; this allows
PMA17 to control LED D4 in the default board default configuration.
--------

Muss ich neben diesem Jumper auch in der Software Anpassungen machen, 
wenn ich die 512kB ausnützen will?

Autor: Andreas Häusler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier übrigens noch die korrekten Treibereinstellungen für das VGA 
Display
ETV570G2DHU der Firma Glyn:

#if (DISPLAY_PANEL == TFT_ETV570G2DHU)  
  #define DISP_ORIENTATION              0
        #define DISP_HOR_RESOLUTION    640
        #define DISP_VER_RESOLUTION    480
        #define DISP_DATA_WIDTH         18  
        #define DISP_HOR_PULSE_WIDTH    30    
        #define DISP_HOR_BACK_PORCH     114 (101)  
        #define DISP_HOR_FRONT_PORCH    16  (29)  
        #define DISP_VER_PULSE_WIDTH    3  
        #define DISP_VER_BACK_PORCH     32  
        #define DISP_VER_FRONT_PORCH    10  
        
        #if (DISPLAY_CONTROLLER == MCHP_DA210)
            #define GFX_LCD_TYPE                        GFX_LCD_TFT
            #define GFX_DISPLAYENABLE_ENABLE
            #define GFX_HSYNC_ENABLE
            #define GFX_VSYNC_ENABLE
            #define GFX_DISPLAYPOWER_ENABLE
            #define GFX_CLOCK_POLARITY                  GFX_ACTIVE_HIGH
            #define GFX_DISPLAYENABLE_POLARITY          GFX_ACTIVE_HIGH
            #define GFX_HSYNC_POLARITY                  GFX_ACTIVE_LOW
            #define GFX_VSYNC_POLARITY                  GFX_ACTIVE_LOW
            #define GFX_DISPLAYPOWER_POLARITY           GFX_ACTIVE_HIGH
        #endif


Das Problem mit dem Speicher bleibt mir aber weiterhin.
Hat den noch niemand das PIC24FJ256DA210 Development Board mit einem VGA 
Display betrieben?
Im Anhang findet Ihr die Datei, wo der Speicher initiallisiert wird.
Sowie das Handbuch zum Board.

Nachfolgend ein Auszug aus dem Source:

void EPMP_Init(void)
{
  /* Note: When using the EPMP to access external RAM or Flash, PMA0-PMA16 will only access a range of 
           256K RAM. To increase this range enable higher Address lines.
  */
  ANSDbits.ANSD7 = 0;   // PMD15
  ANSDbits.ANSD6 = 0;   // PMD14
  ANSFbits.ANSF0 = 0;   // PMD11

  ANSBbits.ANSB15 = 0;  // PMA0
  ANSBbits.ANSB14 = 0;  // PMA1
  ANSGbits.ANSG9  = 0;  // PMA2
  ANSBbits.ANSB13 = 0;  // PMA10
  ANSBbits.ANSB12 = 0;  // PMA11
  ANSBbits.ANSB11 = 0;  // PMA12
  ANSBbits.ANSB10 = 0;  // PMA13
  ANSAbits.ANSA7 = 0;   // PMA17
  ANSGbits.ANSG6 = 0;   // PMA18

  PMCON1bits.ADRMUX = 0;                      // address is not multiplexed
  PMCON1bits.MODE = 3;                        // master mode
  PMCON1bits.CSF = 0;                         // PMCS1 pin used for chip select 1, PMCS2 pin used for chip select 2
  PMCON1bits.ALP = 1;                         // set address latch strobes to high active level (for sn74lvc16373)
  PMCON1bits.ALMODE = 1;                      // "smart" address strobes are not used
  PMCON1bits.BUSKEEP = 0;                     // bus keeper is not used

    #if defined (GFX_EPMP_CS1_BASE_ADDRESS)
    #ifdef USE_DOUBLE_BUFFERING
      PMCS1BS = ((DWORD)GFX_BUFFER1>>8);          // CS1 start address
      PMCON3 |= 0x0003;                       // PMA16 - PMA17 address lines are enabled 
    #else
      PMCS1BS = (GFX_EPMP_CS1_BASE_ADDRESS>>8);      // CS1 start address
      PMCON3 |= 0x0001;                       // PMA16 address line is enabled 
    #endif //USE_DOUBLE_BUFFERING

    PMCS1CFbits.CSDIS = 0;                    // enable CS
    PMCS1CFbits.CSP = EPMPCS1_CS_POLARITY;              // CS1 polarity 
    PMCS1CFbits.BEP = EPMPCS1_BE_POLARITY;              // byte enable polarity
    PMCS1CFbits.WRSP = EPMPCS1_WR_POLARITY;             // write strobe polarity
    PMCS1CFbits.RDSP = EPMPCS1_RD_POLARITY;             // read strobe polarity
    PMCS1CFbits.CSPTEN = 1;                   // enable CS port
    PMCS1CFbits.SM = 0;                       // read and write strobes on separate lines 
    PMCS1CFbits.PTSZ = 2;                     // data bus width is 16-bit 
  
    PMCS1MDbits.ACKM = 0;                      // PMACK is not used

    // The device timing parameters. Set the proper timing
    // according to the device used (the timing macros are defined in the hardware profile)
    PMCS1MDbits.DWAITB = EPMPCS1_DWAITB;              // access time 1 Tcy
    PMCS1MDbits.DWAITM = EPMPCS1_DWAITM;
    PMCS1MDbits.DWAITE = EPMPCS1_DWAITE;
    PMCS1MDbits.AMWAIT = EPMPCS1_AMWAIT;          // Note: adjust this delay for slower devices 

  #else
      PMCS1CFbits.CSDIS = 1;                   // disable CS1 functionality  
  #endif //#if defined (GFX_EPMP_CS1_BASE_ADDRESS)

  #if defined (GFX_EPMP_CS2_BASE_ADDRESS)

    PMCS2BS = (GFX_EPMP_CS2_BASE_ADDRESS>>8);        // CS2 start address

    PMCS2CFbits.CSDIS = 0;                    // enable CS

    PMCS2CFbits.CSP = EPMPCS2_CS_POLARITY;              // CS2 polarity 
    PMCS2CFbits.BEP = EPMPCS2_BE_POLARITY;              // byte enable polarity
    PMCS2CFbits.WRSP = EPMPCS2_WR_POLARITY;             // write strobe polarity
    PMCS2CFbits.RDSP = EPMPCS2_RD_POLARITY;             // read strobe polarity
    PMCS2CFbits.CSPTEN = 1;                   // enable CS port
    PMCS2CFbits.SM = 0;                       // read and write strobes on separate lines 
    PMCS2CFbits.PTSZ = 2;                     // data bus width is 16-bit 
  
    PMCS2MDbits.ACKM = 0;                      // PMACK is not used
    
    // The device timing parameters. Set the proper timing
    // according to the device used (the timing macros are defined in the hardware profile)
    PMCS2MDbits.DWAITB = EPMPCS2_DWAITB;              // access time 1 Tcy
    PMCS2MDbits.DWAITM = EPMPCS2_DWAITM;
    PMCS2MDbits.DWAITE = EPMPCS2_DWAITE;
    PMCS2MDbits.AMWAIT = EPMPCS2_AMWAIT;          // Note: adjust this delay for slower devices 


  #else  
    PMCS2CFbits.CSDIS = 1;                     // disable CS2 functionality  
  #endif //#if defined (GFX_EPMP_CS2_BASE_ADDRESS)
  
  PMCON2bits.RADDR = 0xFF;                  // set CS2 end address
  PMCON4 = 0xFFFF;                            // PMA0 - PMA15 address lines are enabled
  

  PMCON3bits.PTWREN = 1;                      // enable write strobe port
  PMCON3bits.PTRDEN = 1;                      // enable read strobe port
  PMCON3bits.PTBE0EN = 1;                     // enable byte enable port
  PMCON3bits.PTBE1EN = 1;                     // enable byte enable port
  PMCON3bits.AWAITM = 0;                      // set address latch pulses width to 1/2 Tcy
  PMCON3bits.AWAITE = 0;                      // set address hold time to 1/4 Tcy
  
  DelayMs(100);

  PMCON2bits.MSTSEL = 3;                    // select EPMP bypass mode (for Graphics operation)
  PMCON1bits.PMPEN = 1;                    // enable the module

  DelayMs(100);

}


Wäre wirklich sehr dankbar, wenn mir jemand weiterhelfen könnte.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.