Ik heb via futurlec een 128x64 pixels grafisch lcd besteld, met een t6963c controller erop, maar tot nu toe wilt hij niet veel doen. Met behulp van de datasheet( www.baso.no/content/pdf/T6963C.pdf ) en nog wat andere sites, heb ik deze code geschreven:
LIST P=PIC16F877
__CONFIG 3F72
include bank.inc
include P16f877.inc
;******************************************************
;**************************EQU's***********************
;******************************************************
Dataport EQU 08h
Cfgport EQU 06h
RST EQU 5
Write EQU 4
Read EQU 3
E EQU 2
CD EQU 1
FS EQU 0
counter EQU 21h
counter1 EQU 22h
;******************************************************
;**************************main************************
;******************************************************
ORG 00h
bank1
CLRF TRISB
CLRF TRISD
bank0
BCF Cfgport, RST
CALL delay_10ms
BSF Cfgport, RST
CALL checkstatus
MOVLW 0x00 ;set graphics home address (0000-8192)
CALL snddata
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x42
CALL sndcmd
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x20
CALL snddata
CALL checkstatus
MOVLW 0x42
CALL sndcmd
CALL checkstatus
MOVLW 0x10 ;set graphics area set
CALL snddata
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x43
CALL sndcmd
CALL checkstatus
MOVLW 0x81 ;set up text home address
CALL snddata
CALL checkstatus
MOVLW 0x20
CALL snddata
CALL checkstatus
MOVLW 0x40
CALL sndcmd
CALL checkstatus
MOVLW 0x80
CALL snddata
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x40
CALL sndcmd
CALL checkstatus
MOVLW 0x10 ;set text area set
CALL snddata
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x41
CALL sndcmd
CALL checkstatus
MOVLW b'10001000' ;mode set
CALL sndcmd
CALL checkstatus
MOVLW b'10011111' ;display on (graph on, text on, cursor on, blink on)
CALL sndcmd
stop NOP
GOTO stop
;******************************************************
;***********************LCD Routines*******************
;******************************************************
sndcmd BSF Cfgport, CD
BSF Cfgport, Read
BCF Cfgport, Write
MOVWF Dataport
BCF Cfgport, E
NOP
BSF Cfgport, E
RETURN
snddata BCF Cfgport, CD
BSF Cfgport, Read
BCF Cfgport, Write
MOVWF Dataport
BCF Cfgport, E
NOP
BSF Cfgport, E
RETURN
checkstatus bank1 ;check of de t6963c bezig is
MOVLW 0xFF
MOVWF TRISD
bank0
BSF Cfgport, CD
BCF Cfgport, Read
BSF Cfgport, Write
checksta1 BCF Cfgport, E
NOP
BTFSS Dataport, 0
GOTO checksta1
BTFSS Dataport, 1
GOTO checksta1
bank1
CLRF TRISD
bank0
RETURN
ENDOp portd van de gebruikte pic16f877 zit dus de dataport van het lcd, en op portb heb ik de enable, de reset, de write, de read, command/data en de font select aangesloten (zie de equ's in de code). Het resultaat is nu dat ik de ene keer alles zie oplichten, en de andere keer lichten er een aantal pixels (75% denk ik) op, wat willekeurig lijkt qua plaatsing, het vormt dus geen losse tekens ofzo. In een simulatie programmatje (proteus) zie ik dat er een cursor op plaats 1 behoort te staan die knippert, maar dat is bij mij dus niet het geval. Weet iemand misschien welke fout ik heb gemaakt? Moet ik misschien eerst het scherm clearen ofzo? Mocht er verduidelijking nodig zijn, laat het dan maar ff weten.
Alvast bedankt,
Wouter
Van alles nog geprobeert, maar het gaat alleen maar weg als ik de graphic en de tekst disable door bit 2 en 3 van "display on" te clearen, en ook dan zie ik geen cursor. Ik probeer daarom eerst om in het simulatie programma er een letter naar toe te schrijven. In de datasheet lees ik dat ik dan eerst de address pointer in het tekst of in het graphic deel moet zetten, dan de data er naar toe schijven, en vervolgens 0xC0 er naartoe moet schrijven (blz. 22 van de datasheet), maar als ik dit doe en uit probeer in de simulatie, gebeurt er helemaal niets. Ook als ik probeer om de cursor eentje naar rechts te verplaatsen met deze code
CALL checkstatus
MOVLW 0x01
CALL snddata
CALL checkstatus
MOVLW 0x00
CALL snddata
CALL checkstatus
MOVLW 0x21
CALL sndcmd
werkt het niet, hij blijft gewoon op de eerste plaats staan. Iemand enig idee?
Dankzij deze code, met dit bestand is het uiteindelijk toch nog gelukt. De meeste info had ik van hier, maar er stonden hier behoorlijk veel fouten in, plus dat ik zelf oa de instellingen voor de ram area verkeerd had gezet. Na deze fouten te hebben recht gezet en een schone en duidelijkere code te hebben geschreven lukt alles nu; Zowel graphics ernaar toe schrijven, als tekst, als de cursor verplaatsen.
Als er iemand interesse heeft in deze code moet diegene dat ff zeggen, dan zal ik hem eerdaags ff online zetten.
Tiny
Waterpolo a way of life
Hier meldt zich iemand voor de werkende code. Mijn assembly kennis is niet bijzonder groot, maarja ik moet het toch eens onder de knie krijgen.
Alvast bedankt!