PDA

View Full Version : Strange problem with PBP 2.50



Charles Linquis
- 16th October 2007, 15:13
The following code compiles and runs fine under PBP 2.47
but hangs forever in PBP 2.50


B0 = $AA
Addr = 65534
I2CWRITE SDA1,SCL1,RevABase,addr,[B0]
Pauseus 20
I2CWRITE SDA1,SCL1,RevBBase,addr,[B0]
PAUSEus 20
I2CWRITE SDA1,SCL1,RevCBase,addr,[B0]
PAUSEus 20
I2CREAD SDA1,SCL1,RevABase,addr,[B1]
PAUSEus 20
I2CREAD SDA1,SCL1,RevBBase,addr,[B2]
PAUSEus 20
I2CREAD SDA1,SCL1,RevCBase,addr,[B3]

The I2C device is an EEPROM.
"RevxBase" is a BYTE variable
"Addr" is a word variable

Clock is 40Mhz, but I have the define "I2C_SLOW 1"
2.2K pull-ups are used on SDA and SCL
PIC is 18F8722

The program hangs whenever I do a I2CWRITE -or- I2CREAD

Has anyone else had this problem with 2.50?

Dave
- 16th October 2007, 17:28
Charles Linquis, I have recompiled a program w/PBP2.50 that uses 2 24LC1025's and have had no problem... This is the code I use:

'************************************************* ********************
READ_WRITE_BLK1025: 'WRITE TO or READ FROM SERIAL EEPROM NEXT AVAILABLE STORAGE BLOCK
'************************************************* ********************
SCL = 0 'PRESET CLOCK STATE TO LOW
ADDRESS = 65534 'POINT TO LAST STORED DATA(WORD) ADDRESS
CNTROL_BYTE = CNTRL_BYTE 'COPY CONTROL BYTE
CNTROL_BYTE.1 = 1'DEVICE.1 'SET LSB OF HARDWARE ADDRESS
CNTROL_BYTE.2 = 0'DEVICE.2 'SET MSB OF HARDWARE ADDRESS
CNTROL_BYTE.3 = 1'DEVICE.0 'SET 64K BLOCK BIT
IF READ_WRITE = 1 THEN
INTCON.7 = 0 'DISABLE ALL INTERRUPTS
I2CWRITE SDA,SCL,CNTROL_BYTE,ADDRESS,[BLOCK.LOWBYTE,BLOCK.HIGHBYTE] 'WRITE DATA POINTER TO 12C
INTCON.7 = 1 'RE-ENABLE ALL INTERRUPTS
PAUSE 6 'ALLOW TIME FOR I2C WRITE ~5Ms.
ELSE
I2CREAD SDA,SCL,CNTROL_BYTE,ADDRESS,[BLOCK.LOWBYTE,BLOCK.HIGHBYTE] 'READ DATA POINTER FROM 12C
ENDIF
RETURN


Dave Purola,
N8NTA

Charles Linquis
- 16th October 2007, 20:45
This says it all -

Hi Charles,

There seems to be a problem with the I2C_SLOW define. We are
investigating.


Regards,
Charles Leo
microEngineering Labs, Inc.