Utilizo la comunicación I2C con dos tableros stm8s.
Mi código maestro:
I2C_GenerateSTART(ENABLE);
I2C_Send7bitAddress(0x30, I2C_DIRECTION_TX);
I2C_SendData(0x61);
I2C_GenerateSTOP(ENABLE);
delay(1500);
Mi dirección de esclavo es 0x30. Te envío 0x61. Analicé el tablero maestro de stm8s con ossiloscope. Veo desde lister:
Dirección: 30R
Datos: cualquier cosa
Falta ACK: X (con fondo rojo)
Mi señal de la placa maestra con stm8s: [! [ingrese la descripción de la imagen aquí] [1]] [1]
¿Cuál podría ser el problema por faltar ack? Y, ¿es verdadera la dirección y los valores de los datos? ¡Gracias!
Y,
Mi código de arduino maestro:
Wire.beginTransmission(0x30); // transmit to device 0x30
Wire.write(0x61); // sends one byte
Wire.endTransmission(); // stop transmitting
delay(500);
Y esta foto del master arduino codifica con ossiloscope:
Aquí,ladirecciónes30W,peroladireccióndelcódigomaestrodemistm8ses30R.Cambiéestalíneadelcódigomaestrodestm8s:
I2C_Send7bitAddress(0x30,I2C_DIRECTION_RX);//I2C_Send7bitAddress(0x30,I2C_DIRECTION_TX);
Peroladirecciónsiguesiendo30R.
códigodeestalínea:
/***@briefTransmitsthe7-bitaddress(toselectthe)slavedevice.*@paramAddress:Specifiestheslaveaddresswhichwillbetransmitted.*@paramDirection:SpecifieswhethertheI2CdevicewillbeaTransmitteroraReceiver.*Thisparametercanbeanyofthe@refI2C_Direction_TypeDefenumeration.*@retvalNone*/voidI2C_Send7bitAddress(uint8_tAddress,I2C_Direction_TypeDefDirection){/*Checkfunctionparameters*/assert_param(IS_I2C_ADDRESS_OK(Address));assert_param(IS_I2C_DIRECTION_OK(Direction));/*Clearbit0(direction)justincase*/Address&=(uint8_t)0xFE;/*SendtheAddress+Direction*/I2C->DR=(uint8_t)(Address|(uint8_t)Direction);}
y
/***@briefI2Ctransferdirection*Warning:thevaluescorrespondtotheADD0bitpositionintheOARLregister*/typedefenum{I2C_DIRECTION_TX=(uint8_t)0x00,/*!<Transmissiondirection*/I2C_DIRECTION_RX=(uint8_t)0x01/*!<Receptiondirection*/}I2C_Direction_TypeDef;
/**************************NOW*******************************************/CambiémicódigomaestroI2Cstm8s:
I2C_GenerateSTART(ENABLE);I2C_Send7bitAddress(0x30,I2C_DIRECTION_TX);I2C_SendData(0x60);//Ihavenoidea,itrieditandworksforwrite/readselectionI2C_SendData(0x61);//mysenddataI2C_GenerateSTOP(ENABLE);delay_delay(1500);
Ladirecciónesde30W,ahora.Esciertoporquequieroescribiralesclavo.Entonces,viestaseñaldelossiloscopio:
Esta señal es la misma que la del transmisor maestro Arduino.
Pero, no puedo ver la señal de los datos. ¿Cuál podría ser la razón de ésto? ¿Falta ACK u otra cosa? No lo sé, pero la señal de datos no es de la señal de arduino. ¿Falta ACK?
¡Gracias!