www.mikrocontroller.net

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


Autor: Andreas Huber (Firma: Privat) (andreashuber)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.