Forum: Mikrocontroller und Digitale Elektronik MSP430 G2553 mit DOGL128W-6 Display


von Christian D. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde,

ich versuche seit einigen Tagen den DOGL128W-6 LCD der Firma 
Electronik-Assembly anzusteuern, leider ohne Erfolg.


Ich habe mit einem Logik-Analysator direkt an den Pins des LCD's die 
Pegel gemessen. Nach meiner Auffassung kommen da auch genau die 
Hexa-werte die ich zur Initialisierung brauche an, nur leider gibt der 
Display nichts von sich und da ich leider aus dem Display nichts 
auslesen kann, weis ich nicht ob es jetzt an meiner Programmierung liegt 
oder am Display selbst....

Der Display wurde vor ca. einem Monat mit der vom Hersteller 
Vertriebenen Fassung am PC überprüft un lief ohne Probleme! Also möchte 
ich einen fehlerhaften Display nahezu ausschließen.

Ich denke eher, es muss irgend etwas generelles sein, was ich falsch 
mache:-/ ich weis nur leider nicht was. Vielleicht könnt Ihr mir bei 
diesem Problem helfen.

Zu dem Programm: Ich habe eine Beispieldatei von Ti umgemodelt um Fehler 
z.B. in der SPI init auszumerzen. Ich übertrage die Hexa-Werte alle 
einzeln um zwischendurch besser anhalten zu können, leider hat mir das 
bis jetzt nicht wirklich etwas gebracht.

Das ungenutzte und dann automatisch gesetzte RX-Buffer-Flag fetze ich 
vor jedem Senden zurück, so dass es daran nicht liegen kann(hoffe ich)

Ich habe auch schon versucht, nach jedem gesendeten wert CS auf '1' 
und/oder A0 auf '1' zu setzen. Leider hat das auch nichts geholfen...

Ich hoffe Ihr habt noch die eine oder andere Idee?!


Danke schon mal und viele Grüße

Christian

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Vergleiche doch mal die Initialisierung am PC mit der, die Du hier 
machst -- mit Deinem Logikanalysator solltest Du schnell die 
Unterschiede sehen können.

von Christian D. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Rufus,

ich mache die Initialisierung, die der Hersteller in dem Datenblatt 
vorgibt. Deswegen wundert es mich ja, das es nicht funktioniert... Oder 
Reden wir aneinander vorbei?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Christian D. schrieb:
> Oder Reden wir aneinander vorbei?

Du schriebst, daß Du einen funktionierenden Testaufbau mit einem PC 
hast. Nimm den, häng Deinen Logikanalysator da dran und sieh Dir an, ob 
sich das, was der anzeigt, von dem unterscheidet, was Du an Deinem nicht 
funktionierenden Aufbau mit dem MSP430 misst.

Es geht also nicht darum, das Geschreibsel in den --meiner Ansicht nach 
recht schrecklichen-- EA-Datenblättern zu interpretieren, sondern ein 
laufendes und ein nichtlaufendes System auf Unterschiede zu untersuchen. 
Das hilft dann eventuell auch, den bei EA-Datenblättern immer 
vorhandenen Interpretationsspielraum einzugrenzen.

von Michael P. (protactinium)


Lesenswert?

Hallo Christian,

auf der Supportseite von EA gibt es ein Beispiel für die Initialisierung 
auf einem MSP430. Schau dir den Code doch mal an, vlt findest du damit 
ja das Problem.

von Christian D. (Gast)


Lesenswert?

Wenn das so einfach wäre... leider habe ich den Adapter nicht hier und 
auch nicht die Möglichkeit wieder an diesen zu kommen. Es geht mir eher 
um die Fragen:

wird das SPI richtig genutzt, ich wundere mich etwas über die einzelnen 
"Taktblöcke", ist das normal so? Kommt das vom Hardware SPI?

Ich befürchte ja immer noch, dass ich irgendeinen generellen Fehler 
mache, weis aber leider nicht weiter, mit dem PC-Modul wollte ich nur 
sagen, dass das LCD-Modul in Ordnung ist

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Christian D. schrieb:
> ich wundere mich etwas über die einzelnen
> "Taktblöcke", ist das normal so? Kommt das vom Hardware SPI?

Die SPI-Schnittstelle erzeugt nur dann ein Taktsignal, wenn sie Daten zu 
übertragen hat, insofern ist das normal.

> Ich habe eine Beispieldatei von Ti umgemodelt um Fehler
> z.B. in der SPI init auszumerzen.

Poste mal Deinen Code, und erkläre mal nebenbei, was für Fehler Du in 
welchem TI-Beispielcode beseitigt haben willst.

> Das ungenutzte und dann automatisch gesetzte RX-Buffer-Flag
> fetze ich vor jedem Senden zurück

Das klingt wirr.

Achja: Poste auch einen Schaltplan, daß man sehen kann, wie Dein 
Display mit dem 'G2553 verbunden ist.

von Dr. S. (dr_schaefer)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Poste auch einen Schaltplan, daß man sehen kann, wie Dein
> Display mit dem 'G2553 verbunden ist.

Das könnte wirklich hilfreich sein...

So funktionierts bei mir, 3,3V Single Supply, ist aber bestimmt noch 
verbesserungsfähig:
1
void SetupDisplay(void)
2
{
3
  //Ports:
4
  //
5
  //SCL     P5.3
6
  //MOSI    P5.1
7
  //#CS1B    P5.0
8
  //A0    P4.7
9
  //#Reset  P4.6  !!!Only Pull Down (active or passive)!!!
10
11
  UCB1CTL1 |= UCSWRST;
12
  
13
  //reset on p4.6 fehler im layout -> nun aktiv
14
  P4OUT &= ~0x80;    //set A0 to L(0)
15
  P4DIR |= 0x80;
16
  P4OUT &= ~0x40;    
17
  
18
  P5SEL |= 0x0A;    //mosi, sck
19
  P5OUT |= 0x01;    //#CS 1 -> not active
20
  P5DIR |= 0x0B;
21
  
22
  UCB1CTL0 = 0x69;
23
  UCB1CTL1 = UCSSEL0 + UCSSEL1 + UCSWRST;  //smclk
24
  UCB1BR0 = 1;
25
  UCB1BR1 = 0;
26
27
  return;
28
}
29
30
void InitDisplay(void)
31
{
32
  char aucInitCmds[] = {
33
    0x40,    // Display start line 0
34
    0xa1,    // ADC reverse
35
    0xc0,    //  Normal COM0~COM63
36
    0xa6,    // Display normal
37
    0xa2,    // Set bias 1/9 (Duty 1/65)
38
    0x2f,    // Booster, Regulator and Follower on
39
    0xf8,    // Set internal Booster to 4x
40
    0x00,    // Set internal Booster to 4x
41
    0x27,    // Contrast set, V0 voltage regulator set
42
    0x81,    // Contrast set, Electronic volume mode set
43
    0x16,    // Contrast set, Electronic volume changed
44
    0xac,    // Indicator set
45
    0x01,    // Indicator on (off!?)
46
    0xaf};    // Display on
47
  
48
  WriteCmdsToLCD(14,&aucInitCmds[0]);
49
  
50
  return;
51
}
52
53
void WriteCmdsToLCD(unsigned int uiCount, char* pucData)
54
{
55
  unsigned int i=0;
56
  
57
  UCB1CTL1 &= ~UCSWRST;
58
  
59
  //cs low
60
  P5OUT &= ~0x01;
61
  
62
  for(i=0;i<uiCount;i++)
63
  {
64
    while(!(UC1IFG & UCB1TXIFG));
65
    UCB1TXBUF = *pucData;
66
    pucData++;
67
  }
68
  while(!(UC1IFG & UCB1TXIFG));
69
  
70
  //cs high
71
  P5OUT |= 0x01;
72
  
73
  UCB1CTL1 |= UCSWRST;
74
  return;
75
}
76
77
void StringToLCD(char ucPage,char ucColumn,char *sText)  //page means row (unsigned char *sText)
78
{  
79
  unsigned int i=0;
80
  unsigned int k=0;
81
  char aucGeheZu[] = {0xB0,0x10,0x00}; //seite0, high nibble0, low nibble0
82
  
83
  aucGeheZu[0] |= ucPage;
84
  aucGeheZu[1] |= (ucColumn >> 4);
85
  aucGeheZu[2] |= (ucColumn & 0x0Fu);
86
  WriteCmdsToLCD(3,&aucGeheZu[0]);
87
  
88
  
89
  UCB1CTL1 &= ~UCSWRST;
90
  
91
  
92
  P4OUT |= 0x80;    //set A0 to H(1)
93
  
94
  //cs low
95
  P5OUT &= ~0x01;
96
  
97
  
98
  //write text
99
  while(sText[i])
100
  {
101
    k=0;
102
    while((k<5)&(ucColumn<128))
103
    {
104
      while(!(UC1IFG & UCB1TXIFG));
105
      UCB1TXBUF = kaucASCIITabelle[sText[i]][k++];
106
      ucColumn++;
107
    }
108
    //insert extra space
109
    //if(1)
110
    //{
111
      while(!(UC1IFG & UCB1TXIFG));
112
      UCB1TXBUF = 0 ;
113
      ucColumn++;
114
    //}
115
    i++;
116
  }
117
  
118
  while(!(UC1IFG & UCB1TXIFG));
119
  
120
  //cs high
121
  P5OUT |= 0x01;
122
  
123
  P4OUT &= ~0x80;    //set A0 to L(0)
124
  
125
  UCB1CTL1 |= UCSWRST;
126
  
127
  return;
128
}

von Dr. S. (dr_schaefer)


Lesenswert?

Anhang:
Ich habe gerade gesehen, dass ich das DOG M 128W-6 benutze, nicht DOG 
W 128W-6. Sieht aber im Datenblatt nach der gleichen initialisierung 
aus.

von Christian D. (Gast)


Lesenswert?

Guten Abend,


                  MSP430G2xx3
//                 -----------------
//             /|\|              XIN|-
//              | |                 |
//              --|RST          XOUT|-
//                |                 |
//                |             P1.2|-> Data Out (UCA0SIMO)
//                |                 |
//          LED <-|P1.0         P1.1|<- Data In (UCA0SOMI) braucht das?
//                |                 |
//  Slave reset <-|P1.5         P1.4|-> Serial Clock Out (UCA0CLK)
//                |                 |
//                |                 |
//                |                 |
//          CS  <-|P1.3             |
//                |                 |
//          A0  <-|P1.6             |

so sieht das ganze aus, habe die Schaltung im Moment erstmal auf nem 
Steckbrett aufgebaut. P1.1 wird nicht genutzt, der stammt noch auf dem 
SPI-Beispiel von TI.


Also zu dem Flag: Ich habe gelesen, das bei SPI die Übertragung synchron 
abläuft, d.h. der MSP versucht während des Sendens etwas zu lesen, was 
im empfangsbuffer zwischengespeichert wird, liest man den Buffer nicht 
aus, löst dieses Flag aus.

Ich habe die Codes verglichen und für mich sehen die identisch aus, halt 
nur Derivat bedingte unterschiede...  natürlich mache ich das alles 
"manuell" um besser Breakpoints setzen zu können....

Ich bin langsam echt am verzweifeln:-/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wiedervorlage:

> Poste mal Deinen Code, und erkläre mal nebenbei, was für Fehler Du in
> welchem TI-Beispielcode beseitigt haben willst.

von Christian D. (Gast)


Lesenswert?

Hallo Leute,


ich habe heute endlich den Fehler gefunden! Und zwar hat mein Steckbrett 
einen Wackelkontakt! Jetzt habe ich das alles auf einer Platine fest 
verlötet und alles läuft wunderbar! Mein Programm ist vollkommen korrekt 
nur etwas umständlich aber das wird sich nun ändern;-)

Danke für die schnelle Hilfe

Viele Grüße

Christian

von Wide (Gast)


Lesenswert?

Christian D. schrieb:
> Mein Programm ist vollkommen korrekt
> nur etwas umständlich aber das wird sich nun ändern;-)


Hi Christian,

Ich versuche momentan mein DOGM 132-5(selber controller) anzusteuern und 
wollte fragen ob du den code noch erweitert hast

Wäre super wenn das ganze übersichtlicher wäre :)


Grüsse Wide

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.