Forum: Mikrocontroller und Digitale Elektronik Problem bei Nokia 3310 Display macht mich fertig!


von dewe (Gast)


Lesenswert?

Hallo!

Ich versuche schon sehr lange ein Nokia 3310 Display mit einem Pic 
anzusteuern! Ich habe auch schon sehr viele Informationen zu diesem 
Thema gefunden! Doch leider klappt es nicht.

Mein Display arbeitet einfach nicht und ich weiß einfach nicht warum!

Habe ich vielleicht irgendetwas im Code übersehen dass falsch sein 
könnte??
1
#include<18F4680.h>
2
#use delay (clock=20000000)
3
#fuses HS, NOWDT, NOPROTECT, NOLVP
4
#include<stdlib.h>
5
#include<stdio.h>
6
7
void main (void) {
8
   //int i;
9
   // configure SPI
10
   // SMP  CKE  D/A  P  S  R/W  UA  BF
11
   //  0    0    0   0  0   0    0   0
12
   #bit SSPSTAT_CKE = 0xb.6
13
   // WCOL  SSPOV  SSPEN  CKP  SSPM3  SSPM2  SSPM1  SSPM0
14
   //  0      0      1     0     0      0      0      1
15
   // SSPM3-SSPM0: 0000 -> Master Mode; Tosc/16
16
   // SSP Enable Bit: 1
17
   #bit SSPCON1_CKP = 0xb.4
18
   
19
   SSPCON1_CKP = 0;
20
   SSPSTAT_CKE = 0;
21
 
22
   setup_spi(spi_master|SPI_CLK_DIV_16);   
23
   
24
   //Display reset
25
   output_high(PIN_C4); // RES  
26
   delay_ms(5);
27
   output_low(PIN_C4); // RES  
28
   delay_ms(20);
29
   output_high(PIN_C4); // RES  
30
   
31
   output_low(PIN_D3);  // Chip enabled
32
33
   output_low(PIN_D2);  // D/C -> DIsplay mode
34
   spi_write(0x21);     
35
   spi_write(0xC8);     
36
   spi_write(0x06);     
37
   spi_write(0x13);     
38
   spi_write(0x20);
39
   spi_write(0x0C);
40
   
41
   output_high(PIN_D2);  // D/C -> DIsplay mode
42
   
43
   spi_write(0xFF);
44
   spi_write(0x00);
45
   spi_write(0xFF);
46
   spi_write(0x00);
47
   spi_write(0xFF);
48
   spi_write(0x00);
49
   spi_write(0xFF);
50
   spi_write(0x00);
51
   spi_write(0xFF);
52
   spi_write(0x00);
53
   spi_write(0xFF);
54
   spi_write(0x00);
55
   
56
   while(true) { 
57
   }
58
}

Die Schaltung habe ich so aufgebaut, wie es im Internet sehr sehr oft zu 
finden ist:
PIN
1 -> 3,3V
2 -> SCLK
3 -> SDI
4 -> D/C
5 -> SCE
6 -> GND
7 -> Vout
8 -> RES
(bei jedem PIN vom Display max.3,3V -> durch Spannungsteiler)

Ich habe schon alle Lötstelle des öfteren überprüft und auch mit dem 
Messgerät die Verbindungen überprüft, aber ich finde keinen Fehler!

Kann es sein, dass das Display beim anlöten beschädigt worden ist?
also ist das Display darauf sehr empfindlich (war nicht ganz einfach die 
Drähte anzulöten da ich nicht einen so feinen lötkolben habe)

Habe auch noch ein Display von einem Nokia5110 zuhause aber das 
funktioniert mit diesem Code auch nicht (habe den 9tn PIN 
berücksichtigt; PIN6 auf V+ -> interner Oszillator)

aja die beiden DIsplays funktionieren, also das vom 5110 funktioniert 
mit Sicherheit immer noch! und das vom 3310er hat, bevor ich die Drähte 
angelötet habe, auch funktioniert (jetzt kann ich es ja nicht mehr in 
das handy einbauen und testen)

Ich hoffe mir kann jemand helfen und danke schon im Voraus!

mfg dewe

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Du verwendest einen sehr hohen SPI-Takt, da werden die Spannungsteiler 
zusammen mit der Eingangskapazität der Pins vom Display zu einem 
Tiefpassfilter und es ist keine Datenübertragung mehr möglich.

Du solltest die Taktfrequenz reduzieren oder einen richtigen 
Levelshifter benutzen.

Grüße,

Peter

von dewe (Gast)


Lesenswert?

Hallo!

Okay danke werd ich gleich ausprobieren!

Aber sollte das nicht so funktioneren?? denn laut Datenblatt vom PCD8544 
kann die Frequenz max 4Mhz
sein!
mfg dewe

von dewe (Gast)


Lesenswert?

So habe jetzt mal den SPI Takt umgeändert, funktioniert leider immer 
noch nicht. also setup_spi(setup_spi(spi_master|SPI_CLK_DIV_64)

was ich noch vergessen habe, der Kondensator der von Vout auf Masse geht 
hat einen Wert von 4,7µF! Müsste auch passen, da im Datenblatt steht, 
dass mindenstens ein 1µF Elko verwendet werden muss.

mfg

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Versuch auch mal ein paar delays mehr, hier treten auch sehr hohe 
Frequenzen auf, die dein Aufbau mit Widerstandsteilern nicht kann.

   output_high(PIN_C4); // RES
   delay_ms(5);
   output_low(PIN_C4); // RES
   delay_ms(20);
   output_high(PIN_C4); // RES

delay_ms(20); //hier

   output_low(PIN_D3);  // Chip enabled

delay_ms(20); //hier

   output_low(PIN_D2);  // D/C -> DIsplay mode

delay_ms(20);  //und hier

   spi_write(0x21);
   spi_write(0xC8);

Welche Werte verwendest du in den Spannungsteilern?

Grüße,

Peter

von dewe (Gast)


Lesenswert?

Hallo!

Habe ein paar dieser delays eingebaut, doch leider tut sich auch noch 
gar nichts.

Spannungsteiler: 470 Ohm, 226 Ohm

mfg dewe

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Kannst du die Signale mit einem Ozilloskop nachmessen bezüglich des 
Timings und der Pegel?
Vor allem solltest du die Clockpolarity und Clockphase entsprechend 
dieser Einstellung überprüfen:

   SSPCON1_CKP = 0;
   SSPSTAT_CKE = 0;


Grüße,

Peter

von dewe (Gast)


Lesenswert?

Hallo,

Hab leider kein Oszilloskop.

Ich habe 2 3310 Displays(LPH7977), beide funktionieren, wenn ich das 
eine Display verwende funktioniert mein code (aber auch nicht richtig, 
denn der Vout Kondensator braucht nach abschalten der Spannung sehr 
lange bis er entladen ist, und erst dann funktioniert das display 
wieder), beim anderen tut sich gar nichts, sollte aber funktionieren ist 
ja das selbe!
Ich versteh das ned!! diese Displays bringen mich noch zur 
verzweiflung!! aber wir werden den fehler schon finden!!*g*

mfg

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.