Nokia 3510i Display

Habe hier einen code in Basic gefunden für den AVR:

'Ansteuerung eines Nokia 3510i Farb-Display
'Copyright Martin Kuehn    Januar 2004
'martin-k@x-mail.net
'Dieses Programm dient nur für Demonstrationszwecke und ist absichtlich
'sehr einfach gehalten. Es ging mir nicht darum, elegant zu programmieren,
'sondern exemplarisch die Display-Ansteuerung aufzuzeigen.
'Prozessor: AVR Mega128, 3 Volt, Taktfrequenz 4 MHz
'Viele Werte zur Ansteuerung sind willkürlich gewählt und können noch
'optimiert werden.
'Bei einer Taktfrequenz von über 8 MHz könnte die Ansteuerung des Displays
'nicht mehr funktionieren, eventuell Wait-Befehle einfügen
'Es scheint so, dass die LCD-Spannung durch Software nicht verändert werden
'kann, dementsprechend kann auch der Kontrast nicht verändert werden.
'Ich habe bei meinem Display einen Kondensator zwischen Vlcd (Pin 8) und
'GND geschaltet um das Flimmern zu verhindern.

'Controller D15G14E_14_030526


'Display Pin 1 Reset => AVR Pin A0
'            2 CS               A1
'            3 GND              GND
'            4 Sdata            A2
'            5 Sclk             A3
'            6 Vdigital         Vdd (3 Volt)
'            7 Vbooster         Vdd
'            8 Vlcd

Ddra = &B11111111       'Port A als Output
Dim A As Byte , B As Byte , R As Integer , S As Byte

'Initialisierung Reset
Porta.0 = 0
Waitms 5
Porta.0 = 1


Porta.1 = 1
Porta.2 = 1
Porta.3 = 1


'Software Reset
A = &H01
Gosub Command
Gosub Cs
Waitms 5

'INIESC
A = &HC6
Gosub Command
Gosub Cs

'***************************************************************************

' <Display setup 1>


'REFSET
A = &B9
Gosub Command
A = 0
Gosub Parameter
Gosub Cs

'Display Control DISCTL
A = &B6
Gosub Command
A = 128
Gosub Parameter       '128 number of clocks, willkürliche Zahl
A = 128   'no N line inversion (ungerade Zeilenanzahl)
Gosub Parameter
A = 129   '2 divisions in idle mode, bias 1/9
Gosub Parameter
A = 84
Gosub Parameter
A = 69
Gosub Parameter
A = 82
Gosub Parameter
A = 67
Gosub Parameter
Gosub Cs

'Gray Scale Position
'Bei DISCTL wurden 128 clock numbers pro Zeile eingestellt
'Auf diese 128 Cyclen werden die 16 (4 bit) Graustufen verteilt (willkürlich, Werte müssen aber kleiner als 128 sein)
'Die Graustufen gelten für alle Farben
A = &HB3  'GCPSET0
Gosub Command
A = 1
Gosub Parameter
A = 2
Gosub Parameter
A = 4
Gosub Parameter
A = 8
Gosub Parameter
A = 16
Gosub Parameter
A = 30
Gosub Parameter
A = 40
Gosub Parameter
A = 50
Gosub Parameter
A = 60
Gosub Parameter
A = 70
Gosub Parameter
A = 80
Gosub Parameter
A = 90
Gosub Parameter
A = 100
Gosub Parameter
A = 110
Gosub Parameter
A = 127
Gosub Parameter
Gosub Cs

'Gamma curve set
A = &HB5
Gosub Command
A = 1     'GCPSET0
Gosub Parameter
Gosub Cs

'Common driver output select
A = &HBD
Gosub Parameter
A = 0
Gosub Parameter
Gosub Cs



'************************************************************************

' <Power supply setup>


'Power control PWRCTL
A = &HBE
Gosub Command
A = 4     'boosting clock half display clock, internal resistance, high power mode
Gosub Parameter
Gosub Cs

'Sleep out
A = &H11
Gosub Command
Gosub Cs

'Voltage control
Rem A = &BA
Rem Gosub Command
Rem A = 127   'Voltage 127 - 63
Rem Gosub Parameter
Rem A = 3
Rem Gosub Parameter
Rem Gosub Cs


'Contrast
Rem A = &H25
Rem Gosub Command
Rem A = 63    'Voltage
Rem Gosub Parameter
Rem Gosub Cs

'Temperature gradient set
A = &HB7
Gosub Command
A = 0
For R = 1 To 14       'nur erster Wert relevant, restliche 13 Werte auf 0 setzen
Gosub Parameter
Next R
Gosub Cs

'Booster voltage ON
A = &H03
Gosub Command
Gosub Cs


Waitms 40 'Booster voltage stabilizing


'**************************************************************************

' <Display setup2>


'Inversion control
A = &H20  'Off, normal
Gosub Command
Gosub Cs

'andere Einstellung per Reset definiert



'*************************************************************************

' <Display setup3>


'Interface pixel format
'12 bit

'Colour set
'nur für 8 bit relevant

'Memory access control
'durch Reset definiert

'Page address set
'durch Reset definiert

'Column address set
'durch Reset defniert

'Memory write
A = &H2C
Gosub Command

'Beipsiel-Routine zeichnet horizontale farbige Balken im 12-bit Modus
'Leider ist die Bascom-Demo-Version speicherlimitiert, daher größten
'Teil der Schleifen löschen

S = 0
'roter Balken
For R = 1 To 999
 If S = 0 Then A = 15
 If S = 1 Then A = 240
 If S = 2 Then A = 255
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
Next R


S = 0
'grüner Balken
For R = 1 To 999
 If S = 0 Then A = 240
 If S = 1 Then A = 255
 If S = 2 Then A = 15
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
Next R

 S = 0
'blauer Balken
For R = 1 To 999
 If S = 0 Then A = 255
 If S = 1 Then A = 15
 If S = 2 Then A = 240
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
 Next R




S = 0
'gelber Balken
For R = 1 To 999
 If S = 0 Then A = 0
 If S = 1 Then A = 240
 If S = 2 Then A = 15
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
Next R


S = 0
'magenta Balken
For R = 1 To 999
 If S = 0 Then A = 15
 If S = 1 Then A = 0
 If S = 2 Then A = 240
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
Next R

 S = 0
'cyan Balken
For R = 1 To 999
 If S = 0 Then A = 240
 If S = 1 Then A = 15
 If S = 2 Then A = 0
 Gosub Parameter
 S = S + 1
 If S = 3 Then S = 0
 Next R

'weißer Balken
A = 0
For R = 1 To 1000
Gosub Parameter
Next R

'schwarzer Balken
A = 255
For R = 1 To 1002
Gosub Parameter
Next R

Gosub Cs

'Display ON
A = &H29
Gosub Command
Gosub Cs



End






'Unterprogramme, Timing der Datenleitungen


'Senden eines Befehls

Command:
Porta.1 = 0       'Cs auf 0  Start der Sequenz

Porta.3 = 0
Porta.2 = 0       '0 für Command
Porta.3 = 1

Porta.3 = 0
B = A And 128
If B = 128 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 64
If B = 64 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 32
If B = 32 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 16
If B = 16 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 8
If B = 8 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 4
If B = 4 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 2
If B = 2 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 1
If B = 1 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Return



'Senden eines Wertes

Parameter:
Porta.1 = 0       'Cs auf 0  Start der Sequenz

Porta.3 = 0
Porta.2 = 1       '1 für Parameter
Porta.3 = 1

Porta.3 = 0
B = A And 128
If B = 128 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 64
If B = 64 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 32
If B = 32 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 16
If B = 16 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 8
If B = 8 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 4
If B = 4 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 2
If B = 2 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Porta.3 = 0
B = A And 1
If B = 1 Then Porta.2 = 1
If B = 0 Then Porta.2 = 0
Porta.3 = 1

Return



Cs:
Porta.1 = 1
Return

ist jemand in der lage dies für arduino zu portieren?

Evtl. einfacher von C für PIC auf C für AVR zu portieren. http://minhdanh2002.blogspot.no/2011/03/interfacing-nokia-3510i-and-5110-lcd.html

Aber ohne das Display selbst, ist es schwer, ein Erfolgserlebnis zu garantieren ;)

Ich hab' 'mal ein bischen gegoogelt und die interne Doku der UTFT durchgelesen. Dieses Display scheint wirklich von keiner Arduino Lib unterstützt zu werden. Es scheint mir dann doch so zu sein, daß es so viele gute Farbdisplays für so wenig Geld gibt, daß sich ein Lib Autor mehr die Mühe macht das Display zu unterstützen :~

Das 6100 Display kann man immerhin noch auf Ebay in Form eines Arduino Shields erwerben...

Oliver

Hallo,

hmm, ich erkenne gerade nicht den Sinn so ein Projekt durchzuführen, bis das wirklich gut läuft ist sicher einiges an Optimierung nötig - für ein Handydisplay das vor ca. 10 Jahren aktuell war und zunehmend kaum mehr zu bekommen sein wird… :~

Das 5110 Display ist zwar nur Schwarzweiß und noch etwas älter, gibts aber immer noch zuhauf als Nachbau - nicht zuletzt für unsere Arduino Projekte.

Außerdem sind diese alten Farbdisplays nicht wirklich toll vom Kontrast und der Farbsättigung, das sind Welten im Vergleich zu neueren Entwicklungen…

Christian