Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 steuert Nokia-3310-Display an


von Klaus L. (keyel80)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

zum Einstieg in die Microcontroller-Programmierung habe ich mir das 
eZ430F2013 von TI bestellt und möchte nun - nachdem ich die LED in allen 
Varianten blinken ließ - ein bei eBay erworbenes Display für ein 
Nokia-3310-Handy ansteuern. Den Aufbau dazu seht ihr im Anhang.

Als IDE nutze ich CodeComposer Essentials. Weiter unten habe ich den 
Inhalt   von den Drei Assemblerroutinen aus meinem Projekt angefügt. Es 
soll alle Segmente des Displays einschalten und dann die LED blinken 
lassen.
Tja, was soll ich sagen. Die LED blinkt aber beim Display tut sich gar 
nichts. Kann mir jemand von euch sagen, wo ich nach dem Fehler suchen 
sollte bzw wo ich einen Fehler gemacht habe?

Vielen Dank für eure Hilfe!

Klaus

main.asm:
1
;******************************************************************************
2
 .cdecls C,LIST,  "msp430x20x3.h"
3
 .include "std.asm"
4
 .include "nokia3310.asm"
5
6
;------------------------------------------------------------------------------
7
            .text                           ;
8
;------------------------------------------------------------------------------
9
pcf8544_RESET   .set BIT1
10
pcf8544_CE  .set BIT2
11
pcf8544_DC  .set BIT3
12
13
RESET       mov.w   #280h,SP                ; Initialize stackpointer
14
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
15
InitDCO      mov.b   &CALDCO_1MHZ,&DCOCTL    ; Set DCO for 1MHz using
16
          mov.b   &CALBC1_1MHZ,&BCSCTL1   ; calibration registers
17
SetupP1     bis.b   #(BIT5+BIT6), &P1SEL
18
      bis.b  #(pcf8544_RESET+pcf8544_CE+pcf8544_DC+BIT5+BIT6+BIT0), &P1DIR
19
      
20
SetupUSI  mov.b   #(USIPE6+USIPE5+USIMST+USIOE+USISWRST), &USICTL0; 
21
                ;USIPE7 not set because SOMI is not needed
22
    mov.b   #(1*USICKPH), &USICTL1;
23
    mov.b   #(USIDIV_3+USISSEL_2+0*USICKPL), &USICKCTL
24
; Clock = SMCLK, /16
25
    bic.b   #USISWRST,&USICTL0; Enable USI                        
26
27
ResetDisp  bic.b   #pcf8544_RESET, &P1OUT
28
    mov.w   #200, R15
29
    call    #std_DelayMS
30
    bis.b   #(pcf8544_RESET+pcf8544_CE), &P1OUT
31
                ; release reset of display, but disable display
32
    mov.w   #100, R15
33
    call    #std_DelayMS
34
35
Play    mov.b #021h, R15;   // LCD Extended Commands.
36
    call  #pcf8544_sendCMD
37
          mov.b #0C8h, R15;  // Set LCD Vop (Contrast).
38
          call  #pcf8544_sendCMD
39
          mov.b #006h, R15;  // Set Temp coefficent.
40
          call  #pcf8544_sendCMD
41
          mov.b #013h, R15;  // LCD bias mode 1:48.
42
          call  #pcf8544_sendCMD
43
          mov.b #020h, R15;  // LCD Standard Commands, Horizontal addressing mode.
44
          call  #pcf8544_sendCMD
45
          mov.b #009h, R15;  // all segments on
46
          call  #pcf8544_sendCMD
47
                                            ;        
48
Mainloop    xor.b   #001h,&P1OUT            ; Toggle P1.0
49
      td_Delay
50
            jmp     Mainloop                ; Again
51
                                            ;
52
53
54
      
55
;-----------------------------------------------------------------------------
56
;           Interrupt Vectors Used MSP430
57
;-----------------------------------------------------------------------------
58
            .sect     ".reset"              ; MSP430 RESET Vector
59
            .short  RESET                   ;
60
            .end
nokia3310.asm:
1
--------------------------------------
2
.cdecls C,LIST,  "msp430x20x3.h"
3
pcf8544_RESET   .set BIT1
4
pcf8544_CE  .set BIT2
5
pcf8544_DC  .set BIT3
6
7
pcf8544_sendCMD
8
        bic.b #pcf8544_DC, &P1OUT
9
ENABLE  bic.b #pcf8544_CE, &P1OUT; ;enable the display-controller
10
        ;move data to the register        
11
        mov.b R15, &USISRL          
12
        ;SPI-Message-Length=8bits
13
        mov.b   #8, &USICNT
14
        ;and the transmission starts...
15
        ;wait until SPI-Buffer is free
16
Li  cmp.b #0, &USICNT
17
        jnz   Li
18
        ;disable the display-controller
19
        bis.b    #pcf8544_CE, &P1OUT
20
        ret
std.asm:
--------------------------------------------
1
std_delay  .macro
2
  mov.w   #0x0000,R15             ; Delay to R15
3
L1      dec.w   R15                     ; Decrement R15
4
        jnz     L1                      ; Delay over?
5
        .endm
6
         
7
std_DelayMS
8
Lout    mov.w #332, R4 ; 2cycles
9
Lin  dec.w R4; 1 cycle
10
        jnz   Lin; 2 cycles
11
        dec.w R15; 1 cycle
12
        jnz   Lout; 2 cycles
13
        ret ; 3 cycles

von Klaus L. (keyel80)


Lesenswert?

Hallo Forum,

an welcher Stelle darf ich noch mehr Informationen zu meinem Problem 
nennen, sodass mir jemand helfen kann.

Vielen Dank!

Klaus

von Kwi (Gast)


Lesenswert?

Kannst mir ja mal ne Emailadresse mailen an spam@tismanie.net, dann 
gucken wir was wir machen koennen. Und wenn was rauskommt posten wirs 
hier...

Am besten sendest gleich das Datenblatt mit von dem Display...

Hab mir auch vor ner Woch das Kit geholt...Echt klasse...

Kleiner Tipp am Rande wie ichs immer mache...

Ich schreib erst das Programm ( in c) auf dem PC mit ner IO Karte, oder 
von mir aus mit dem Druckerport....

Die AnsteuerRoutinen fuer die Leitungen ein eine seperate Funktion, 
danach wenn alles geht kann mans leicht portieren und das debugging ist 
wesentlich einfacher aufm Pc...

MfG kwi

von Klaus L. (keyel80)


Angehängte Dateien:

Lesenswert?

Hallo Kwi,

anbei findest du das Datenblatt. Bezüglich der Ansteuerung des Displays 
habe ich mich von http://www.olimex.com/dev/msp-169lcd.html inspirieren 
lassen.

Der Widerstand in meiner Schaltung zieht Reset auf Masse, wenn der 
MSP430-Ausgang hochohmig ist (siehe hierzu Datenblatt - Reset muss 
spätestens 100ms nach dem Einschalten auf Masse gezogen werden)

Mir ist übrigens aufgefallen, dass der Spannungsregler im eZ430 3,6V 
liefert, wohingegen das Display mit 3,3V versorgt werden soll. +-10% 
sollten aber eigentlich kein Problem sein...

Tja, mein Notebook hat leider keinen Parallelport mehr...

Vielen Dank (ich sende dir diesen Text auch per Mail)

Gruß Klaus

von Klaus L. (keyel80)


Lesenswert?


Ich habe jetzt mal versucht, mit dem Multimeter etwas zu messen. Also:

-der Reset-Eingang wird korrekt runtergezogen

-am VOUT-Pin (am positiven Anschluss des Kondensators) sollte sich ja
dann eigentlich die Versorgungsspannung des Displays (ca 8V oder so...)
messen lassen. Hier liegt keine Spannung an

-ich habe in die Endlosschleife folgende Befehle eingebaut

mov.b #0AAh, R15;  // test
call  #pcf8544_sendCMD

danach habe ich eine Spannung von 1,19V gemessen. Na ja, scheint OK.
(50% PWM-0-1-0-1-Signal und 50% Latenzzeit, bis die Register wieder
geladen sind.)

Tja, das sind meine aktuellen Erkenntnisse. Leider hilft mir das nicht
weiter. Insbesondere würde mich interessieren, weshalb die
Betriebsspannung für das Display nicht erzeugt wird.

Danke für eure Hilfe.

Gruß KLaus

von Kwi (Gast)


Lesenswert?

Hallo Klaus,

deine Mailadresse funktioniert nicht kommt immer:

Ihre Nachricht hat einige oder alle Empfänger nicht erreicht.

      Betreff:  AW: [SPAM] ez430 steuert nokia3310-display an
      Gesendet am:  26.03.2007 01:34

Folgende Empfänger konnten nicht erreicht werden:

      'KLaus Liebler' am 26.03.2007 01:34
            550 5.7.1 Unable to relay for xxx"@klaus-liebler.de


xxx" hab ich ausgeblendet ;)

und da noch nichts auf deiner HP hast naja kann ich dir auch nicht 
zurueckschreiben ;)

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.