mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2478 und STN Mono Dual Scan LCD


Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe eine schlaflose Nacht hinter mir. Ich möchte ein stinknormales 
Monochrom-LCD an einem LPC2478 betreiben, aber irgendwie bekomme ich 
keine Clocks. Beispiele für TFTs gibt es genug, aber Monochrom-Displays 
scheinen aus der Mode gekommen zu sein.

Das Display ist ein Sharp 64K101 (Pollin 120 623) mit 640*480 Pixel 
Dual-Scan, das ich mit 1 Bit per Pixel (also nur rein schwarz/weiss für 
Textdarstellung) betreiben will.

Meine Initialisierung:
  GpioInit();
  // Memory Accelerator Module init
  MAMCR_bit.MODECTRL = 0;
  MAMTIM_bit.CYCLES  = 3;   // FCLK > 40 MHz
  MAMCR_bit.MODECTRL = 2;   // MAM functions fully enabled
  // Init clock
  InitClock();

#define C_GLCD_H_SIZE           640
#define C_GLCD_H_PULSE          4
#define C_GLCD_H_FRONT_PORCH    6
#define C_GLCD_H_BACK_PORCH     6
#define C_GLCD_V_SIZE           480
#define C_GLCD_V_PULSE          1
#define C_GLCD_V_FRONT_PORCH    1
#define C_GLCD_V_BACK_PORCH     1
#define C_GLCD_CLK_PER_LINE     (C_GLCD_H_SIZE/4 + C_GLCD_H_PULSE + C_GLCD_H_FRONT_PORCH + C_GLCD_H_BACK_PORCH)
#define C_GLCD_LINES_PER_FRAME  (C_GLCD_V_SIZE/2 + C_GLCD_V_PULSE + C_GLCD_V_FRONT_PORCH + C_GLCD_V_BACK_PORCH)
#define C_GLCD_PIX_CLK          (6500000UL)
#define C_GLCD_ENA_DIS_DLY      10000

#define VGAADDR_U 0x40006a00
#define VGAADDR_L 0x4000b500

  // Init GLCD controller
  PINSEL11_bit.LCDM=2;      // 4Bit Mono STN Dual
  PINSEL11_bit.LCDPE=1;     // LCD Enabled
  PCONP_bit.PCLCD = 1;      // enable LCD controller clock
  CRSR_CTRL_bit.CrsrOn = 0; // Disable cursor
  LCD_CTRL_bit.LcdEn = 0;   // disable GLCD controller
  LCD_CTRL_bit.LcdBpp= 0;   // 1 bpp
  LCD_CTRL_bit.LcdBW=  1;   // monochrome
  LCD_CTRL_bit.LcdTFT= 0;   // STN panel
  LCD_CTRL_bit.LcdMono8=0;  // 8 Bit Interface
  LCD_CTRL_bit.LcdDual=1;   // dual panel
  LCD_CTRL_bit.BGR   = 0;   // RGB order
  LCD_CTRL_bit.BEBO  = 0;   // little endian byte order
  LCD_CTRL_bit.BEPO  = 0;   // little endian pix order
  LCD_CTRL_bit.LcdPwr= 0;   // disable power
  LCD_CTRL_bit.LcdVComp=0;  // no irq
  LCD_CTRL_bit.WATERMARK=0;

  // init pixel clock
  temp=(SYS_GetFsclk() / (Int32U)C_GLCD_PIX_CLK);
  LCD_CFG_bit.CLKDIV =  temp;
  LCD_POL_bit.CLKSEL = 0;   // clock source for the LCD block is CCLK
  LCD_POL_bit.ACB    = 0;   // AC Bias not used
  LCD_POL_bit.IVS    = 0;   // LCDFP pin is active HIGH
  LCD_POL_bit.IHS    = 0;   // LCDLP pin is active HIGH
  LCD_POL_bit.IPC    = 0;   // Data is driven out into the LCD on the rising edge
  LCD_POL_bit.IOE    = 0;   // no Invert Output Enable
  LCD_POL_bit.CPL    = C_GLCD_CLK_PER_LINE-1;
  LCD_POL_bit.BCD    = 0;   // bypass internal clk divider
  LCD_POL_bit.PCD_LO = 6;   // Dual Panel Mono: /8
  LCD_POL_bit.PCD_HI = 0;
  // init Horizontal Timing
  LCD_TIMH_bit.HBP   =  C_GLCD_H_BACK_PORCH - 1;
  LCD_TIMH_bit.HFP   =  C_GLCD_H_FRONT_PORCH - 1;
  LCD_TIMH_bit.HSW   =  C_GLCD_H_PULSE - 1;
  LCD_TIMH_bit.PPL   =  (C_GLCD_H_SIZE/(16*4)) - 1;
  // init Vertical Timing
  LCD_TIMV_bit.VBP   =  C_GLCD_V_BACK_PORCH;
  LCD_TIMV_bit.VFP   =  C_GLCD_V_FRONT_PORCH;
  LCD_TIMV_bit.VSW   =  C_GLCD_V_PULSE;
  LCD_TIMV_bit.LPP   =  (C_GLCD_V_SIZE/2) - 1;
  // Frame Base Address doubleword aligned
  LCD_UPBASE         =  VGAADDR_U;
  LCD_LPBASE         =  VGAADDR_L;

  for(volatile Int32U i = C_GLCD_ENA_DIS_DLY; i; i--);
  LCD_CTRL_bit.LcdEn = 1;   //Enable LCD
  for(volatile Int32U i = C_GLCD_ENA_DIS_DLY; i; i--);
  LCD_CTRL_bit.LcdPwr= 1;   // enable Power
  for(volatile Int32U i = C_GLCD_ENA_DIS_DLY; i; i--);
  FIO1SET=(1<<L_EN_VLCD);   // enable VLCD -18V

Was mich stutzig macht: Wenn ich LCD_POL_bit.BCD auf 1 setze, habe ich 
meinen gewünschten Pixeltakt, aber weder HSYNC noch VSYNC. Dass die Pins 
richtig sind, habe ich dadurch festgestellt, indem ich mal in LCD_POL 
die IHS und IVS Bits gesetzt habe, wodurch sich der Pegel auf den 
entsprechenden Pins geändert hat.

CPU-Clock ist 72 MHz, erzeugt mit einem 12 MHz Quarz. Der ist 
augenscheinlich da, am Quarz messe ich jedenfalls meine 12 MHz.

Hat hier jemand eine Idee?

fchk

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.