Forum: Mikrocontroller und Digitale Elektronik DOGM204A Tot?


von feg_zeven (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jungs.


Sitze gerade an der Programmierung eines LCD der DOGM-Reihe. Speziell 
handelt es sich um ein 204A mit dem SSD1803-Controller. Ich bekomme dem 
Display einfach kein Leben eingehaucht.
Mein erster Versuch, das Display mit I2C anzusteuern schlug fehl. Jetzt 
wollte ich es mal über SPI probieren aber es funzt auch nicht. Habe 
schon zwei unterschiedliche Initialisierungssequenzen ausprobiert - 
Leider ohne Erfolg.
Hat jemand Erfahrung oder ähnliche Probleme mit dem Display?
Hier auch mal mein Code:
1
#include <asf.h>
2
#include "Clock.h"
3
#include "ssd1803a.h"
4
#include <util/delay.h>
5
6
7
#define F_CPU 32000000UL
8
9
10
11
#define CONTRSTART 35
12
#define CONTRSPAN  15
13
14
15
int main(void)
16
{
17
  Clock_init();      // Clock  ein
18
  
19
  PORTE_DIRSET  =   PIN2_bm;;
20
  PORTE_OUTCLR  =    PIN2_bm;
21
  
22
  SSD1803A_SPI_Init();    // SPIC init
23
  _delay_ms(10);
24
  SSD1803A_init_reg ();    // LCD ILI9325C init
25
  _delay_ms(10);
26
  
27
  SetContrast(35);
28
29
  SetPostion(LINE1);
30
  WriteString("Hello World");
31
  SetPostion(LINE2);
32
  WriteString("4 Lines 20 chars");
33
  SetPostion(LINE3);
34
  WriteString("3. Zeile");
35
  SetPostion(LINE4);
36
  WriteString("Def 8 own char:  ");
37
  WriteChar(0);
38
  WriteChar(2);
39
40
41
42
  while(1)
43
  {
44
    PORTE_OUTTGL  =    PIN2_bm;  //Blink an LED
45
    _delay_ms(500);
46
    
47
    WriteIns(0xFF);
48
49
50
51
  }
52
}

Die Inititlaisierung:
1
void SSD1803A_init_reg (void)
2
{
3
  
4
  LCD_Reset();
5
    
6
    //************* Start Initial Sequence **********//
7
    //init Display
8
9
/*
10
    WriteIns(0x3A);  //8-Bit data length extension Bit RE=1; REV=0
11
    WriteIns(0x09);  //4 line display
12
    WriteIns(0x06);  //Bottom view
13
    WriteIns(0x1E);  //Bias setting BS1=1
14
    WriteIns(0x39);  //8-Bit data length extension Bit RE=0; IS=1
15
    WriteIns(0x1B);  //BS0=1 -> Bias=1/6
16
    WriteIns(0x6E); //Devider on and set value
17
    WriteIns(0x57); //Booster on and set contrast (BB1=C5, DB0=C4)
18
    WriteIns(0x72); //Set contrast (DB3-DB0=C3-C0)
19
    WriteIns(0x38); //8-Bit data length extension Bit RE=0; IS=0
20
  */
21
  //0x3A, 0x0B, 0x06, 0x3D, 0x6E, 0x54, 0x7C, 0x38, 0x0F, 0x01
22
    
23
 
24
    //init Display
25
    WriteIns(0x3A);  //8-Bit data length extension Bit RE=1; REV=0
26
    WriteIns(0x0B);  //4 line display
27
    WriteIns(0x06);  //Bottom view
28
    WriteIns(0x3D);  //Bias setting BS1=1
29
    WriteIns(0x6E);  //8-Bit data length extension Bit RE=0; IS=1
30
    WriteIns(0x54);  //BS0=1 -> Bias=1/6
31
    WriteIns(0x7C); //Devider on and set value
32
    WriteIns(0x0F); //Booster on and set contrast (BB1=C5, DB0=C4)
33
    WriteIns(0x72); //Set contrast (DB3-DB0=C3-C0)
34
    WriteIns(0x01); //8-Bit data length extension Bit RE=0; IS=0
35
  
36
    
37
   ClrDisplay();
38
    DisplayOnOff(DISPLAY_ON | CURSOR_ON | BLINK_ON);
39
40
      
41
    }

Die Schreib-Funktion:
1
void WriteData(char data)
2
{
3
  SET_SSD1803A_E_LOW    
4
  
5
  SPIC_DATA=0xFA;//Send 5 synchronisation bits, RS = 0, R/W = 0
6
  Spic_Busy();
7
  SPIC_DATA=(data & 0x0F);//send lower data bits
8
  Spic_Busy();
9
  SPIC_DATA=((data>>4) & 0x0F);//send higher data bits
10
  Spic_Busy();
11
  SSD1803A_E_HIGH  
12
}
13
}


Vom Code her müsste es doch eigentlich klappen oder sieht jemand einen 
Fehler?

Verschaltet habe ich es wie auf dem Bild im Anhang. An SO, SI und SCLK 
sind Pull-Up-Widerstände angebracht.

Noch ein anderes Problem: Das 500ms-Delay in der While-Schleife im 
Hauptprogramm ist von viel zu kurzer Dauer. Das tatsächliche Delay 
beträgt schätzungweise 50ms. Ich schätze das alle anderen Delays in den 
Funktionen ebenfalls viel zu kurz sind. F_CPU ist ja eigentlich im 
Hauptprogramm definiert und entspricht auch dem eingestellten Takt... 
Woran könnte das liegen?

Viele Grüße

von Georg G. (df2au)


Lesenswert?

feg_zeven schrieb:
> Woran könnte das liegen?

Welcher Compiler wird verwendet?

von Frank K. (fchk)


Lesenswert?

feg_zeven schrieb:

> Noch ein anderes Problem: Das 500ms-Delay in der While-Schleife im
> Hauptprogramm ist von viel zu kurzer Dauer. Das tatsächliche Delay
> beträgt schätzungweise 50ms. Ich schätze das alle anderen Delays in den
> Funktionen ebenfalls viel zu kurz sind. F_CPU ist ja eigentlich im
> Hauptprogramm definiert und entspricht auch dem eingestellten Takt...
> Woran könnte das liegen?

F_CPU muss definiert sein, bevor Du delay.h einbindest. Am Besten packst 
Du das #define ganz an den Anfang.

fchk

von feg_zeven (Gast)


Lesenswert?

Ah ok Danke. Probiere ich dann gleich mal aus. :)

Was das Display angeht hat niemand eine Idee?

von feg_zeven (Gast)


Lesenswert?

Es funktioniert nun. Konnte heute mithilfe eines Oszi die Signalverläufe 
anschauen und so konnten einige Fehler in der verwendeten SPI-Bibliothek 
zum SSD1803 aufgespürt werden.


viele Grüße

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.