Verkar som jag har gjort någon tabbe i programmeringen ändå:
använder en PIC18F2685 försöker kommunicera med en nokia 3310 display (PCD 8594) .
http://www.myplace.nu/mp3/files/pcd8544.pdf
Har kopplat (DISPLAYPORT=>PICPORT)
RES=>PORTA,RA2,
Vlcd är kopplat via 22µC till jord
GND=>GND
SCE=>PORTA,RA1,
D/C=>PORTA,RA0,
SDI=>PORTC,RC5
SCK=>PORTC,RC3
Vdd=>Vdd
Har testat med två stycken olika 3310-displayer nu och ingen av dem ger något som helst liv ifrån sig. Tänkte att jag postar den kod jag använder, så om någon är haj på dessa displayer kanske kan se vad som blir fel.
Använde först den interna SPI-funktionen(därav InitdisplayConfig), men eftersom denna inte syns i simuleringen bytte jag till att skicka signalerna "för hand" (Init2).
Kod: Markera allt
;*****Set up the Constants****
include <P18F2685.inc>
CONFIG OSC = IRCIO67, FCMEN = OFF, IESO = OFF
CONFIG PWRT = OFF, BOREN = OFF, WDT = OFF
CONFIG MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF
CONFIG DEBUG = ON, XINST = OFF, LVP = OFF
CONFIG STVREN = OFF
CONFIG CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CP4 = OFF, CP5 = OFF
CONFIG CPB = OFF, CPD = OFF
CONFIG WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRT4 = OFF, WRT5 = OFF
CONFIG WRTB = OFF
CONFIG WRTC = OFF ;Configuration register Code protected
CONFIG WRTD = OFF
CONFIG EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTR4 = OFF, EBTR5 = OFF
CONFIG EBTRB = OFF
org 0
movlw b'00110010'
; movlw b'01110010'
movwf OSCCON
movlw b'11111111'
movwf ADCON1
;*****initializing the PIC 18F4685****
InitPIC nop
clrf TRISA
;bsf TRISA,SS ; SS=0 SS-disabled
clrf TRISB
clrf TRISC ;outputs for SCK, SDO
bsf TRISC,RC4 ;input for SDI
clrf PORTA
bsf TRISA,RA0
Cblock 08h
COUNT1 ;equ 08h ;First counter for our delay loops
COUNT2 ;equ 09h ;Second counter for our delay loops
COUNT3
variabel
endC
DDC equ RA0
SCE equ RA1
DRES equ RA2
loop1 call loop
call longdelay
call longdelay
;all Configg
;call InitdisplayConfig
call Init2
call loop
goto loop1
Init2 ; Commands
; call reset_display [DRES clear, shortdelay DRES set]
; call command_mode [DDC clear]
; call ram_mode [DDC set]
; call enable_data [SCE clear]
; call disable_data [SCE set]
bcf PORTC,SCK
;bsf PORTA,DRES
call disable_lcd_output
call disable_data
call enable_data
call reset_display
call command_mode
movlw b'00100100' ; COMMAND last three 100=DB2:DB0
; DB2=0 LCD-chip power down ; DB1=0 horisontal adr. ; DB0=0 basic instructionset
; DB2=1 LCD-chip active ; DB1=1 vertical adres. ; DB0=1 extend. instructionset
movwf variabel
call send_data
movlw b'10011111' ; Contrast
movwf variabel
call send_data
movlw b'00001100' ; Normal mode
movwf variabel
call send_data
call ram_mode
fluiff movlw b'01110011' ; sends data 01110011 to display
movwf variabel
call send_data
goto fluiff
InitdisplayConfig nop
movlw b'00010000'
movwf SSPCON1
movlw b'10000000'
movwf SSPSTAT
call enable_lcd_output
; D/C Low = commandbyte
; SCE LOW = enables data to be clocked in
; DDC=RA0 SCE=RA1 (D)RES=RA2
call reset_display
; bsf PORTA,04h
call shortdelay
call command_mode
call enable_data
movlw b'00100000'
movwf SSPBUF
ff nop
goto ff
call enable_data
; call w1
call shortdelay
call disable_data
bcf PORTA,04h
call enable_data
movlw b'00001001'
movwf SSPBUF
call shortdelay
call disable_data
call ram_mode
movlw b'00001001'
movwf SSPBUF
call enable_data
call shortdelay
call disable_data
nop ;YES
bsf PORTA,DDC ; RAM-BYTE
return
; *** TESTPROGRAM ***
loop nop
CLRWDT
call longdelay
bsf PORTA,04h
call longdelay
bcf PORTA,04h
return
; *** SEND DATA TO DISPLAY ***
send_data movlw 08h
movwf COUNT3
nop ;8bits out
call shiftout
return
; *** SHIFTING OUT TO DISPLAY ***
shiftout rlcf variabel,F
bcf PORTC,SDO
btfsc STATUS,C
bsf PORTC,SDO
; SDO rätt värde
call shortdelay
bsf PORTC,SCK
call shortdelay
bcf PORTC,SCK
decfsz COUNT3,F ;counts down from 8 to 0
goto shiftout
return
;**** LONGDELAY ****
longdelay call shortdelay
decfsz COUNT2,F ;us to see it turned off
goto longdelay
return
;**** SHORTDELAY ****
shortdelay decfsz COUNT1,F ;This second loop keeps the
goto shortdelay ;LED turned off long enough for
return
;**** CONFIG Utföres i början för att initiera picen ****
return
Configg nop
;**** CONFIG Utföres i början för att initiera picen ****
enable_lcd_output nop
bsf SSPCON1,SSPEN ;CHIP ENABLE
return
;**** CONFIG Utföres i början för att initiera picen ****
disable_lcd_output nop
bcf SSPCON1,SSPEN ;CHIP ENABLE
return
; *** DISPLAY OPTIONS ***
; *** RESET DISPLAY ***
reset_display nop
RES_OFF bcf PORTA,DRES ; RESET DISPLAY
call shortdelay
RES_ON bsf PORTA,DRES ; RESET DISPLAY
return
; *** TURN ON COMMAND MODE ***
command_mode nop
DC_OFF bcf PORTA,DDC ; COMMAND-BYTE
return
; *** TURN ON RAM MODE ***
ram_mode nop
DC_ON bsf PORTA,DDC ; COMMAND-BYTE
return
; *** TURN ON DATAENABLE ***
enable_data nop
SCE_OFF bcf PORTA,SCE ; ENABLES DATA IN
return
; *** TURN OFF DATAENABLE ***
disable_data nop
SCE_ON bsf PORTA,SCE ; DISABLES DATA IN
return
end