Wow, there's LOTS of "features" on a 18F46J50, and LOTS of registers and configuration thingies to set!
And lots of RTFM'ing to be done to get this baby under control!
Anyway, I've got far enough along to get the RTCC working and display the time to an LCD. Yay!
Since there seems to be a shortage of info about the 18F46J50 here on the forum so far, I'll post my bit of working code. It's crude I'm sure, but it is functional and maybe it will be a helpful start for someone else.
This code is enough to set up and turn on the RTCC module, using an external 32.768Khz xtal on the Timer1 Osc, and it displays the time on a 2 x 20 parallel LCD display.
Here's my code, busted into 2 parts so it'll fit on the forum...
Part 1: "Setup"
Code:
'****************************************************************
'18F46J50 test program to turn on the RTCC and display time on a 2x20LCD
'****************************************************************
Include "MODEDEFS.BAS" 'Include Shiftin/out modes
DEFINE LCD_DREG PORTD 'Set LCD Data port
DEFINE LCD_DBIT 4 'Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTE 'Set LCD Register Select port
DEFINE LCD_RSBIT 0 'Set LCD Register Select bit
DEFINE LCD_EREG PORTE 'Set LCD Enable port
DEFINE LCD_EBIT 2 'Set LCD Enable bit
DEFINE LCD_BITS 4 'Set LCD bus size (4 or 8 bits)
Define OSC 8 '8MHz Oscillator
'---SET UP A BUNCH OF REGISTERS----------
OSCCON = %01111111 'idle enable off, 8MHz clock, primary clock source
ADCON0 = 0 'Turn OFF the ADC
ANCON0 = %11111111 'Analog Port Configuration bits (AN7-AN0) 1 = Digital, 0 = analog
ANCON1 = %00011111 'Analog Port Configuration bits (AN12-AN8) 1 = Digital, 0 = analog
PMCONH.7 = 0 'Parallel Master Port Enable = OFF
PMCONH.2 = 0 'Byte Enable Port Enable = OFF
PMCONH.1 = 0 'Write Enable Strobe Port Enable = OFF
PMCONH.0 = 0 'Read/Write Strobe Port Enable = OFF
PMEH = 0 'PARALLEL PORT ENABLE REGISTER HIGH BYTE = OFF
PMEL = 0 'PARALLEL PORT ENABLE REGISTER LOW BYTE = OFF
RTCCFG = %10100100 'RTCC CONFIGURATION REGISTER ... sets up some of the RTCC stuff
'RTCCAL = %00000000 'RTCC CALIBRATION REGISTER ... 0 = no adjustment
PADCFG1 = 0 'PAD CONFIGURATION REGISTER
T1CON = %10001111 '
TRISA = %00000000 'Set PORTA to outputs
TRISB = %00000000 'Set PORTB to outputs
TRISC = %00000000 'Set PORTC to outputs
TRISD = %00000000 'Set PORTD to outputs
TRISE = %00000000 'Set PORTE to outputs
'---PERIPHERAL CONFIGURATION REGISTERS---------------------------
PPSCON = 0 'PERIPHERAL PIN SELECT INPUT REGISTER 0 -- 0 = unlocked, 1 = locked
'-------INPUT PIN SELECT-----------------------------------------
RPINR1 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 1 ' SET ALL PERIPHERALS TO A NON-EXISTANT PIN [27] (no peripherals selected on any pin)
RPINR2 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 2
RPINR3 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 3
RPINR4 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 4
RPINR6 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 6
RPINR7 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 7
RPINR8 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 8
RPINR12 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 12
RPINR13 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 13
RPINR16 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 16
RPINR17 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 17
RPINR21 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 21
RPINR22 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 22
RPINR23 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 23
RPINR24 = 27 'PERIPHERAL PIN SELECT INPUT REGISTER 24
'-------OUTPUT PIN SELECT-----------------------------------------
RPOR0 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 0 'SET ALL OUTPUTS TO THE "NULL" SETTING (no peripherals selected on any pin)
RPOR1 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 1
RPOR2 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 2
RPOR3 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 3
RPOR4 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 4
RPOR5 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 5
RPOR6 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 6
RPOR7 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 7
RPOR8 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 8
RPOR9 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 9
RPOR10 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 10
RPOR11 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 11
RPOR12 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 12
RPOR13 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 13
RPOR17 = 14 'PERIPHERAL PIN SELECT OUTPUT REGISTER 17 'CCP1 routed to RP17 (for the LCD contrast)
RPOR18 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 18
RPOR19 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 19
RPOR20 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 20
RPOR21 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 21
RPOR22 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 22
RPOR23 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 23
RPOR24 = 0 'PERIPHERAL PIN SELECT OUTPUT REGISTER 24
'---ALIAS PINS-------------------------
RW var PORTE.1 'LCD READ/WRITE
LED1 VAR PORTB.4 'Blinky thing 1
LED2 var PORTD.0 'Blinky thing 2
LCDcontrast var PORTC.6 'HPWM for LCD contrast
'---ALLOCATE VARIABLES-----------------
contrast var word 'LCD contrast
timevall var word 'temporary storage for rtcvall
timevalh var word 'temporary storage for rtcvalh
weekdaynum var word 'Weekdaynum = 0-6 (0= sunday, 1= monday, etc)
weekday var byte[9] 'monday, tuesday, wednesday, etc
year var word 'year = 0 - 99
month var word
monthname var byte[3] 'jan, feb, mar, etc
day var word
hours var word
minutes var word
seconds var word
pmflag var word
'---SET SOME VARIABLES-----------------
RW = 0 'LCD R/W = Write
led1 = 0 'Turn the LED off
led2 = 0 'Turn the LED off
contrast = 200 'Set LCD contrast (0-255) [0 = max contrast, 255 = min]
'-----------------------------------------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------------------------------------
end of part1....
Bookmarks