Forum: Mikrocontroller und Digitale Elektronik [PIC] Nokia 3310: Ansteuerung klappt nicht


von Andreas H. (Firma: Privat) (andreashuber)


Lesenswert?

Hallo,

ich versuche mit einem PIC 16F628A ein Nokia 3310 LCD anzusteuern,
dafür habe ich den Code [ASM] einfach wie ich das aus dem Datenblatt 
für's Display entnehmen konnte der Reihe nach runter getippt um zu 
schauen was passiert. Das Ergebnis ist allerdings: Es passiert nichts.

Zum Test habe ich das Display wie hier beschrieben provisorisch in 
Betrieb genommen mit Erfolg:
http://hobbyelektronik.org/VB/gLCD/PCD8544/index.htm

Es muss also an meinem Programm liegen. Wäre nett wenn mir jemand helfen 
könnte.

Danke und MfG
Andreas

Hier mein Code

; PINBELEGUNGEN
;
; PIN LCD    PIN PIC
; -------    -------
; SCL (2)    RB7
; SDA (3)     RB6
; D/C (4)    RB5
; SCE (5)    RB4
; RES (8)    RB3


LIST P=16F628A         ; Use the PIC16F628

#include "P16F628A.INC"  ; Include header file

__config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & 
_BODEN_ON

CBLOCK 0x20             ; Declare variable addresses starting at 0x20
  loops
  loops2
ENDC

ORG    0x000            ; Program starts at 0x000
;
; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------
;
;  movlw 7
;  movwf CMCON    ; CMCON=7 set comperators off

;
; ----------------
; INITIALIZE PORTS
; ----------------
;
    bsf STATUS,RP0          ; RAM PAGE 1

    movlw b'11111111'
    movwf TRISA        ; portA all pins input

    movlw b'00000000'    ; Alle Pins auf output
    movwf TRISB

    bcf STATUS,RP0          ; RAM PAGE 0

  clrf PORTB        ; Alle "B"-Pins auf "low"

;
; ---------
; MAIN PART
; ---------
;

; Kurze Pause am Anfang.. 2x 10ms
  call Wait10
  call Wait10


; Display-Reset
; RES auf "low" setzen, 100ms warten und wieder auf "high"
  bcf   PORTB,3
  call   Wait100
  bsf   PORTB,3


; Seriellen Datenstrom deaktivieren und wieder zulassen
  bsf    PORTB,4
  call  Wait100
  bcf    PORTB,4


; Grundeinstellungen tätigen
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 00100110 schicken  (RB6 Bit anlegen, RB7 "bestätigen")
  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Grundeinstellungen getätigt


;Displayeinstellungen festlegen
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 00001100 schicken  (RB6 Bit anlegen, RB7 "bestätigen")

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Displayeinstellungen festgelegt



;Y-Adresse Cursor einstellen
bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 01000011 schicken  (RB6 Bit anlegen, RB7 "bestätigen")
  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Y-Adresse Cursor eingestellt



;X-Adresse Cursor einstellen
bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 10101000 schicken (RB6 Bit anlegen, RB7 "bestätigen")
  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;X-Adresse Cursor eingestellt




; Wieder mal Grundeinstellungen tätigen um den Befehlssatz zu wechseln
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 00100111 schicken  (RB6 Bit anlegen, RB7 "bestätigen")
  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Grundeinstellungen getätigt, Befehlssatz gewechselt



;Temperaturkompensation festlegen
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 00000110 schicken  (RB6 Bit anlegen, RB7 "bestätigen")
  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Temperaturkompensation festgelegt



;Bias festlegen
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 00010011 schicken (RB6 Bit anlegen, RB7 "bestätigen")
  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Bias festgelegt



;Kontrast einstellen
  bcf    PORTB,5    ;D/C "low", Kommando ausführen

  ;Bitfolge 10101100 (127dez) schicken (RB6 Bit anlegen, RB7 
"bestätigen")
  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Kontrast eingestellt



;Daten aufs Display schreiben
  bsf    PORTB,5    ;D/C "high", Daten schreiben

  ;Bitfolge 10101000 schicken (RB6 Bit anlegen, RB7 "bestätigen")
  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bsf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

  bcf    PORTB,6
  bsf    PORTB,7
  bcf    PORTB,7

;Daten aufs Display geschrieben




loop    ;Endlosschleife

        goto loop



;*********************************************************************** 
*********
;                PROGRAMMENDE
;*********************************************************************** 
*********
;
;                FUNKTIONEN:
;
;*********************************************************************** 
*********

;
; Warteschleife 100ms
Wait100
  movlw  D'100'
  movwf   loops
  goto   Wai

;
; Warteschleife 10ms
Wait10
  movlw   D'10'
  movwf  loops
  goto  Wai

Wai
  movlw  .110  ;Zeitkonstante für 1ms
  movwf   loops2
Wai2
  nop
  nop
  nop
  nop
  nop
  nop
  decfsz  loops2,F  ;1ms vorbei?
  goto  Wai2    ;nein, noch nicht

  decfsz  loops,F    ;100ms/10ms vorbei?
  goto  Wai      ;nein, noch nicht
  retlw  0      ;Zeit vorbei - zurückkehren



; Alibimäßiges Programmende
END

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.