Hello helpful people!

I wrote (well..copied, pasted, and hacked) a program to simply spit out some messages to a LCD. It works great with the internal or external 4MHz clock. But when I try to use a faster clock, there are some good characters, but also some garbage displayed on the LCD.

I'd like to increase the clock speed because eventually I would like to interface with a RFID reader Ic where the Rx data transmission rate is 15625 baud async. So I picked some 12MHz and 16MHz resonators to play with.

The LCD is a 14 pin, 16x4 character LCD from OPTREX. I assume it's compatable with the common Hitachi LCD controller. The only wierd thing about the LCD was that when I used the "move cursor to beginning of x line" commands, the cursor was a couple of spaces off, so I played with it until it looked right.

Here is my code, it's for a 16F628A, using PBP in MPLAB and MPASM

Code:
 
' PicBasic program to demonstrate operation of an LCD in 4-bit mode
'
' LCD should be connected as follows:
'       LCD     PIC
'       DB4     PortA.0
'       DB5     PortA.1
'       DB6     PortA.2
'       DB7     PortA.3
'       RS      PortA.4 (add 4.7K pullup resistor to 5 volts)
'       E       PortB.3
'       RW      Ground
'       Vdd     5 volts
'       Vss     Ground
'       Vo       (ground)
'       DB0-3   No connect

    '
    '    PIC Configuration
    '    =================
    '    @ __CONFIG  _INTRC_OSC_NOCLKOUT & _MCLRE_OFF  &  _LVP_OFF & _WDT_OFF & _PWRTE_ON  & _BODEN_ON
  
     @ __CONFIG  _XT_OSC & _MCLRE_OFF  &  _LVP_OFF & _WDT_OFF & _PWRTE_ON  & _BODEN_ON  

    '
    '    Hardware configuration
    '    ======================

	DEFINE OSC 12
    CMCON=7                    ' disable internal comparator
    TRISA=0                    ' Set all PORTA capable i/o to output
    TRISB=0                    ' Set all PORTB i/o to output
    
    '
    '    Hardware initialisation
    '    =======================

DEFINE LCD_LINES 4

    Pause 1000                 '1 second for LCD initialisation
    LCDOUT $FE, 1			   ' clear LCD
    '

Start:
    LCDOUT $FE,2,  "     WELCOME    "
    LCDOUT $FE,$C0,"     TO THE     "
    LCDOUT $FE,$90,"   ELECTRICAL   "
    LCDOUT $FE,$D0,"   DEPARTMENT   "


   Pause 3000    


    LCDOUT $FE,2,  "                "
    LCDOUT $FE,$C0,"  Please have   "
    LCDOUT $FE,$90,"   a  seat      "
    LCDOUT $FE,$D0,"                "



   Pause 3000  

    LCDOUT $FE,2,  "   someone will "
    LCDOUT $FE,$C0,"    be  with    "
    LCDOUT $FE,$90,"       you      "
    LCDOUT $FE,$D0,"     shortly    "


   Pause 3000  



    Goto Start

Thanks for looking.