Hello,
I'm p....d off right now.
I'm using a PIC16F690.
I'm trying to store and read back 1 databyte to a 24LC08B EEPROM.
I connected the EEPROM accroding to the schematics found in PBP manual (I2C section).
It does not seem to work.
I've checked to see if I had VDD and VSS at eeprom pins, alright, I use 4.7k WPU; alright.
I don't see what can be wrong. I paste snippets related to this code section.
What's funny is that when I display the value of the value read after the write I get "0" which is not the initial value of the variable before the write. It means it can read (assuming the read walue is "0" but it cannot write (= write value '33' at first position in EEPROM... Why?
Could someone have a look?
Variable declaration:
Code:
ep_address VAR BYTE
eep_control VAR BYTE
checkwrite var BYTE 'used to check external EEPROM (in mag) operations
Registers setting
Code:
OSCCON = %01110001 'int osc, hs, 8mhz
''''''CMCON0 = %00000111 'comparators OFF, val = 7
CM1CON0.7 = 0 'comparator1 disabled
CM2CON0.7 = 0 'comparator2 disabled
ANSEL = %00000000 'choose digital i/o, val = 0
OPTION_REG = %01111111 'enable internal porta weak pullups resistors (no weak pull-up available for porta.3), p12. they bring pin to High state; to set a change, pull pin to ground
'First PORT then TRIS, see Mid-range MCU DS !!!
TRISA = %011011 'a5 is output (to lcd pins), A4 is input from supplier (score request)
TRISC = %00000000
TRISB = %0000
WPUA = %000111 'enable weak pull ups individually on portA
'Rem: porta.3 (MCLR) has no internal weak pullups, we add an external 10k WPU !!!!
'100k wpd on A4
WPUB = %0000
PORTA = %001111 'set pins logic
PORTB = %0000
PORTC = %00000000 'set pins logic
'porta pins with weak pullups will be set to high (i.e. 5v by the pullups)
Variables initialization
Code:
eep_address = 0
eep_control = %10100000 'block 0 (of 0-3), byte 0 (of 0 to 255)
The code section writing and checking EEPROM
Code:
'routine that checks if the external eeprom (the mag) is connected to the supplier
'it writes than reads back the test value (33)
checkwrite = 33
eep_address = 0 'use storage byte 1 of 255 fo rthe test
I2CWRITE PORTC.6,PORTC.7,eep_control,eep_address,[checkwrite] 'store maxitem value in the mag external EEPROM
PAUSE 15 'hadware dependent
I2CREAD PORTC.6,PORTC.7,eep_control,eep_address,[checkwrite] 'store maxitem value in the mag external EEPROM
LCDOUT $fe,1,"I2C:",#checkwrite
PAUSE 2000
IF (checkwrite != 33) then
LCDOUT $fe,1,"couldn't write"
PAUSE 4000
checkwrite = 0
GOTO endofroutine
ENDIF
checkwrite = 66
Bookmarks