LCD Display defekt oder einstellungen ändern ?

OP #3264052
Lesenswert?

Ich verwende zum ersten mal ein DOG display von Electronic Assembly und 
zwar das EA DOGXL160B-7 (STN neg. blau transmissiv) mit blauer 
backlight.

nur schauts nach der init komisch aus kann mir wer sagen ob es defekt 
ist ? bilder hab ich angehängt.

oder mir vlt tipps geben welche einstellungen ich ausprobieren soll beim 
uc1610

--
nutzloser Anhang entfernt, da Inhalt weiter unten erneut gepostet.

-rufus
OP #3264076
Lesenswert?

Verbindungen display zu µC:

Display:       atmega8L:
BM0       <--> GND
D6        <--> 3.3V

SDA       <--> PB3
SCK       <--> PB5
CD        <--> PB0
CS        <--> GND

RST       <--> 3.3V

kondensatoren sind wie laut datenblatt angeschlossen und gleiche 
kapazität

ich freu mich auf jede antwort ;)
Angehängte Dateien:
OP #3264102
Lesenswert?

ich kann diese library irgendwie nicht so verwenden wie der , der sie 
geschrieben hat , der autor verwendet ja den SPI 4-wire mode. wenn ich 
aber CD und CS anschliesse funktioniert die init nicht(keine spannung 
VLCD).
deswegen hab ichs mit 3-wire probiert. ich glaub der fehler liegt in 
diesem code stück:
1
//-----------------------------------------------------------------------------
2
// sendet einen Befehl an das Display
3
//-----------------------------------------------------------------------------
4
void UC1610_send(UC1610_CMD_t mode, unsigned char wert) { // interne Funktion
5
  if((mode==UC1610_CMD1) || (mode==UC1610_CMD2)) {
6
    // mode auf control
7
    UC1610_PORT&=~UC1610_A0;
8
  }
9
  else {
10
    // mode auf data
11
    UC1610_PORT|=UC1610_A0;
12
    UC1610_LCD.akt_col_adr+=1;
13
  }
14
  
15
  // Chip-Select auf Lo
16
  UC1610_PORT&=~UC1610_CS;
17
  
18
  //---------------------------------------------------
19
  //---- Byte per SPI schreiben
20
  //---------------------------------------------------
21
  SPI_SEND (wert);
22
  
23
  
24
  // Chip-Select auf Hi
25
  if((mode==UC1610_CMD1) || (mode==UC1610_DATA)) {
26
    // nur wenn kein mehrbyte befehl
27
    UC1610_PORT|=UC1610_CS;
28
  }
29
}
 laut datenblatt:
"3 WIRE, 8-BIT SPI-MODE

Jede Änderung des Pegels am Pin
CD setzt den internen Bit-Zähler zu-
rück (CS0 kann fest auf LO liegen).
Danach werden die 8-Bit in das Dis-
play getaktet (MSB zuerst). Der Pe-
gel am Pin CD entscheidet ob Da-
ten oder Befehle übertragen werden.
Der  Pegel  darf  sich  während  der
Übertragung der 8-Bits am Pin CD
nicht ändern.
Die  Taktrate der CLK Leitung kann
je  nach  Versorgungs-
spannung  und  Leitungs-
eigenschaften bis zu 8 MHz
betragen."

versteh ich das richtig es muss CD nach dem befehl/daten togglen UND der 
richtige pegel anliegen?

vlt kann ich so wie der code jetzt ist nur befehle senden aber keine 
daten ?
#3264131
Lesenswert?

chris __ schrieb:
> wieso SPI funktioniert einwandfrei
Dann muss das Display ja auch funktionieren.
Dass SS auf Ausgang steht, ist kein MUSS. Stellt aber 100%ig sicher, 
dass das SPI auf Master steht und auch bleibt.

> versteh ich das richtig es muss CD nach dem befehl/daten togglen UND der
> richtige pegel anliegen?
Ja sicher. Aber nicht toggeln. Toggeln ist Umschalten, ohne zu wissen, 
was vorher war. Damit lässt man Leds blinken. Hier muss explizit 0 oder 
1 ausgegeben werden.
> vlt kann ich so wie der code jetzt ist nur befehle senden aber keine
> daten ?
Wie sieht der Pin denn aus, wenn geschrieben wird?

Dein Display sieht jedenfalls recht uninitialisiert aus. Nach der 
Initialisierung solltest du ein leeres Display mit einer vernünftigen 
Kontrasteinstellung haben. Hinten im Datenblatt ist ein 
Initialisierungsbeispiel drin. Damit läuft das auch.
Programmier das selbst und nimm nicht irgendein Programm, von dem du nur 
glaubst, dass es läuft. So schwer ist das nicht. Wenn du einen Punkt auf 
das Display bekommst, geht auch der Rest. Dann kannst du dir immer noch 
das andere Programm vornehmen.

mfg.
OP #3264133
Lesenswert?

hab mal was geändert


//---------------------------------------------------------------------- 
-------
// sendet einen Befehl an das Display
//---------------------------------------------------------------------- 
-------
void UC1610_send(UC1610_CMD_t mode, unsigned char wert) { // interne 
Funktion
  if((mode==UC1610_CMD1) || (mode==UC1610_CMD2)) {
    // mode auf control
    UC1610_PORT&=~(1<<UC1610_A0);
  }
  else {
    // mode auf data
    UC1610_PORT|=(1<<UC1610_A0);
    UC1610_LCD.akt_col_adr+=1;
  }

  // Chip-Select auf Lo
  UC1610_PORT&=~UC1610_CS;

  //---------------------------------------------------
  //---- Byte per SPI schreiben
  //---------------------------------------------------
  SPI_SEND (wert);


  // CD TOGGLEN FÜR BIT ZÄHLER zurücksetzen
  if((mode==UC1610_CMD1) || (mode==UC1610_DATA)) {
    // nur wenn kein mehrbyte befehl
    UC1610_PORT^=(1<<UC1610_A0);
  }
}

jetzt ist das display komplett weiß (keine freien stellen mehr)
OP #3264278
Lesenswert?

hab den fehler gefunden denk ich aufjedenfall ist der kontrast jetzt 
schöner .

es lag am Double-byte-command. im datenblatt des UC1610 hab ich dazu 
nichts gefunden aber aus der library von dem typen entnehme ich das CD 
NICHT togglen darf wenn der double-byte-command gesendet wird.

sso sieht das display mit diesem code aus

"Ein Display kann einen auch in den Wahnsinn treiben, wenn es zwar alles
richtig anzeigt, man aber nichts sieht, weil der Kontrast nicht stimmt."

stimmt :-)
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren