¿frecuencia i2c incorrecta?

0

Estoy utilizando un ATTiny88 MCU como maestro sobre un Si4012 esclavo. La MCU está ejecutando el código producido por Arduino IDE. La conexión de un analizador lógico a las líneas SCL y SDA produce una salida como la siguiente: segundo scren grab. Este analizador lógico puede no ser el mejor: si intento conectar su entrada CLK a la línea SCL, entonces la interfaz I2C deja de funcionar (y no sé de dónde más obtener una señal de reloj para el analizador). Por lo tanto, el analizador está ejecutando su propio reloj interno mientras toma muestras a 16 MHz. Sin embargo, no puedo ver por qué viene esta lectura de SCL de 1.953 kHz. Probado con tasas SCL de 100 y 400 kHz: el analizador muestra la misma frecuencia de reloj de 1.953 kHz ... ¿por qué? ¿Alguna otra manera rápida de establecer la frecuencia real de I2C sin un alcance?

#define F_TWI             400000L
//#define F_TWI             100000L

....

  Wire.begin(); // Initiate the Wire library
  Wire.setClock(F_TWI);

SegúnelcomentariodeOlin-nuevaimagen.Olvidémencionarquelosdospullupsson3k3yelrieles3v3.TambiéndeboseñalarquelosrelojesdeI2Cyelanalizadorlógicosedesincronizanbastanterápido,comosepuedeverenlaprimeracapturadepantalladelaprimeraimagen.Ah,ylaMCUseestáejecutandoensuosciladorinternoa1MHz.

    
pregunta kellogs

2 respuestas

0

El problema se debió a la frecuencia de 1 MHz en la que estoy ejecutando la MCU. Es simplemente demasiado bajo para mantener un bus I2C de 100 kHz. La aplicación de la forumla de la hoja de datos produce un TWBR negativo, que se traduce en un alto valor de byte , por lo tanto, la baja y aparentemente no cambia la frecuencia de I2C observada.

Lo más rápido que puedo hacer es 64 kHz con TWBR = 0 , pero esto va en contra de la hoja de datos que especifica un valor de al menos 10 para el modo maestro; No estoy seguro si podría salirme con la suya o cuáles fueron las consecuencias negativas de ir por debajo de 10. Si alguien sabe, por favor deje un comentario.

Como una nota al margen, el NACK engañoso que Olin ha notado fue causado porque el esclavo no estaba completamente despierto cuando comencé a hablar con él.

    
respondido por el kellogs
0

Su nueva traza expandida aparece para mostrar una transacción normal de IIC. Hay una condición de inicio, luego el byte de dirección de E0h, luego NACK, luego una condición de parada. El valor del byte de la dirección de E0h significa que la dirección de 7 bits fue 70h (= 112), y la transacción fue una escritura. El NACK significa que o bien no había esclavo a las 70 h, o que no respondió por alguna razón.

Suponiendo que podemos tomar los indicadores de tiempo en la traza en el valor nominal, la velocidad de reloj está un poco por debajo de 2 kHz.

Básicamente, esto muestra el comportamiento normal de IIC, y su interpretación de la traza parece correcta. No estoy seguro de qué más hay que decir.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas