I2CREAD DataPin ,ClockPin,Control,{Address,} [ Var {,Var ...} ] { . Label }
Envía los bytes de Control y opcionalmente los de Address , a través del ClockPin y el DataPin y guarda los bytes recibidos dentro de Var .ClockPin y dataPin pueden ser constantes , 0-15 , una variable que contenga un número (p.ej. B0) , ó un número de Pin (p.ej. PORTA.0)
I2CREAD y I2CWRITE pueden ser usados para leer y grabar datos de un EEPROM serial usando una interfase I2C de 2 cables , como Microchip 24LC01B ó similar .Esto permite guardar datos en una memoria externa no volátil , para que sean mantenidos aún sin energía conectada .Estos comandos funcionan en modo I2C master y también son usados para comunicarse con otros dispositivos con interfase I2C , como sensores de temperatura y convertidores A/D .
Los 7 bits superiores del byte de Control contienen el código de control junto con la selección del chip e información adicional de dirección ., dependiendo de cada dispositivo .El bit inferior es una bandera interna que indica si es un comando de lectura ó escritura y no se debe usar .
Este formato para el byte de Control es diferente al usado por el PBP original .Asegúrese de usar este formato en operaciones PBP I2C .
Por ejemplo , cuando comunicamos con un 24LC01B , el código de control es %1010 y no se usa la selección de chip , por lo que el byte de Control será %10100000 ó $A0 .Algunos formatos de Control son :
bbb = bits de selección de block (direcciones de orden alto)
ddd = bits de selección de dispositivo
xxx = no importa
El tamaño de dirección enviado (byte ó word) es determinado por el tamaño de la variable usada .Si se usa una variable con tamaño byte se envía una dirección de 8 bits.Si se envía una variable de tamaño word ,se envía una dirección de 16 bits. Asegúrese de usar una variable apropiada al dispositivo a comunicar .
Si se especifica Var con tamaño word , se leen 2 bytes y se guarda primero el de mayor orden y luego el de orden inferior dentro de Var .Este orden es el inverso al que se osa normalmente con variables .
Si se usa la opción Label , se saltará a ella , si no se recibe un reconocimiento del dispositivo I2C .
Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx .Simplemente especifique los nombres de pin de las líneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa .
DEFINE I2C_INTERNAL 1
Vea las hojas de datos de Microchip para más indormación .
El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz .Dispositivos rápidos (400 Mhz) pueden ser usados hasta 20 Mhz .Si se desea acceder un dispositivo de velocidad standard a 8 Mhz , se debe usar el siguiente DEFINE en el programa :
DEFINE I2C_SLOW 1
El clock I2C y las líneas de datos pueden ser empujados a Vcc con un resistor de 4-7 K de acuerdo al siguiente esquema ,ya que ambos trabajan en modo de colector abierto .
addr var byte
cont con %10100000
addr =17 ´ coloca la dirección en 17
´ lee datos de la dirección 17 y los deja en B2
I2CREAD PORTA.0,PORTA.1,cont,addr, [ B2 ]
I2CWRITE DataPin ,ClockPin,Control,{Address,} [ Value {,Value ...} ] { . Label }
Envía los bytes de Control y opcionalmente los de Address , a través del ClockPin y el DataPin seguidos por Value .ClockPin y DataPin pueden ser constantes , 0-15 , una variable que contenga un número (p.ej. B0) , ó un número de Pin (p.ej. PORTA.0)
El tamaño de dirección enviado (byte ó word) es determinado por el tamaño de la variable usada .Si se usa una variable con tamaño byte se envía una dirección de 8 bits.Si se envía una variable de tamaño word ,se envía una dirección de 16 bits. Asegúrese de usar una variable apropiada al dispositivo a comunicar .
Cuando se escribe un EEPROM serial , es necesario esperar 10 ms (dependiendo del dispositivo ) para completar la grabación , antes de intentar comunicarse nuevamente con el dispositivo .Si se intenta un I2CWRITE ó I2CREAD antes que se complete la grabación , se ignorará el acceso .
Aunque una sola declaración I2CWRITE puede ser usada para grabar múltiples bytes simultaneamente , se puede violar los requerimientos de tiempo de grabación para los EEPROM seriales .Algunos permiten grabar múltiples bytes en una página simple antes de necesitar una espera .Revise la hoja de datos del dispositivo que esté usando .La opción de grabación múltiple puede ser útil con dispositivos I2C que no deban esperar entre grabaciones .
Si se usa la opción Label , se saltará a ella , si no se recibe un reconocimiento del dispositivo I2C .
Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx .Simplemente especifique los nombres de pin de las líneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa .
DEFINE I2C_INTERNAL 1
Vea las hojas de datos de Microchip para más indormación .
El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz .Dispositivos rápidos (400 Mhz) pueden ser usados hasta 20 Mhz .Si se desea acceder un dispositivo de velocidad standard a 8 Mhz , se debe usar el siguiente DEFINE en el programa :
DEFINE I2C_SLOW 1
Vea el siguiente comando I2CREAD
addr var byte
cont con %10100000
addr =17 ´ coloca la dirección en 17
´ envía el byte 6 a la dirección 17
I2CWRITE PORTA.0,PORTA.1,cont,addr, [ 6 ]
Pause 10 ´ espera 10 ms que se complete la grabación
addr =1 ´ coloca la dirección en 1
´ envía el byte en B2 a la dirección 1
I2CWRITE PORTA.0,PORTA.1,cont,addr, [ B2 ]
Pause 10 ´ espera 10 ms que se complete la grabación