Toadman, Bert,
Thank you,
Yes, you were absolutely right, defines and the pull up resistors were the problem - it was my first attempt with I2C. The corrected code and schematic now works. I learnt from manual that control byte is different for control codes and for outputting text. It still did not wirk normally (display did not want to switch into two line mode using commands from manual) but it is fixed after adding some improper code found by trying different combinations.(see below)
Thanks again!
Alexey
ANCON0=%11111111
ANCON1=%11111111
TRISA = 0
TRISB = %0110000
TRISC = 0
RTCCFG=0
SDA var PORTA.0
SCL VAR PORTA.2
I2CDevice var byte
I2CDevice = $7C 'ADDRESS FROM MANUAL
dat var byte 'CONTROL BYTE FOR DATA
cont var byte 'CONTROL BYTE FOR CONTROL CODES
dat=%01000000 'USE TO display data
cont=0 'USE TO send a command
I2CWRITE SDA,SCL,I2CDevice,cont,[$7C] 'Slave
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$00] 'Comsend
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[%0000110000] 'Function [$31]
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$14] 'Internalosc
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$25] 'contrast
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$56] 'Powercontrol
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$6D] 'Followercontrol
PAUSE 250
I2CWRITE SDA,SCL,I2CDevice,cont,[%1100] '$0C isplay on cursor off
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$06] 'Entrymode
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$C0] 'Clear
PAUSE 10
I2CWRITE SDA,SCL,I2CDevice,cont,[3,"*"] '!THIS IS SOMETHING STUPID BUT IT does switch the display into two lines mode!
PAUSE 10
I2CWRITE SDA,SCL,I2CDevice,dat,["text one"] 'print on the first line
pause 2000
I2CWRITE SDA,SCL,I2CDevice,cont,[$01] 'Clear
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,dat,["text two"] 'print on the first line again
PAUSE 2000
I2CWRITE SDA,SCL,I2CDevice,cont,[$01]
PAUSE 1
I2CWRITE SDA,SCL,I2CDevice,cont,[$C0] 'cursor in line two line2
PAUSE 1
i2CWRITE SDA,SCL,I2CDevice,dat,["Line two"]
PORTB.1 = 1
STOP
Bookmarks