Go Down

Topic: (Solucionado) Problemas enviando datos i2c si hay Display por medio  (Read 1 time) previous topic - next topic

tauro0221

Hi,

Estoy viendo que en el sketch del due tu cambias el  address al wire.begin(4) y no lo cambias para  Wire.begin() cuando envias la informacion al display. I2C usa el wire para comunicarse. Anadele  Wire.begin() antes de ejecutar el  display.begin(SSD1306_SWITCHCAPVCC, 0x3C) a ver que pasa.

mojisi

He añadido Wire.begin() delante de display.begin(SSD1306_SWITCHCAPVCC, 0x3C) pero no hace nada. Sigue igual.

He visto que la librería ya hace un Wire.begin() asi:

Code: [Select]

/
/ I2C Init
    Wire.begin();
#ifdef __SAM3X8E__
    // Force 400 KHz I2C, rawr! (Uses pins 20, 21 for SDA, SCL)
    TWI1->TWI_CWGR = 0;
    TWI1->TWI_CWGR = ((VARIANT_MCK / (2 * 400000)) - 4) * 0x101;
#endif




Alguna idea más. Lo raro es que el mismo código funcione en arduino UNO y no el arduino DUE.

No veo a esto solución.

tauro0221

Hi,
 
Estuve haciendo un estudio y encontre en el Arduino referece dice  que el DUE usa los pines 20 y 21 para la comunicacion de wire  con los device. Esto lo colabora en la libreria   "// Force 400 KHz I2C, rawr! (Uses pins 20, 21 for SDA, SCL) "  Creo entonces que cuando haces wire.begin() estas forzado a usar pines 20 y 21.  Tienes que connectar los device para que usen pines 20 y 21. Como tu tienes los device connectados?
Otra cosa caundo corristes el scannerI2C  "aparecen las dos dirección 1-la de la pantalla 0x03 y 2-la de arduino DUE." Mi pregunta es no debe ser 0X3C para el display? Porque el address es de 0x03?


mojisi

Desde el principio utilizo los pines 20 y 21 en Arduino DUE.

El scannerI2C sólo aparece la dirección 0x3C, la del display.

Si comento el código correspondiente al display me aparece la dirección del arduino DUE.

tauro0221


tauro0221

Hi,
Que pasa si corres el scannerI2c en el YUN con los tres conectados.?

tauro0221

Hi,
Has una cosa asignale a yun = wire.begin(3) DUE = wire.begin(4). Ya el display tiene el address de 0x3C. Corre el scannerI2C para ver que address recibes.

mojisi

Gracias por responder pero eso ya lo he hecho.

Puedes mirar que lo he ido poniendo en este hilo, con un código más reducido, pero sólo aparece la dirección del display 0x3C.


tauro0221

Hi,
Aqui yo creo que el problema esta cuando haces el wire.begin(4) esto asignara lo ports 20 and 21 al I2C y si haces Wire.begin() asignaras los port A4 y A5. No se si esto aplica al DUE pero vas a perder uno de los dos.

Si en el sketch tienes lo siguiente:
Wire.begin(4);  //Este asignara los port 20&21 a la I2C. Esto es si usas el DUE
Wire.begin();    //Este asignara los port A4&A5 a la I2C  como es el ultimo comando  los port seran asignados A4&A5

 Pregunta es necesario usar ese display? Pues si usa rs232 entonces podrias usar los TX y RX del arduino directamente. Yo lo hago asi en algunos de mi projectos para elimanar problemas.

mojisi

He conseguido que funcione.

Después de hacer algunas pruebas, he visto que el display siempre inicializa con Wire.begin() desde la librería y esto desconecta la inicialización que hacía el arduino DUE con Wire.begin(4).

Por tanto lo que me ha funcionado para poder tirar para adelante es realizar primero la inicialización del display con
display.begin(SSD1306_SWITCHCAPVCC, 0x3C) y lo último que pongo antes de terminar Setup  una inicialización de la dirección del arduino DUE y sus métodos Wire así:

Code: [Select]

Wire.begin(4);
  Wire.onReceive(receiveEvent); // register event
  Wire.onRequest(requestEvent);


Y para que no se quede colgado y me permita seguir recibiendo carácteres a través de I2C, he tenido que volver a inicializar la dirección de arduino DUE, después de cada utilización de las funciones del display, así:

Code: [Select]

Wire.begin(4);


para poder seguir recibiendo datos y a la vez utilizar el display oled ssd1306 (32).


tauro0221

Hi,
Me alegro que hallas solucionado el problema. Fue un poco dificil de solucionar pues estabas siguendo los pasos de acuerdo al las instruciones corespondientes. Yo encontre muchas personas con este problema y algunos lo resolvieron removiendo el Wire.H de las libreria pero creo que es una mala practica. Se debe de arreglar que sirva para uso normal sin tener que cambiar las librerias de acuerdo a la aplicacion.que se van a usar.

Go Up