Forum: Mikrocontroller und Digitale Elektronik ST7565R mit PIC33F


von Lukas E. (lukas_e)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich und zwei Kollegen sollen ein Board entwerfen das ein LCD-Display 
ansteuert.

ST7565R:
Wir verwenden ein 4-line interface. (keine read Funktionen möglich)
Abgeglichen mit den ST7565R.pdf.

Init für das Display:
1
//turn on the Power and keep /RES pin at L
2
  // RES = RB7
3
  TRISBbits.TRISB7 = CLR;
4
  PORTBbits.RB7 = CLR;
5
  //wait for power stabilized
6
  wait_500ms();
7
  //release state /RES pin to H
8
  PORTBbits.RB7 = SET;
9
  //wait < 1ms
10
  wait_1ms();
11
  WriteSPI1(0x40); //LCD_display_start_line_set(0x0);
12
  WriteSPI1(0xA0); //LCD_ADC_select(0); //0: normal, 1: reverse
13
  WriteSPI1(0xC0); //CD_common_output_mode_select(0); 
14
  WriteSPI1(0xA6); //LCD_display_direction 0: normal, 1: reverse
15
  WriteSPI1(0xA2); //LCD_bias_set(0); 
16
  WriteSPI1(0x2F); //LCD_power_control_set(0x07); // see command description
17
  WriteSPI1(0xF8); //LCD_booster_raito_set(0x02);
18
  WriteSPI1(0x00); //x4
19
  WriteSPI1(0x27); //LCD_voltage_regular_internal_resistor(0x06); // see ST7565R.pdf page 45
20
  WriteSPI1(0x81); //LCD_electric_volume_register_mode_set(0x10); // LCD brightness
21
  WriteSPI1(0x10); //mittel
22
  WriteSPI1(0xAF); //LCD_displayON_OFF(1);
23
  
24
  WriteSPI1(0xA4); //LCD_display_all_points
SPI init
1
IFS0bits.SPI1IF = 0;
2
  IEC0bits.SPI1IE = 0;   
3
  SPI1CON1bits.MSTEN = 1;    // slave mode, wenn 1 -> Master Mode Enabled
4
5
  SPI1CON1bits.PPRE = 0b0;  // primary prescaler -> SPI1CONbits.PPRE = 0x0000,  
6
  SPI1CON1bits.SPRE = 0b0;  // secondary prescaler -> SPI1CONbits.SPRE = 0x0000; -> 79MHz Oszillator /(64*8) ~ 155kHz
7
                                        // gemessen wird mit dem Oszilloskop jedoch 77,5kHz -> liegt immer noch im Tolleranzbereich des Controllers
8
9
  SPI1CON1bits.CKP = 1;    // idle state for clock is a low level; active state is a high level
10
  SPI1CON1bits.CKE = 0;    // output data changes from Idle clock state to active clock state
11
  SPI1CON1bits.MODE16 = 0;  // 8-bit communication ->0, wenn 1 -> communication is word-wide (16 bits)
12
  SPI1CON1bits.DISSCK = 0;  // Internal SPI Clock is enabled
13
  SPI1CON1bits.DISSDO = 0,  // SDO1 wird durch das Modul gesteuert
14
  SPI1CON2bits.SPIFSD = 0;  // 1 = Frame sync pulse input (slave)
15
  SPI1CON2bits.FRMEN = 0;    // 0 = Framed SPI support disabled
16
17
  SPI1STATbits.SPITBF = 0;  // Data to be transmitted can be written to SPIxBUF by the user software at any time
18
                // as long as the SPITBF (SPIxSTST<1>) status bit is clear. The write can occur while 
19
                // SPIxSR is shifting out the previously written data, allowing continuous transmission.  
20
21
  SPI1STATbits.SPIROV = 0;  // Clear the SPIROV (SPIxSTAT<6>) status bit.
22
  SPI1STATbits.SPIEN = 1;    // Configure SPI1 module, Enable SPI module (SPIxSTAT <15>)
Problem:
Display leuchtet, reagiert jedoch nicht auf die Init.

von Lukas E. (lukas_e)


Angehängte Dateien:

Lesenswert?

Weiter Infos:

Es handelt sich um das LCD von Displaytech 64128M BW mit dem eingebauten 
ST7565R.
Wir haben das Display wie laut PDF beschalten (Foto) doch wenn wir die 
Spannungen V0-V4 messen haben diese aber nicht den richtigen Wert bzw. 
wissen wir nicht wirklich wie der einzustellen ist und welche Spannungen 
da überhaupt anliegen sollen!?
Darum könnte es auch eventuell an der Hardware liegen!

Also das LCD reagiert auf gar nichts, die WriteSPI Funktion haben wir 
bereits auf dem Oszi angesehen und müsste soweit passen! So zu sagen wir 
schicken die hoffentlich richtige Init aufs LCD aber es passiert einfach 
nichts!

Gibt es wen der in dieser Materie mehr Erfahrungen hat und ev. den 
Fehler erkennt, das wäre uns sehr hilfreich...

von Frank K. (fchk)


Lesenswert?

Schau hier mal nach, ob Ihr alles richtig gemacht habt. Anderes 
Displays, gleicher Controller:

http://www.lcd-module.de/pdf/grafik/dogm128.pdf

Eventuell probiert Ihr's mal mit diesem Typ, wenn das dann läuft, dann 
sollte das andere auch funktionieren.

von Lukas E. (lukas_e)


Lesenswert?

Erstmal danke!
Haben uns eben zwischnen diesem und den Displaytech entscheiden müssen 
und haben eben das Displaytech gewählt da die beiden sehr ähnlich sind.

Die Beschaltung habe ich nochmal gechekt, die ist ok.

Versorgung haben wir 3,3V selbe Spannung mit der auch der PIC versorgt 
wird.

Doch wie ich herauslese muss Vout ~12V betragen die wir nicht haben (mit 
Multimeter öfters gemessen).
An was kann das liegen, muss da noch irgendwas eingestellt werden?


Lg

von Frank K. (fchk)


Lesenswert?

Lukas E. schrieb:

> Doch wie ich herauslese muss Vout ~12V betragen die wir nicht haben (mit
> Multimeter öfters gemessen).
> An was kann das liegen, muss da noch irgendwas eingestellt werden?

Vout kommt erst, wenn Ihr die interne Ladungspumpe des LCD aktiviert 
habt. Bevor das Display richtig initialisiert ist, kommt da auch nichts.

Heißt also: mit einem Logicanalyzer den Datenfluss prüfen. Wenn Ihr 
keinen habt, besorgt Ihr Euch eben einen. So teuer sind die auch nicht.

fchk

von Arc N. (arc)


Lesenswert?

Sind P/S, A0 und RST korrekt beschaltet und angesteuert?
SPI Modus richtig bzw. andere getestet.
Die Initialisierung sieht hier so aus
1
  DOGM128SELECT();
2
  DOGM128A0HIGH();
3
  DOGM128RSTHIGH();
4
5
  DOGM128RSTLOW();
6
  LcdWaitUs(500);
7
  DOGM128RSTHIGH();
8
9
  DOGM128A0LOW();
10
11
  // initialization sequence from data sheet dogm128.pdf 10.2008
12
  DOGM128SEND(0x40);
13
  DOGM128SEND(0xa1);
14
  DOGM128SEND(0xc0);
15
  DOGM128SEND(0xa6);
16
  DOGM128SEND(0xa2);
17
  DOGM128SEND(0x2f);
18
  DOGM128SEND(0xf8);
19
  DOGM128SEND(0x00);
20
  DOGM128SEND(0x27);
21
  DOGM128SEND(0x81);
22
  DOGM128SEND(0x16);
23
  DOGM128SEND(0xac);
24
  DOGM128SEND(0x00);
25
  DOGM128SEND(0xaf);
26
27
  DOGM128DESELECT();

von Lukas E. (lukas_e)


Lesenswert?

Wen es interessiert wir haben die Lösung:

Haben in der Schule ein Osi mit Logikanalyser drangehängt, dabei kam 
heraus das etwas falsches vom PIC ausgegeben wird (z.B. B0 statt A0).

Danach haben wir Wartezeit in der WriteSPI Funktion eingebaut 0,25ms 
siehe da es kam das richtige raus und alle Pixel vom LCD leuten!!! :D

Danach haben wir die Spannungen gemessen und passen auch (Vout 12,4V)!


Lg

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.