Re: Sala de peru
Cardservicios, Here is an A/D routine I wrote a few years back for accessing 2 MCP3551 A/D's for my daughter's hydroponic and heater controller. I did not use I2C hardware directly but maybe you can use it as a basis for an I2C routine.
'************************************************* *******************
READMCP3551: 'CAPTURE MCP3551 22 BIT SIGMA/DELTA READING (SPI)
'************************************************* *******************
SCL = 1 'PRESET CLOCK STATE TO HIGH
SELECT CASE ADCHANNEL
CASE 0
CS0 = 0 'ENABLE MCP3551 #1
CASE 1
CS1 = 0 'ENABLE MCP3551 #2
CASE ELSE
VOLTS(ADCHANNEL) = 0
RETURN
END SELECT
PAUSEUS 2
IF SDA = 0 THEN 'CHECK FOR CONVERSION COMPLETE
SHIFTIN SDA,SCL,6,[MSBYTE\8,MIDBYTE\8,LSBYTE\8]
CS0 = 1 'DISABLE MCP3551 #1
CS1 = 1 'DISABLE MCP3551 #2
JUNK = MSBYTE >> 5
SELECT CASE JUNK
CASE 0 'NORMAL POSITIVE READING
POLARITY = 0
OVERANGE(ADCHANNEL) = 0
CASE 1 'NORMAL NEGATIVE READING
POLARITY = 1
OVERANGE(ADCHANNEL) = 0
CASE 3 'FULL SCALE POSITIVE READING
POLARITY = 0
OVERANGE(ADCHANNEL) = 1
CASE 4 'FULL SCALE NEGATIVE READING
POLARITY = 1
OVERANGE(ADCHANNEL) = 1
END SELECT
IF OVERANGE(ADCHANNEL) = 0 THEN 'IF READING IS WITHIN LIMITS
IF POLARITY = 0 THEN 'POSITIVE POLARITY
ADSCRATCH1.BYTE3 = 0
ADSCRATCH1.BYTE2 = (MSBYTE & %00011111)
ADSCRATCH1.BYTE1 = MIDBYTE
ADSCRATCH1.BYTE0 = LSBYTE
ELSE 'POLARITY = 1 'NEGATIVE POLARITY
ADSCRATCH1.BYTE3 = 255
ADSCRATCH1.BYTE2 = MSBYTE | %11100000
ADSCRATCH1.BYTE1 = MIDBYTE
ADSCRATCH1.BYTE0 = LSBYTE
ENDIF
ELSE
IF POLARITY = 0 THEN 'POSITIVE POLARITY
ADSCRATCH1.BYTE3 = 127
ELSE 'POLARITY = 1 'NEGATIVE POLARITY
ADSCRATCH1.BYTE3 = 255
ENDIF
ADSCRATCH1.BYTE2 = 255
ADSCRATCH1.BYTE1 = 255
ADSCRATCH1.BYTE0 = 255
ENDIF
VOLTS(ADCHANNEL) = ADSCRATCH1
ELSE
CS0 = 1 'DISABLE MCP3551 #1
CS1 = 1 'DISABLE MCP3551 #2
ENDIF
RETURN
Dave Purola,
N8NTA
EN82fn
Bookmarks