Andy Wood
- 27th October 2011, 02:28
Hi,
I currently have a matrix keypad and lcd connected to a PIC18F4620 running a 20MHz external crystal. When a key is pressed the number of the key is displayed on the lcd and also sent out via the serial port. Everything works as it should providing I have DEFINE OSC 8. As soon as I try to set it to 20, I get jibber out of the serial port.
I am sure I have an error in my configuation and would appreciate any help on this one.
Andy
;----- CONFIG1H Options --------------------------------------------------
'_OSC_LP_1H EQU H'F0' ; LP
'_OSC_XT_1H EQU H'F1' ; XT
'_OSC_HS_1H EQU H'F2' ; HS
'_OSC_RC_1H EQU H'F3' ; RC
'_OSC_EC_1H EQU H'F4' ; EC-OSC2 as Clock Out
'_OSC_ECIO6_1H EQU H'F5' ; EC-OSC2 as RA6
'_OSC_HSPLL_1H EQU H'F6' ; HS-PLL Enabled
'_OSC_RCIO6_1H EQU H'F7' ; RC-OSC2 as RA6
'_OSC_INTIO67_1H EQU H'F8' ; INTRC-OSC2 as RA6, OSC1 as RA7
'_OSC_INTIO7_1H EQU H'F9' ; INTRC-OSC2 as Clock Out, OSC1 as RA7
'_FCMEN_OFF_1H EQU H'BF' ; Disabled
'_FCMEN_ON_1H EQU H'FF' ; Enabled
'_IESO_OFF_1H EQU H'7F' ; Disabled
'_IESO_ON_1H EQU H'FF' ; Enabled
;----- CONFIG2L Options --------------------------------------------------
'_PWRT_ON_2L EQU H'FE' ; Enabled
'_PWRT_OFF_2L EQU H'FF' ; Disabled
'_BOREN_OFF_2L EQU H'F9' ; Disabled
'_BOREN_ON_2L EQU H'FB' ; SBOREN Enabled
'_BOREN_NOSLP_2L EQU H'FD' ; Enabled except SLEEP, SBOREN Disabled
'_BOREN_SBORDIS_2L EQU H'FF' ; Enabled, SBOREN Disabled
'_BORV_46_2L EQU H'E7' ; 4.6V
'_BORV_43_2L EQU H'EF' ; 4.3V
'_BORV_28_2L EQU H'F7' ; 2.8V
'_BORV_21_2L EQU H'FF' ; 2.1V
;----- CONFIG2H Options --------------------------------------------------
'_WDT_OFF_2H EQU H'FE' ; Disabled
'_WDT_ON_2H EQU H'FF' ; Enabled
'_WDTPS_1_2H EQU H'E1' ; 1:1
'_WDTPS_2_2H EQU H'E3' ; 1:2
'_WDTPS_4_2H EQU H'E5' ; 1:4
'_WDTPS_8_2H EQU H'E7' ; 1:8
'_WDTPS_16_2H EQU H'E9' ; 1:16
'_WDTPS_32_2H EQU H'EB' ; 1:32
'_WDTPS_64_2H EQU H'ED' ; 1:64
'_WDTPS_128_2H EQU H'EF' ; 1:128
'_WDTPS_256_2H EQU H'F1' ; 1:256
'_WDTPS_512_2H EQU H'F3' ; 1:512
'_WDTPS_1024_2H EQU H'F5' ; 1:1024
'_WDTPS_2048_2H EQU H'F7' ; 1:2048
'_WDTPS_4096_2H EQU H'F9' ; 1:4096
'_WDTPS_8192_2H EQU H'FB' ; 1:8192
'_WDTPS_16384_2H EQU H'FD' ; 1:16384
'_WDTPS_32768_2H EQU H'FF' ; 1:32768
;----- CONFIG3H Options --------------------------------------------------
'_MCLRE_OFF_3H EQU H'7F' ; Disabled
'_MCLRE_ON_3H EQU H'FF' ; Enabled
'_LPT1OSC_OFF_3H EQU H'FB' ; Disabled
'_LPT1OSC_ON_3H EQU H'FF' ; Enabled
'_PBADEN_OFF_3H EQU H'FD' ; Port B<4:0> digital on RESET
'_PBADEN_ON_3H EQU H'FF' ; Port B<4:0> analog on RESET
'_CCP2MX_PORTBE_3H EQU H'FE' ; Muxed with RB3
'_CCP2MX_PORTC_3H EQU H'FF' ; Muxed with RC1
;----- CONFIG4L Options --------------------------------------------------
'_STVREN_OFF_4L EQU H'FE' ; Disabled
'_STVREN_ON_4L EQU H'FF' ; Enabled
'_LVP_OFF_4L EQU H'FB' ; Disabled
'_LVP_ON_4L EQU H'FF' ; Enabled
'_XINST_OFF_4L EQU H'BF' ; Disabled
'_XINST_ON_4L EQU H'FF' ; Enabled
'_DEBUG_ON_4L EQU H'7F' ; Enabled
'_DEBUG_OFF_4L EQU H'FF' ; Disabled
;----- CONFIG5L Options --------------------------------------------------
'_CP0_ON_5L EQU H'FE' ; Enabled
'_CP0_OFF_5L EQU H'FF' ; Disabled
'_CP1_ON_5L EQU H'FD' ; Enabled
'_CP1_OFF_5L EQU H'FF' ; Disabled
'_CP2_ON_5L EQU H'FB' ; Enabled
'_CP2_OFF_5L EQU H'FF' ; Disabled
'_CP3_ON_5L EQU H'F7' ; Enabled
'_CP3_OFF_5L EQU H'FF' ; Disabled
;----- CONFIG5H Options --------------------------------------------------
'_CPB_ON_5H EQU H'BF' ; Enabled
'_CPB_OFF_5H EQU H'FF' ; Disabled
'_CPD_ON_5H EQU H'7F' ; Enabled
'_CPD_OFF_5H EQU H'FF' ; Disabled
;----- CONFIG6L Options --------------------------------------------------
'_WRT0_ON_6L EQU H'FE' ; Enabled
'_WRT0_OFF_6L EQU H'FF' ; Disabled
'_WRT1_ON_6L EQU H'FD' ; Enabled
'_WRT1_OFF_6L EQU H'FF' ; Disabled
'_WRT2_ON_6L EQU H'FB' ; Enabled
'_WRT2_OFF_6L EQU H'FF' ; Disabled
'_WRT3_ON_6L EQU H'F7' ; Enabled
'_WRT3_OFF_6L EQU H'FF' ; Disabled
;----- CONFIG6H Options --------------------------------------------------
'_WRTB_ON_6H EQU H'BF' ; Enabled
'_WRTB_OFF_6H EQU H'FF' ; Disabled
'_WRTC_ON_6H EQU H'DF' ; Enabled
'_WRTC_OFF_6H EQU H'FF' ; Disabled
'_WRTD_ON_6H EQU H'7F' ; Enabled
'_WRTD_OFF_6H EQU H'FF' ; Disabled
;----- CONFIG7L Options --------------------------------------------------
'_EBTR0_ON_7L EQU H'FE' ; Enabled
'_EBTR0_OFF_7L EQU H'FF' ; Disabled
'_EBTR1_ON_7L EQU H'FD' ; Enabled
'_EBTR1_OFF_7L EQU H'FF' ; Disabled
'_EBTR2_ON_7L EQU H'FB' ; Enabled
'_EBTR2_OFF_7L EQU H'FF' ; Disabled
'_EBTR3_ON_7L EQU H'F7' ; Enabled
'_EBTR3_OFF_7L EQU H'FF' ; Disabled
;----- CONFIG7H Options --------------------------------------------------
'_EBTRB_ON_7H EQU H'BF' ; Enabled
'_EBTRB_OFF_7H EQU H'FF' ; Disabled
DEFINE OSC 8 '20
'-- Defines for LCD -----------------
' Set LCD data port
DEFINE LCD_DREG PORTD
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
' Set LCD Register Select (RS) port
DEFINE LCD_RSREG PORTD
' Set LCD Register Select (RS) bit
DEFINE LCD_RSBIT 2
' Set LCD Enable port
DEFINE LCD_EREG PORTD
' Set LCD Enable bit
DEFINE LCD_EBIT 3
' Set LCD bus size (4 or 8) bits
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
' Set command delay time in uS
DEFINE LCD_COMMANDUS 1500
' Set data delay time in uS
DEFINE LCD_DATAUS 44
'------------------------------------
'-- Defines for Keypad --------------
DEFINE KEYPAD_ROW 2 ' 2 ROW keypad
DEFINE KEYPAD_ROW_PORT PORTB ' ROW port = PORTB
DEFINE KEYPAD_ROW_BIT 4 ' ROW0 = PORTB.4
DEFINE KEYPAD_COL 6 ' 6 COL keypad
DEFINE KEYPAD_COL_PORT PORTC ' COL port = PORTC
DEFINE KEYPAD_COL_BIT 0 ' COL0 = PORTB.0
DEFINE KEYPAD_DEBOUNCEMS 100 ' debounce delay = 100 mSec
DEFINE KEYPAD_AUTOREPEAT 1 ' use auto-repeat feature (Yes=1, No=0)
'------------------------------------
'-- Defines for USART ---------------
' Set receive register for receiver enabled
define HSER_RCSTA 90h
' Set transmit register for transmitter enabled
define HSER_TXSTA 20h
' Set baud rate
Define HSER_BAUD 9600
'------------------------------------
@ __config _CONFIG1H, _OSC_HS_1H
@ __config _CONFIG2L, _PWRT_ON_2L & _BOREN_SBORDIS_2L & _BORV_28_2L
@ __config _CONFIG2H, _WDT_OFF_2H
@ __config _CONFIG3H, _PBADEN_OFF_3H & _MCLRE_ON_3H
@ __config _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ByteA var byte
OSCCON.6 = 1 ' Internal Oscillator Frequency Select bits
OSCCON.5 = 1
OSCCON.4 = 1
OSCCON.1 = 0 ' System Clock Select bits
OSCCON.0 = 0
CMCON.0 = 1 ' Turn comparators OFF
CMCON.1 = 1
CMCON.2 = 1
ADCON0.0 = 0 ' A/D Coverter Module On bit. 1=enabled, 0=disabled
clear
TRISA = 111111 '
TRISB = 001111 '
TRISC = 111111 '
TRISD = 001111 '
include "KeyPad.bas"
pause 500 ' wait one half second for LCD to initialise
Init:
lcdout $FE,1,"Press any Key"
Start:
gosub KeypadScan ' is an include file
if Key then '
lcdout $FE,1,"Key=",dec Key 'display value of pressed key on LCD
hserout ["Key= ",dec Key,13,10] 'send value out serial port
Key = 0
pause 500
goto init
endif
goto start
I currently have a matrix keypad and lcd connected to a PIC18F4620 running a 20MHz external crystal. When a key is pressed the number of the key is displayed on the lcd and also sent out via the serial port. Everything works as it should providing I have DEFINE OSC 8. As soon as I try to set it to 20, I get jibber out of the serial port.
I am sure I have an error in my configuation and would appreciate any help on this one.
Andy
;----- CONFIG1H Options --------------------------------------------------
'_OSC_LP_1H EQU H'F0' ; LP
'_OSC_XT_1H EQU H'F1' ; XT
'_OSC_HS_1H EQU H'F2' ; HS
'_OSC_RC_1H EQU H'F3' ; RC
'_OSC_EC_1H EQU H'F4' ; EC-OSC2 as Clock Out
'_OSC_ECIO6_1H EQU H'F5' ; EC-OSC2 as RA6
'_OSC_HSPLL_1H EQU H'F6' ; HS-PLL Enabled
'_OSC_RCIO6_1H EQU H'F7' ; RC-OSC2 as RA6
'_OSC_INTIO67_1H EQU H'F8' ; INTRC-OSC2 as RA6, OSC1 as RA7
'_OSC_INTIO7_1H EQU H'F9' ; INTRC-OSC2 as Clock Out, OSC1 as RA7
'_FCMEN_OFF_1H EQU H'BF' ; Disabled
'_FCMEN_ON_1H EQU H'FF' ; Enabled
'_IESO_OFF_1H EQU H'7F' ; Disabled
'_IESO_ON_1H EQU H'FF' ; Enabled
;----- CONFIG2L Options --------------------------------------------------
'_PWRT_ON_2L EQU H'FE' ; Enabled
'_PWRT_OFF_2L EQU H'FF' ; Disabled
'_BOREN_OFF_2L EQU H'F9' ; Disabled
'_BOREN_ON_2L EQU H'FB' ; SBOREN Enabled
'_BOREN_NOSLP_2L EQU H'FD' ; Enabled except SLEEP, SBOREN Disabled
'_BOREN_SBORDIS_2L EQU H'FF' ; Enabled, SBOREN Disabled
'_BORV_46_2L EQU H'E7' ; 4.6V
'_BORV_43_2L EQU H'EF' ; 4.3V
'_BORV_28_2L EQU H'F7' ; 2.8V
'_BORV_21_2L EQU H'FF' ; 2.1V
;----- CONFIG2H Options --------------------------------------------------
'_WDT_OFF_2H EQU H'FE' ; Disabled
'_WDT_ON_2H EQU H'FF' ; Enabled
'_WDTPS_1_2H EQU H'E1' ; 1:1
'_WDTPS_2_2H EQU H'E3' ; 1:2
'_WDTPS_4_2H EQU H'E5' ; 1:4
'_WDTPS_8_2H EQU H'E7' ; 1:8
'_WDTPS_16_2H EQU H'E9' ; 1:16
'_WDTPS_32_2H EQU H'EB' ; 1:32
'_WDTPS_64_2H EQU H'ED' ; 1:64
'_WDTPS_128_2H EQU H'EF' ; 1:128
'_WDTPS_256_2H EQU H'F1' ; 1:256
'_WDTPS_512_2H EQU H'F3' ; 1:512
'_WDTPS_1024_2H EQU H'F5' ; 1:1024
'_WDTPS_2048_2H EQU H'F7' ; 1:2048
'_WDTPS_4096_2H EQU H'F9' ; 1:4096
'_WDTPS_8192_2H EQU H'FB' ; 1:8192
'_WDTPS_16384_2H EQU H'FD' ; 1:16384
'_WDTPS_32768_2H EQU H'FF' ; 1:32768
;----- CONFIG3H Options --------------------------------------------------
'_MCLRE_OFF_3H EQU H'7F' ; Disabled
'_MCLRE_ON_3H EQU H'FF' ; Enabled
'_LPT1OSC_OFF_3H EQU H'FB' ; Disabled
'_LPT1OSC_ON_3H EQU H'FF' ; Enabled
'_PBADEN_OFF_3H EQU H'FD' ; Port B<4:0> digital on RESET
'_PBADEN_ON_3H EQU H'FF' ; Port B<4:0> analog on RESET
'_CCP2MX_PORTBE_3H EQU H'FE' ; Muxed with RB3
'_CCP2MX_PORTC_3H EQU H'FF' ; Muxed with RC1
;----- CONFIG4L Options --------------------------------------------------
'_STVREN_OFF_4L EQU H'FE' ; Disabled
'_STVREN_ON_4L EQU H'FF' ; Enabled
'_LVP_OFF_4L EQU H'FB' ; Disabled
'_LVP_ON_4L EQU H'FF' ; Enabled
'_XINST_OFF_4L EQU H'BF' ; Disabled
'_XINST_ON_4L EQU H'FF' ; Enabled
'_DEBUG_ON_4L EQU H'7F' ; Enabled
'_DEBUG_OFF_4L EQU H'FF' ; Disabled
;----- CONFIG5L Options --------------------------------------------------
'_CP0_ON_5L EQU H'FE' ; Enabled
'_CP0_OFF_5L EQU H'FF' ; Disabled
'_CP1_ON_5L EQU H'FD' ; Enabled
'_CP1_OFF_5L EQU H'FF' ; Disabled
'_CP2_ON_5L EQU H'FB' ; Enabled
'_CP2_OFF_5L EQU H'FF' ; Disabled
'_CP3_ON_5L EQU H'F7' ; Enabled
'_CP3_OFF_5L EQU H'FF' ; Disabled
;----- CONFIG5H Options --------------------------------------------------
'_CPB_ON_5H EQU H'BF' ; Enabled
'_CPB_OFF_5H EQU H'FF' ; Disabled
'_CPD_ON_5H EQU H'7F' ; Enabled
'_CPD_OFF_5H EQU H'FF' ; Disabled
;----- CONFIG6L Options --------------------------------------------------
'_WRT0_ON_6L EQU H'FE' ; Enabled
'_WRT0_OFF_6L EQU H'FF' ; Disabled
'_WRT1_ON_6L EQU H'FD' ; Enabled
'_WRT1_OFF_6L EQU H'FF' ; Disabled
'_WRT2_ON_6L EQU H'FB' ; Enabled
'_WRT2_OFF_6L EQU H'FF' ; Disabled
'_WRT3_ON_6L EQU H'F7' ; Enabled
'_WRT3_OFF_6L EQU H'FF' ; Disabled
;----- CONFIG6H Options --------------------------------------------------
'_WRTB_ON_6H EQU H'BF' ; Enabled
'_WRTB_OFF_6H EQU H'FF' ; Disabled
'_WRTC_ON_6H EQU H'DF' ; Enabled
'_WRTC_OFF_6H EQU H'FF' ; Disabled
'_WRTD_ON_6H EQU H'7F' ; Enabled
'_WRTD_OFF_6H EQU H'FF' ; Disabled
;----- CONFIG7L Options --------------------------------------------------
'_EBTR0_ON_7L EQU H'FE' ; Enabled
'_EBTR0_OFF_7L EQU H'FF' ; Disabled
'_EBTR1_ON_7L EQU H'FD' ; Enabled
'_EBTR1_OFF_7L EQU H'FF' ; Disabled
'_EBTR2_ON_7L EQU H'FB' ; Enabled
'_EBTR2_OFF_7L EQU H'FF' ; Disabled
'_EBTR3_ON_7L EQU H'F7' ; Enabled
'_EBTR3_OFF_7L EQU H'FF' ; Disabled
;----- CONFIG7H Options --------------------------------------------------
'_EBTRB_ON_7H EQU H'BF' ; Enabled
'_EBTRB_OFF_7H EQU H'FF' ; Disabled
DEFINE OSC 8 '20
'-- Defines for LCD -----------------
' Set LCD data port
DEFINE LCD_DREG PORTD
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
' Set LCD Register Select (RS) port
DEFINE LCD_RSREG PORTD
' Set LCD Register Select (RS) bit
DEFINE LCD_RSBIT 2
' Set LCD Enable port
DEFINE LCD_EREG PORTD
' Set LCD Enable bit
DEFINE LCD_EBIT 3
' Set LCD bus size (4 or 8) bits
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
' Set command delay time in uS
DEFINE LCD_COMMANDUS 1500
' Set data delay time in uS
DEFINE LCD_DATAUS 44
'------------------------------------
'-- Defines for Keypad --------------
DEFINE KEYPAD_ROW 2 ' 2 ROW keypad
DEFINE KEYPAD_ROW_PORT PORTB ' ROW port = PORTB
DEFINE KEYPAD_ROW_BIT 4 ' ROW0 = PORTB.4
DEFINE KEYPAD_COL 6 ' 6 COL keypad
DEFINE KEYPAD_COL_PORT PORTC ' COL port = PORTC
DEFINE KEYPAD_COL_BIT 0 ' COL0 = PORTB.0
DEFINE KEYPAD_DEBOUNCEMS 100 ' debounce delay = 100 mSec
DEFINE KEYPAD_AUTOREPEAT 1 ' use auto-repeat feature (Yes=1, No=0)
'------------------------------------
'-- Defines for USART ---------------
' Set receive register for receiver enabled
define HSER_RCSTA 90h
' Set transmit register for transmitter enabled
define HSER_TXSTA 20h
' Set baud rate
Define HSER_BAUD 9600
'------------------------------------
@ __config _CONFIG1H, _OSC_HS_1H
@ __config _CONFIG2L, _PWRT_ON_2L & _BOREN_SBORDIS_2L & _BORV_28_2L
@ __config _CONFIG2H, _WDT_OFF_2H
@ __config _CONFIG3H, _PBADEN_OFF_3H & _MCLRE_ON_3H
@ __config _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ByteA var byte
OSCCON.6 = 1 ' Internal Oscillator Frequency Select bits
OSCCON.5 = 1
OSCCON.4 = 1
OSCCON.1 = 0 ' System Clock Select bits
OSCCON.0 = 0
CMCON.0 = 1 ' Turn comparators OFF
CMCON.1 = 1
CMCON.2 = 1
ADCON0.0 = 0 ' A/D Coverter Module On bit. 1=enabled, 0=disabled
clear
TRISA = 111111 '
TRISB = 001111 '
TRISC = 111111 '
TRISD = 001111 '
include "KeyPad.bas"
pause 500 ' wait one half second for LCD to initialise
Init:
lcdout $FE,1,"Press any Key"
Start:
gosub KeypadScan ' is an include file
if Key then '
lcdout $FE,1,"Key=",dec Key 'display value of pressed key on LCD
hserout ["Key= ",dec Key,13,10] 'send value out serial port
Key = 0
pause 500
goto init
endif
goto start