Autor Tema: Problema I2C PIC18F4550 (ReadI2c)  (Leído 1980 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Promo_byte

  • PIC10
  • *
  • Mensajes: 11
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #15 en: 02 de Agosto de 2022, 15:00:37 »
¿Asi está conectado?


Porque necesitás resistencias de pullup de ambos lados del adaptador de nivel.

Hola Eduardo, si claro. Así está conectado, aunque tambien probe con las resistencias de PULL-UP en ambos lados pero no hubo cambios.

Con el conversor de nivel creia que no era necesario ya que al liberar el bus el sensor(este ya incluye pull- up en su pcb), tendria 3,3Vcc, y el conversor adapta la señal que llega al pic a 5V. Pero quizás me este saltando algún punto, pero no lo se

 

* Esquematico pull-up.png
(18.23 kB, 450x228 - visto 187 veces)

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #16 en: 02 de Agosto de 2022, 15:45:20 »
Qué conversor de nivel estas usando?  Hay algunos basados en integrados cpmo el TXS0108E con los que no deberias tener problemas, pero otros están hechos hechos en forma discreta con mosfets y no pondría las manos en el fuego por ellos.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #17 en: 02 de Agosto de 2022, 15:48:25 »
¿Asi está conectado?


Porque necesitás resistencias de pullup de ambos lados del adaptador de nivel.

Hola Eduardo, si claro. Así está conectado, aunque tambien probe con las resistencias de PULL-UP en ambos lados pero no hubo cambios.

Con el conversor de nivel creia que no era necesario ya que al liberar el bus el sensor(este ya incluye pull- up en su pcb), tendria 3,3Vcc, y el conversor adapta la señal que llega al pic a 5V. Pero quizás me este saltando algún punto, pero no lo se

  - Tienes que ingresar para ver archivos adjuntos -

Deberías quitar el conversor y conectarlo directamente con las resistencias de 1 k de pull-up, lo peor que puede pasar es que no funcione. Por seguridad, podrías poner los diodos de protección que te mencioné.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Promo_byte

  • PIC10
  • *
  • Mensajes: 11
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #18 en: 02 de Agosto de 2022, 15:56:00 »
Eduardo, efectivamente es el que usa Mosfet. Algo que me sorprendió es que al no tener conectado ni 5V ni 0V en ninguno de los lados, tenían 3,3V(en Low Voltage) y 5V(High Voltage).

Sinceramente no me puse a analizar el circuito para comprobar que esto sea correcto  :shock:, pero estimo que si, ya que al conectar con 0V de cualquiera de los lados, el que le corresponde también estaba a 0V.

 

* Conversor de nivel.png
(137.64 kB, 350x284 - visto 170 veces)

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #19 en: 02 de Agosto de 2022, 16:26:29 »
Eduardo, efectivamente es el que usa Mosfet. Algo que me sorprendió es que al no tener conectado ni 5V ni 0V en ninguno de los lados, tenían 3,3V(en Low Voltage) y 5V(High Voltage).

Sinceramente no me puse a analizar el circuito para comprobar que esto sea correcto  :shock:, pero estimo que si, ya que al conectar con 0V de cualquiera de los lados, el que le corresponde también estaba a 0V.

  - Tienes que ingresar para ver archivos adjuntos -


Podrías simplemente en una protoboar y con cables poner a 1 y 0 lógico en un lado y medir en el otro lado para determinar si "convierte" a los niveles de voltaje adecuados.

Supón que por ahí algo estaba mal y ya le pusiste 5V al sensor que sólo soporta 3.3V.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Promo_byte

  • PIC10
  • *
  • Mensajes: 11
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #20 en: 02 de Agosto de 2022, 16:42:11 »
Si claro, probe esto y si funciona el conversor sin problemas.

En cuanto al sensor, pensé que quizás pudiera estar dañado  :(, pero si funciona. Lo comprobé con un Arduino Mega.

Solo me queda probar el metodo de diodos como me mencionó DominusDRR. Sino ya no se que mas intentar  :? :?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #21 en: 02 de Agosto de 2022, 16:45:12 »
Si claro, probe esto y si funciona el conversor sin problemas.

En cuanto al sensor, pensé que quizás pudiera estar dañado  :(, pero si funciona. Lo comprobé con un Arduino Mega.

Solo me queda probar el metodo de diodos como me mencionó DominusDRR. Sino ya no se que mas intentar  :? :?

Mencioné de un posible daño por esto que escribiste:

Citar
tenían 3,3V(en Low Voltage)

Low Voltaje pienso que debe ser cero voltios para ambos lados.

Respecto a los diodos de protección es en caso que no uses el conversor y decidas conectar directamente el microcontrolador al sensor.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Promo_byte

  • PIC10
  • *
  • Mensajes: 11
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #22 en: 03 de Agosto de 2022, 10:34:30 »
Hola Amigos, despues de horas y horas de quemarme la cabeza, decidí probar con otro compilador ya que no tenia nada que perder :-). Usé CCS y anduvo a la primera, asique que creo que con XC8 debo tener algun problema con las librerias o puede ser alguno de los Fuses(esto ultimo no creo).

Ahora bien, este sensor me esta dando mas dolores de cabezas pero creo que estoy cerca... :-) Espero que me puedan ayudar

El SENSOR(bmp180) no da el valor de la temperatura sino te da un valor de 16 bits que hay que hacer multiples opereaciones que estan indicadas en el datasheet... aqui el problema, en XC8 pude realizar estas operaciones obteniendo el valor correcto, pero aqui en CCS creo que no maneja de la misma manera los datos.

El código que me está dando problemas es el siguiente:

Código: [Seleccionar]
long long X2_1, X2_2, X2;
long T,MC,MD, B5 ;

long MC= -8711;
long MD = 2868;

    X2_1 =(MC*2048);   // DE ESTA MANERA TENGO PROBLEMAS
 // X2_1 = -8711*2048; // DE ESTA MANERA TENGO EL RESULTADO CORRECTO
   
    X2_2 = (X1 + MD);
    X2= (X2_1 / X2_2);

    B5 = X1+X2;
    T = (B5+8)/16;

Los valores de las variables MC y MD son propias de cada sensor, pero estoy tomando las de ejemplo que figuran en el datasheet(-8711 y 2868 respectivamente), en fin... si declaro como esta en el código, MC como variable y le asigno un valor(como dije arriba, que me indica de ejemplo el datasheet que por cierto es negativo)o leo el dato directamente del sensor(en proteus, que es el mismo que esta en la hoja de datos) y lo guardo en esa variable, luego de hacer los calculos me da erroneo... perooo... si directamente en la linea X2_1 realizo la operación de multiplicación -8711*2048, el valor de la operación final B5 es correcto... 
Para X1, tenia un problema similar, pero estimaba que era el tratamiento de variables y que estaban quedando muy chicas por las operaciones asique las declare como long long.


Código: [Seleccionar]
X1 = ((long long)(UT-AC6) * AC5) / 32768;
Como creen que puedo solucionar esto?

De paso muchas gracias por su ayuda en los comentarios anteriores! ((:-))


 

* Temperatura_BMP180.png
(38.97 kB, 500x179 - visto 207 veces)

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #23 en: 03 de Agosto de 2022, 10:55:12 »
Hola Amigos, despues de horas y horas de quemarme la cabeza, decidí probar con otro compilador ya que no tenia nada que perder :-). Usé CCS y anduvo a la primera, asique que creo que con XC8 debo tener algun problema con las librerias o puede ser alguno de los Fuses(esto ultimo no creo).

¿Pero por qué te funcionaba en el simulador?

¿Podías hacer algo tan básico en el XC8 como prender y apagar un led? Si ni eso funcionaba, debe ser un problema de fuses como indicas, pero eso tal vez era lo primero que debías probar antes de lanzarte hacer algo complejo.

Podrías leer como se generó los fuses con el CCS y comparar con el generado con el XC8

Voy a analizar el resto de lo que preguntas.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Promo_byte

  • PIC10
  • *
  • Mensajes: 11
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #24 en: 03 de Agosto de 2022, 11:20:03 »
Gracias Dominus por tu ayuda :)!!!

La verdad que si probe el XC8, programé varios pic con sensores pero nunca había manejado I2C...asique mi primera experiencia no fue buena :(.  Me parecía raro que funcionara en el simulador y no en en el protoboard, siempre que me simulaba en Proteus me funcionaba en la vida real.


Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #25 en: 03 de Agosto de 2022, 16:04:21 »
Hola Amigos, despues de horas y horas de quemarme la cabeza, decidí probar con otro compilador ya que no tenia nada que perder :-). Usé CCS y anduvo a la primera, asique que creo que con XC8 debo tener algun problema con las librerias o puede ser alguno de los Fuses(esto ultimo no creo).

Ahora bien, este sensor me esta dando mas dolores de cabezas pero creo que estoy cerca... :-) Espero que me puedan ayudar

El SENSOR(bmp180) no da el valor de la temperatura sino te da un valor de 16 bits que hay que hacer multiples opereaciones que estan indicadas en el datasheet... aqui el problema, en XC8 pude realizar estas operaciones obteniendo el valor correcto, pero aqui en CCS creo que no maneja de la misma manera los datos.

El código que me está dando problemas es el siguiente:

Código: [Seleccionar]
long long X2_1, X2_2, X2;
long T,MC,MD, B5 ;

long MC= -8711;
long MD = 2868;

    X2_1 =(MC*2048);   // DE ESTA MANERA TENGO PROBLEMAS
 // X2_1 = -8711*2048; // DE ESTA MANERA TENGO EL RESULTADO CORRECTO
   
    X2_2 = (X1 + MD);
    X2= (X2_1 / X2_2);

    B5 = X1+X2;
    T = (B5+8)/16;

Los valores de las variables MC y MD son propias de cada sensor, pero estoy tomando las de ejemplo que figuran en el datasheet(-8711 y 2868 respectivamente), en fin... si declaro como esta en el código, MC como variable y le asigno un valor(como dije arriba, que me indica de ejemplo el datasheet que por cierto es negativo)o leo el dato directamente del sensor(en proteus, que es el mismo que esta en la hoja de datos) y lo guardo en esa variable, luego de hacer los calculos me da erroneo... perooo... si directamente en la linea X2_1 realizo la operación de multiplicación -8711*2048, el valor de la operación final B5 es correcto... 
Para X1, tenia un problema similar, pero estimaba que era el tratamiento de variables y que estaban quedando muy chicas por las operaciones asique las declare como long long.


Código: [Seleccionar]
X1 = ((long long)(UT-AC6) * AC5) / 32768;
Como creen que puedo solucionar esto?

De paso muchas gracias por su ayuda en los comentarios anteriores! ((:-))


  - Tienes que ingresar para ver archivos adjuntos -

Me parece que long no es parte del compilador de CCS (Imagen adjunta), creo que deberías usar signed int16 o signed int32

Referencia:  https://www.ccsinfo.com/downloads/ccs_c_manual.pdf Página 43.

Sería de conocer la opinión de alguien que conoce mejor a ese compilador

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:Problema I2C PIC18F4550 (ReadI2c)
« Respuesta #26 en: 12 de Septiembre de 2022, 15:03:35 »
Hola, para mi que el problema es de velocidad, en el simulador va bien por que omite esa característica pero en el hadware real eso es importante, si el bus va muy rápido no da tiempo al chip de que se refresque y se bloquea, el compilador XC8 es más eficiente que CCS y si no controlas el tiempo de refresco del chip le pasa eso, en el datasheet de la sonda te viene el tiempo de refresco mínimo ¿lo has mirado?

saludos
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...


 

anything