PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Displaytech 161A, beim Init geht das Display nicht aus.



Sonic111
04.11.2007, 00:23
Hallo zusammen !

Ich habe mich heute zum ersten mal mit Displays beschäftigt (Displaytech 161A).
Als Vorlage habe ich den Quellcode von sprut genommen.

Ich komme aber beim Init nicht weiter. Das Display schaltet auf 8 Zeichen, aber die nächste Anweisung "Display Off" funktioniert nicht, das Display geht nicht aus.

Ich finde den Fehler nicht, Kabelanschlüsse sind ok.

Könnt Ihr mir helfen ? Was ist denn beim Init falsch, wieso geht das Display nicht aus ?

Gruß
Heiko

Das ist mein Programm :
list p=16f84a
;************************************************* *************
;* Pinbelegung
;* ----------------------------------
;* PORTA:
;* 0 - RS
;* 1 - R/W
;* 2 - E
;* 3 -
;* 4 -
;* PORTB:
;* 0 - 7 LCD Display DB0 - DB7
;*
;*
;************************************************* *************
; Includedatei für den 16F84 einbinden

#include <P16f84A.INC>

; Configuration festlegen
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator

__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC

;************************************************* *************
; Variablen festlegen

loops EQU 0x24
loops2 EQU 0x25

; Constanten festlegen
LcdE equ 2 ; enable Lcd (An PortA)
LcdRW equ 1 ; read Lcd (An PortA)
LcdRS equ 0 ; Daten Lcd (An PortA)

;************************************************* *******
; Das Programm beginnt mit der Initialisierung

Init
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortA/B alle output
movwf TRISB ; Internes Register im PIC für PORTB ändern
movwf TRISA ; Internes Register im PIC für PORTA ändern
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; PortB auf Null
clrf PORTA ; PortA auf Null

call InitLCD ; Display initialisieren

sleep
Main
goto Main

;************************************************* ****************
;Zeitverzögerung um loops * 1 ms
; 4MHz externer Takt bedeutet 1MHz interner Takt
; also dauert 1 ms genau 1000 Befehle
; 110 Schleifen a 9 Befehle sind 990 Befehle = 0.99 ms
; die restlichen 10 Befehle für Einsprung und Rücksprung

WAIT
top movlw .110 ; timing adjustment variable (1ms)
movwf loops2
top2 nop ; sit and wait
nop
nop
nop
nop
nop
decfsz loops2, F ; inner loops complete?
goto top2 ; no, go again
;
decfsz loops, F ; outer loops complete?
goto top ; no, go again
retlw 0 ; yes, return from subWAIT

;************************************************* *********
; Initialisierung des LCD-Displays

InitLCD
movlw D'255' ; 250 ms Pause nach dem Einschalten
movwf loops
call WAIT

movlw B'00000000' ;1
movwf PORTA
movlw B'00110000'
movwf PORTB
call EnableSignal

movlw D'5' ; 5 ms Pause
movwf loops
call WAIT

movlw B'00000000' ;2
movwf PORTA
movlw B'00110000'
movwf PORTB
call EnableSignal

movlw D'5' ; 5 ms Pause
movwf loops
call WAIT

movlw B'00000000' ;3
movwf PORTA
movlw B'00110000'
movwf PORTB
call EnableSignal
nop

movlw D'150' ; 150 ms Pause
movwf loops
call WAIT

movlw B'00000000' ;4 Function Set - Display auf 8 Zeichen
movwf PORTA
movlw B'00111000'
movwf PORTB
call EnableSignal

; --- Bis hier OK.

movlw B'00000000' ; Display Aus - funktioniert nicht, warum ?
movwf PORTA
movlw B'00001000'
movwf PORTB
call EnableSignal

; movlw B'00000000' ; 6 Display Clear - erstmal heraus
; movwf PORTA
; movlw B'00000001'
; movwf PORTB
; call EnableSignal
; nop


; movlw B'00000000' ; 7 Entry Mode Set
; movwf PORTA
; movlw B'00000110'
; movwf PORTB
; call EnableSignal

return

EnableSignal

bsf PORTA, LcdE ; Enable Impuls setzen
nop

movlw D'50' ; 50 ms Pause
movwf loops
call WAIT

bcf PORTA, LcdE ; Enable Impuls löschen

return

Sonic111
04.11.2007, 16:53
Hat sich erledigt !

Läuft jetzt ;-).

Problem lag am Abfragen vom Busy Flag....

Grüße,
Heiko