Está en la página 1de 52

Nombre: Sebastian Cardozo Padilla.

SDA Los dispositivos en el I²C bus son maestros o esclavos.

El maestro, es siempre el dispositivo que maneja la línea de


reloj SCL. Los esclavos, son los dispositivos que responden al
• datos maestro. Un esclavo no puede iniciar una transferencia a través del
I²C bus, sólo un maestro puede hacer esa función.

LOS ESCLAVOS, nunca inician una transferencia. Tanto el

SCL maestro, como el esclavo puede transferir datos a través del I²C bus,
pero la transferencia siempre es controlada por el maestro.

• reloj
 Todas las direcciones I²C bus son de 7 bits o 10 bits (MPU-6050-7BITS)
a) se pueden tener hasta 128 dispositivos en el bus I²C, ya que un número de 7bit puede
estar entre 0 y 127
 El pulso de reconocer o reconocimiento, conocido como ACK (del inglés
Acknowledge), se logra colocando la línea de datos a un nivel lógico bajo, durante
el transcurso del noveno pulso de reloj.
1. En el primer paso, el byte que se envía es START, después de la condición de Bit
inicio (START) se envía un byte que, contiene siete bits que componen la dirección del
dispositivo que se quiere seleccionar y un octavo bit R/W (que corresponde a la
operación que se quiere realizar en él, lectura o escritura).
2. El segundo paso, este byte, contiene la dirección del registro que se desea leer/escribir.
Puede realizarse un reinicio como se muestra en la figura.
3. El tercer paso, aquí se escribe la dirección con el bit menos significativo LSB a nivel 1,
para indicar que se lee.
4. El cuarto paso y siguientes continúan la misma función de lectura, no tiene por qué ser
sólo uno.
cada byte transferido al bus, le sigue un noveno pulso de reloj durante el cual, el
dispositivo receptor, debe generar un pulso de reconocimiento A.
 Esto es para comunicaciones simples I²C casi todo, pero hay una complicación
más. Cuando el maestro lee del esclavo, es el esclavo el que coloca los datos sobre
la línea SDA, pero es el maestro quien controla el reloj. ¿Qué pasa si el esclavo no
está listo para enviar los datos?
 El protocolo I²C proporciona una solución a esto: el esclavo está autorizado a
mantener la línea SCL baja. Esto se llama estiramiento de reloj. Cuando el esclavo
recibe la orden de lectura del maestro, éste mantiene la línea de reloj baja. El
microprocesador obtiene los datos solicitados, los coloca en el registro de
transmisión y libera la línea de reloj que habilita la resistencia RPA para finalmente
dejarla a alto.
1

BINARIO: 10000000000000000000000
HEXA: 0x400000

PRENDE EL RELOJ DEL I2C2 (UTILIZADO EN EL CODIGO)


1 0

El reloj HSI se selecciona


como reloj I2C2

NOTA: La señal de reloj HSI se genera desde un oscilador RC interno de 16 MHz y se puede usar
directamente como un reloj del sistema, o utilizado como entrada PLL.
10 10

PONE LOS PINES 10 Y 11 EN


MODO ALTERNANTE.

BIN: 101000000000000000000000
HEXA: 0xA00000
 función alternante:

 El búfer de salida se puede configurar en modo de drenaje abierto o push-pull


 El búfer de salida es impulsado por las señales provenientes del periférico (transmisor
habilitar y datos)
 Las resistencias de bajada se activan o no dependiendo del valor.
1 1

Se asignan a los pines 10 y 11 su


función correspondiente ya vista en la
diapositiva anterior

BIN: 100010000000000
HEXA: 0x4400
1 1

BIN: 110000000000
HEXA: 0xC00
 La razón por la que esto es un problema es
que puede resultar en un cortocircuito
directo de la alimentación a tierra
 Es posible que un dispositivo esté manejando
SDA alto, mientras que otro dispositivo en el
bus está conduciendo SDA bajo. Si las salidas
son de drenaje abierto, los dispositivos solo
pueden conducir en baja o flotar (levantado
en el caso de I2C). Esto significa que no hay
conflicto, ya que el dispositivo que se está
agotando siempre ganará en el autobús.
01 01

PULL UP EN LOS PINES 10 Y 11

BIN:10100000000000000000000
HEXA: 0x500000

NOTA: VER DIAPOSITIVA ANTERIOR


11 11

VELOCIDAD ALTA PINES 10 Y 11

BIN: 111100000000000000000000
HEXA:0xF00000
 Luego, el I2C se puede habilitar configurando el bit PE en el registro I2C_CR1
 Cuando el I2C está deshabilitado (PE = 0), el I2C realiza un reinicio del software.
 Antes de habilitar el periférico I2C configurando el bit PE en el registro I2C_CR1,
el usuario debe configurar los filtros de ruido, si es necesario. analógico
configurando el bit ANFOFF, y / o seleccionar un filtro digital.
 Antes de habilitar el periférico, el reloj maestro I2C debe configurarse
configurando el Bits SCLH y SCLL en el registro I2C_TIMINGR.
 Para iniciar la comunicación, el usuario debe programar los siguientes parámetros
para. El esclavo direccionado en el registro I2C_CR2
 Se puede realizar un reinicio del software borrando el bit PE en el registro
I2C_CR1. En eso caso I2C líneas SCL y SDA son liberados. Las máquinas de
estados internos se reinician y Los bits de control de comunicación, así como los
bits de estado, vuelven a su valor de restablecimiento. Los registros de
configuración no se ven afectados. Aquí está la lista de bits de registro impactados:
1. Registro I2C_CR2: START, STOP, NACK
2. Registro I2C_ISR: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR,
ARLO, OVR
Reinicio por software (deshabilita PE) (PE=0)

0
PARAMETROS:
FRECUENCIAS DE OPERACIÓN I2C SEGÚN DATASHEET MPU-6050

POR LO TANTO:
1 1 1 1

1 1 1 1 1 1 1

BIN: 110000010000100000111100010011
HEXA: 0x30420F13
1

0
 AUTOEND (1): Manda el estado stop automáticamente después de que los datos
son transferidos.

 ADD10 (0) : El maestro opera en modo de direccionamiento de 7 bits


1

1 1
 ANFOFF: Desactiva el filtro analógico.

 NOSTRECH: Deshabilita el estiramiento de reloj

 PE: Activa el I2C


1. Enviar una secuencia de inicio (START)
2. Enviar la dirección I2C del esclavo más el bit bajo R/W.
3. Enviar el número de registro interno al que se quiere escribir.
4. Enviar el byte de datos.
5. Enviar la secuencia de parada (STOP).
1 1

1 1 1 1
 AUTOEND (1): Manda el estado stop automáticamente después de que los datos
son transferidos.

 NBYTES (1): Numero de bytes que queremos enviar. En este caso 2 bytes. (Por eso
Bin=0010 que equivale a 2 en decimal) el primero de dirección y el otro de datos.
 START (1): Manda el bit de inicio. Se borra por hardware después de enviar la
dirección.
 SADD(0x68): Es la dirección del esclavo, en este caso el MPU-6050. (1101000)

MPU-6050:
Cuando TXDR está vacío se vuelve 1 y se sale del while. (recomendado
antes de enviar un dato) (espera que se vacíe el TXDR) (luego de esto se
debe escribir)

Envía el hexadecimal que cumple una función en


especifico en el esclavo a utilizar (en este caso el
MPU-6050)

Repite el proceso porque en NBYTES se dijo


que enviábamos 2 datos.
También espera a que TXR esté vacío pero después de esto no se debe
escribir

Espera a que se detecte una condición de parada (detecta el stop


automático) Luego se procede a quitar ese bit por software.
TABLA DONDE ESTÁ TODO LO ANTERIOR
1. Envío en una función write pero con un byte un hexadecimal (en este caso el
hexadecimal el eje que queramos obtener) para preparar al modulo.
2. Reinicio la configuración de escritura para proceder a la configuración de
lectura.
3. Como se reinicio el I2C se tiene que volver a configurar normal (función Init)
4. Se configura en modo lectura.
1 1

1 1 1 1
 SADD(0x68): Es la dirección del esclavo, en este caso el MPU-6050. (1101000)

MPU-6050:
Es la misma función write pero con un solo byte. Aquí se
le está avisando al modulo que dato queremos obtener.
Lo reinicio porque ahora necesito que lea un valor del
esclavo. (se vuelve a configurar normal)
1 1

1 1 1 1 1
 RD_WRN (1): El maestro solicita una transferencia de lectura.
Se procede a leer el dato.
Como colocamos CR2 en modo lectura entonces se
reinicia para colocarlo modo normal y se retorna el
valor del dato obtenido por el sensor.
1 1
• HSEON: Activa el reloj de la tarjeta de 8Mhz.

• HSERDY: Es activado cuando el reloj está preparado.


1 1

Bin: 10000000010000000000000000000
Hexa: 10080000
 UART4EN:
 PWREN:

También podría gustarte