PIC - direcciónes I2C

Hola a todos,

Voy a exponer mi duda junto con una parte explicativa general, así contribuyo a la vez que me ayudáis, :) (disculpad si me confundí en alguna cosa).

En I2C, para comunicarse con un dispositivo mediante PIC's, se ha de indicar la dirección del dispositivo con el cuál te comunicarás.

Las direcciones tienen un formato como éste: XXXX XXX X
  • Los 4 primeros bits, indican el tipo de dispositivo.
  • Los siguientes 3 bits, indican qué dispositivo es de los que están conectados (2^3=8 dispositivos posibles), normalmente "000" si sólo hay un dispositivo de ese tipo.
  • y el último bit, indica si va a ser una instrucción de escritura o lectura.

Ahora la pregunta:
Al igual que la dirección I2C de una EEPROM es 1010, y un RTC es 1101,
¿cuál es la dirección que indica que te comunicarás con otro PIC?

¿0000?, ¿se tiene que configurar quizás?
((El PIC es un 16F87))

Un saludo y gracias por vuestra ayuda.
Epsilon741

PD: puse un acento de más en el título que no puedo editar.
 
Última edición:
Usa el registro SSPADD que en modo I2C es usado para almacenar la dirección I2C (puedes poner cualquiera); soporta direcciones de 7bits, 8bits y 10bits, este último es agregando 2bits más del registro SSPSTAT.
Revisa el datahseet para que lo tengas más claro.

salufos
 
Qué bien, que respuesta tan rápida! Gracias! :aplauso:

Lo que no sé, es qué tendrá que ver con esa conocida fórmula de:
I2C master mode, clock = FOSC / (4 * (SSPADD+1) ):confused:


Como dato, os informo que por defecto en los 16F87, el SSPADD se inicia todo a 0.
(Si se quisiese modificar, antes se debería activar el UA del registro SSPADD).
 
Última edición:
Lo que no sé, es qué tendrá que ver con esa conocida fórmula de:
I2C master mode, clock = FOSC / (4 * (SSPADD+1) )
No. Se sabe que en el bus I2C es el master quien da los pulsos de Clock, por lo que el PIC en modo Slave no requiere de esa fórmula además ese registro es el que almacena la dirección I2C cuando es esclavo.

Basta con configurar la longitud de los bits (7, 8, 10bits), escribir el valor en SSPADD el cual será la dirección del PIC en modo esclavo.

Al menos es lo que entiendo :D
 
ok ok, :unsure: es decir, que el SSPADD nunca se usará para ambas cosas a la vez, debido a que una de sus funciones sólo la puede usar el Master y la otra sólo el Slave, así que no hay problema de sobre escribirse ni cosas así.
:)
 
Un ejemplo en el pic16f877A.
Código:
SSPADD = $04          ' Cargamos la direccion(0x04) del Slave
SSPCON2 = 0           ' Reseteamos el registro de control del I2C
SSPCON = %00110110    ' Configuramos en modo Slave
Para el PIC16F87 debe ser similar (revisemos el datasheet).

saludos.
 
Atrás
Arriba