problema TWI en mega2560

0

El TWI en mega2560 parece estar funcionando mal. El siguiente código, que se considera correcto según la hoja de datos, proporciona una secuencia de inicio adecuada, una dirección correcta y un ACK correcto. Pero al escribir y enviar datos a TWDR y luego configurar todos los bits en TWCR incluido TVINT, no sucede nada. Al intentar la misma puesta en marcha con lectura, funciona bien hasta el punto de la lectura y, de nuevo, no pasa nada. Pero la condición de parada después de la lectura se realiza correctamente. Entonces, ¿qué le impide emitir la secuencia de lectura / escritura adecuada? Incluyendo una imagen de osciloscopio de SCL (arriba) y SDA (abajo) durante la lectura. Código:

------------- write to PCF8574N extension port -------------

I2CFLAG=false;

/*start*/
TWCR= (1<<TWINT) | (1<<TWSTA) | (1<<TWEN) | (1<<TWIE); 
while(!I2CFLAG);
ta=TWSR;
/*adress+W*/
I2CFLAG=false;
TWDR=0x40;
TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE); 
while(!I2CFLAG);
tb=TWSR;

/* data out*/
I2CFLAG=false;
TWDR=0x5A;
TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE);
while(!I2CFLAG);
tc=TWSR;


------------- read from extension port --------------------

I2CFLAG=false;
/*start*/
TWCR= (1<<TWINT) | (1<<TWSTA) | (1<<TWEN) | (1<<TWIE); 
while(!I2CFLAG);
ta=TWSR;

/* set address+R*/
I2CFLAG=false;
TWDR=0x41;
TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE);
while(!I2CFLAG);
tb=TWSR;

/* get data*/
I2CFLAG=false;
TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE); 
while(!I2CFLAG);
tc=TWSR;
twdata=TWDR;

/*stop*/
I2CFLAG=false;
TWCR= (1<<TWINT) | (1<<TWSTO) | (1<<TWEN) | (1<<TWIE);
while(!I2CFLAG);
te=TWSR;
tdata1=TWDR;
/* end of process */

    
pregunta user46876

1 respuesta

1

no, el ACK es un 0 y un NACK es un 1. SDA es un trazo inferior y SCL el trazo superior. Como yopu puede ver cuando SCL se pone alto, el SDA es bajo, lo que significa ACK (ya que el I2C es un pullup pasivo y, por lo tanto, una señal activa es baja).

    
respondido por el zecharia

Lea otras preguntas en las etiquetas