Autor Tema: Cómo hacer comunicación I2C con PIC18f4550/2550???  (Leído 15891 veces)

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

Desconectado saveuc_siul

  • PIC10
  • *
  • Mensajes: 12
Cómo hacer comunicación I2C con PIC18f4550/2550???
« en: 23 de Enero de 2012, 18:52:35 »
Buenas tardes,

Hola les escribo para ver si alguien me puede ayudar, lo que pasa es que tengo que hacer una red de micros con el PIC18f4550 como maestro y cuatro PIC18f2550 como esclavos, el problema que tengo es que según lo que entiendo para lograr la comunicación debo utilizar las RB0 y RB1 que es donde se encuentran el SDA y SCL de este modelo de micros y bueno en la aplicación donde requiero la red necesito hacer uso de las tres interrupciones de la parte baja del puerto B del PIC y de la interrupción por cambio de estado en la parte alta del mismo puerto, entonces no se que hacer porque la comunicación I2C necesita a los dos primeros pines del puerto B, ¿hay alguna otra forma de lograr la comunicación I2C????

Les explico un poco la función de la red. Les esclavos tienen que leer un encoder cada uno, debido a que el sensor tiene 3 señales de modulación se hace uso de todas las interrupciones del puerto B para poder identificar flancos de subida y de bajada y tener una mejor resolución, posteriormente la información de los esclavos será enviado al PIC maestro para que este se comunique con una PC que procesará la información.

REALMENTE ESPERO QUE ALGUIEN ME PUEDA AYUDAR, ME URGE SACAR ESTE PEQUEÑO PROYECTO ADELANTE.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #1 en: 24 de Enero de 2012, 05:42:13 »
Hola, no se en que compilador trabajas, pero en CCS creo que en las opciones de ensamblado puedes elegir los pines de SDA y SCL y el código del compilador automáticamente te modifica el firmware para usar una u otra.
Le puedes especificar por ejemplo que en vez de usar RB0 y RB1 te use RC4 y RC5 (que son las habituales en pics de 40 patas para el I2C).
Yo la verdad que siempre usé las de por defecto, pero se pueden seleccionar otras seguro. En otros compiladores no se si estará la opción directamente o tendrás que modificar a lo mejor los ficheros header para poder usar otras o incluso implementar tu el protocolo "a pelo" en el firmware.
Si usas CCS #use I2C(master,sda=PIN_C4,scl=PIN_C3,...)

Desconectado saveuc_siul

  • PIC10
  • *
  • Mensajes: 12
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #2 en: 01 de Marzo de 2012, 20:29:28 »
Hola, no se en que compilador trabajas, pero en CCS creo que en las opciones de ensamblado puedes elegir los pines de SDA y SCL y el código del compilador automáticamente te modifica el firmware para usar una u otra.
Le puedes especificar por ejemplo que en vez de usar RB0 y RB1 te use RC4 y RC5 (que son las habituales en pics de 40 patas para el I2C).
Yo la verdad que siempre usé las de por defecto, pero se pueden seleccionar otras seguro. En otros compiladores no se si estará la opción directamente o tendrás que modificar a lo mejor los ficheros header para poder usar otras o incluso implementar tu el protocolo "a pelo" en el firmware.
Si usas CCS #use I2C(master,sda=PIN_C4,scl=PIN_C3,...)

Hola, hice lo que me digiste y no me funciona, no me hace el cambio :S

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #3 en: 16 de Abril de 2012, 18:56:23 »
Hola! alguien logró hacer funcionar la comunicación I2C con un PIc18F4550?

Estoy trabajando en la comunicación entre una placa controladora de motores y el PIC que mencionaba. Hasta el momento no me funcionó. Hay algún límite de velocidad?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #4 en: 16 de Abril de 2012, 20:23:59 »
creo que son 400kbps

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #5 en: 17 de Abril de 2012, 05:09:39 »
Si 400kbps es el limite.
Pues de todas formas, yo nunca he tenido problemas, salvo quizá en la manera de comunicarte, si quieres cuelga el código y a lo mejor sacamos algo más en claro.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #6 en: 17 de Abril de 2012, 08:37:21 »
Estoy trabajando con un 18F4550, con un clock de 48MHz y mi ciclo de programa, dentro del cual tengo la sentencia de comunicación, tiene una duración de 5mseg. Estoy excedido del límite? Como se calcula la frecuencia de 400kbps?

Desconectado nZeta

  • PIC16
  • ***
  • Mensajes: 130
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #7 en: 17 de Abril de 2012, 09:05:42 »
Estoy trabajando con un 18F4550, con un clock de 48MHz y mi ciclo de programa, dentro del cual tengo la sentencia de comunicación, tiene una duración de 5mseg. Estoy excedido del límite? Como se calcula la frecuencia de 400kbps?
es el estandar I2C FAST MODE (http://www.i2c-bus.org/fastmode/) Si tu micro soporta I2C por hardware no debes tener problema haciendo la comunicaciona a 400kbps. Fijate la capacitancia del bus, si es muy grande tendrás que reducir la frecuencia del bus y/o reducir el valor de las resistencias Pull Up.
Tambien hay HIGH SPEED MODE de hasta 4Mbps pero muy pocos lo soportan.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #8 en: 17 de Abril de 2012, 09:13:02 »
Gracias nZeta, una pregunta básica, como se calcula la velocidad de comunicación? Es decir, determinar si trabajo a 100, 400 ó 4000kbps?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #9 en: 17 de Abril de 2012, 09:42:42 »
Gracias nZeta, una pregunta básica, como se calcula la velocidad de comunicación? Es decir, determinar si trabajo a 100, 400 ó 4000kbps?

  Eso debería estar explicado en el datasheet del PIC a utilizar..

  Hay que configurar los bits SSPM3...SSPM0 del registro SSPCON1. Según el datasheet que tengo yo, está en la página 204. Luego, en la página 223 hay unos ejemplos de valores de frecuencia del bus I2C
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #10 en: 17 de Abril de 2012, 09:52:26 »
Buenísimo AngelGris!

Entonces, si mal no entiendo, la velocidad de transmisión es independiente de mi tiempo de ciclo de programa y del clock?

Cuando yo configuro por programa:

Código: [Seleccionar]
USE I2C(master, SDA=PIN_B0, SCL=PIN_B1, Slow)
Con el slow ya determino la velocidad de mi transmisión... Es correcto?

PD: Estoy trabajando con lenguaje C

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #11 en: 17 de Abril de 2012, 12:53:40 »
Buenísimo AngelGris!

Entonces, si mal no entiendo, la velocidad de transmisión es independiente de mi tiempo de ciclo de programa y del clock?

Cuando yo configuro por programa:

Código: [Seleccionar]
USE I2C(master, SDA=PIN_B0, SCL=PIN_B1, Slow)
Con el slow ya determino la velocidad de mi transmisión... Es correcto?

PD: Estoy trabajando con lenguaje C

  No es independiente. Fijate que según la velocidad de clock que tengas hay que utilizar distintos valores para los bits SSPM3...SSPM0.

  Veo que estás utilizando el compilador CCS, se supone que dicha sentencia USE ya configura automáticamente los registros que intervienen en el manejo de I2C. Consultá con el manual del compilador para ver si no hay una opción para asegurarse que utilice el módulo de HardWare que posee el PIC y no que lo intente implementar por SoftWare.

  Yo no uso dicho compilador y por ello no puedo darte una mejor respuesta.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #12 en: 17 de Abril de 2012, 13:11:24 »
Usando un PIC16F876A, con un clock de 20MHz, funciona con la siguiente configuración:

Código: [Seleccionar]
USE I2C(master, SDA=pin_c4,SCL=pin_c3, slow)
Ahora con el PIC18F4550, con la configuración que mencione anteriormente (la copio de nuevo), no funciona

Código: [Seleccionar]
USE I2C(master, SDA=pin_b0,SCL=pin_b1)
Lo intente con y sin la opción SLOW.

Con ambos PICs uso resistencias de pull-up de 2k2.

AngelGris, leyendo un poco sobre lo que mencionabas de trabajar vía hardware, use la opción noforce_sw, pero tampoco funciona...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #13 en: 17 de Abril de 2012, 13:52:38 »
  Si estuvieses programando en assembler, hay que asegurarse de configurar dichos pines como entrada (configurando el registro TRIS adecuado y de la manera adecuada), y a su vez hay que tener en cuenta que dichos pines por defecto son entradas analógicas con lo cual puede traer conflictos.

  Asegurate de configurar dichos pines como digitales (otra vez, para ello tendrás que consultar la ayuda del compilador) antes de usar la sentencia USE para el uso del I2C.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #14 en: 17 de Abril de 2012, 14:03:02 »
Muy buen dato AngelGris, en un rato lo pruebo y te comento los resultados! Espero que con eso funcione!