EA DOG-M162 initialisiert nur sporadisch

OP #3498190
Lesenswert?

Hallo zusammen,

ich betreibe oben genanntes Display per SPI an einem Raspberry Pi (also 
mit 3,3V-Beschaltung). Das lief auch bis gestern einwandfrei. Heute tun 
sich mir jedoch Raetsel auf. Wenn die Schaltung stromlos war, also das 
Display initialisiert werden muss, klappt das nur sehr sporadisch. Lasse 
ich die Initialisierung 20 Mal laufen, kann es sein, dass es immernoch 
nicht geht. War dann eben mal eine Stunde nicht dran und schon ging es 
jetzt zufaellig beim ersten Versuch.
Schreibe ich dann Daten (RS auf High), also wenn das Display einmal 
initialisiert ist, klappt jeder Schreibvorgang.

Hat jemand eine Idee, woran das liegen koennte? Verkabelung habe ich 
mehrfach gecheckt, die ist in Ordnung, am SPI haengt direkt auch noch 
ein DOG-L-Grafik-LCD dran und das funktioniert hervorragend.

Viele Gruesse und danke,
Martin

Anhang (Initialisierung laeuft wie im Datenblatt vorgegeben, habe es 
auch mit Pausen zwischen den Befehlen probiert, das aendert nichts):
1
rsPin = 0
2
    device = '/dev/spidev0.0'
3
    cmdFunctionSet = chr(0x39)
4
    cmdBiasSet = chr(0x1C)
5
    cmdPowerControl = chr(0x55)
6
    cmdFollowerControl = chr(0x6D)
7
    cmdContrastSet = chr(0x74)
8
    cmdInstructionTable = chr(0x38)
9
    cmdDisplayOnOff = chr(0x0C)
10
    cmdClearDisplay = chr(0x01)
11
    cmdEntryModeSet = chr(0x06)
12
    
13
    cmdSelectFirstLine = chr(0x80)
14
    cmdSelectSecondLine = chr(0xC0)
15

16
    def init(self):
17
        io.pinMode(self.rsPin, io.OUTPUT)
18

19
        io.pinMode(15, io.OUTPUT)
20
        io.pinMode(16, io.OUTPUT)
21

22
        io.digitalWrite(15, io.HIGH)
23
        io.digitalWrite(16, io.LOW)
24

25
        io.digitalWrite(self.rsPin, io.LOW)
26
        
27
        self.spiOutCommand(self.cmdFunctionSet)
28
        self.spiOutCommand(self.cmdBiasSet)
29
        self.spiOutCommand(self.cmdPowerControl)
30
        self.spiOutCommand(self.cmdFollowerControl)
31
        self.spiOutCommand(self.cmdContrastSet)
32
        self.spiOutCommand(self.cmdInstructionTable)
33

34
        self.spiOutCommand(self.cmdEntryModeSet)
35
        self.spiOutCommand(self.cmdClearDisplay)
36
        self.spiOutCommand(self.cmdDisplayOnOff)
Gast #3498375
Lesenswert?

> Anhang (Initialisierung laeuft wie im Datenblatt vorgegeben, habe *es
> auch mit Pausen* zwischen den Befehlen probiert, das aendert nichts):

Und wo sind diese Pausen? Vieleicht ist dein SPI auch zu schnell.
Gast #3498397
Lesenswert?

Hi

>Anhang (Initialisierung laeuft wie im Datenblatt vorgegeben, habe es
>auch mit Pausen zwischen den Befehlen probiert, das aendert nichts):

Welches Datenblatt? Display oder Displaycontroller?

MfG Spess
OP #3498405
Lesenswert?

@holger: Testweise hatte ich die nach jedem Command drin. Und mit der 
SPI-Uebertragung scheint ja alles zu passen, denn die Daten kommen ja 
dann anschliessend in jedem Fall und immer richtig an.

@Spess: Beides. Im Datenblatt des Displays steht nichts von Pausen, in 
dem vom Controller sind 26µs gefordert. Aber auch damit - wie gesagt - 
keine Aenderung. Dadurch, dass das ganze unter Linux laeuft und Python 
auch nicht besonders schnell ist, dauert das vermutlich eh schon laenger 
als die 26µs. Jedenfalls geht es so oder so nicht.
OP #3498432
Lesenswert?

Ja, habe wirklich ueberall grosszuegig Pausen verteilt (zu Beginn, aber 
der RPi ist da ja eh schon ne Weile an, und nach jedem Command). Null 
Effekt. Ich frage mich langsam, ob es nicht irgendeine Hardware-Sache 
ist (zumal es gestern ja hervorragend lief). Das Display braucht zum 
Betrieb an 3,3V ja zwei externe Kondensatoren, vielleicht sollte ich die 
mal tauschen.

@holger: Wie gesagt, ein anderes Display haengt direkt parallel an 
diesem und das funktioniert einwandfrei. Leitungen haben alle Durchgang, 
auch die Chip Enable-Leitung, die sich das Display ja nicht mit dem 
anderen teilt.

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