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

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

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #15 en: 18 de Abril de 2012, 06:59:14 »
Lamentablemente, no funcionó.

Configure el puerto C como salida, pero no logré comunicar.

Verifique que en el proyecto que me funciona con el PIC16F876A, tengo el puerto C como salida y comunica correctamente.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #16 en: 18 de Abril de 2012, 08:56:55 »
  Otra opción que encuentro es ver como es el código que genera en asm. Entre los 16F87xA y los 18F2550/4550 hay una forma distinta de configurar los conversores AD y como dichos pines también pueden ser utilizados como entradas analógicas, tal vez exista algún conflicto en como los está configurando.

  ¿Con qué estás haciendo las pruebas, directamente con otro pic conectado como slave? Podrías probar comunicarte con alguna memoria para ver si el master funciona bien y luego ir sumando dispositivos.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #17 en: 18 de Abril de 2012, 12:13:04 »
hola, porque no pegas algo del código (al menos la configuración y como lo ejecutas después). Por ver si sacamos algo en claro.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #18 en: 19 de Abril de 2012, 20:31:00 »
Hola! Ayer y hoy estuve haciendo un curso de PLC, no me pude poner con el PIC.

Tengo dos placas, una con un PIC 16f876A y la otra con el PIC18F4550. Estoy comunicando cada una de las placas con una placa controladora de motores, el modelo es la MD25, que viene con dos motorcitos de corriente contínua. El código que uso para el 18F es el que sigue:

Código: [Seleccionar]
#include <18F4550.h>
#Device ADC=10
#fuses HSPLL,NOMCLR,NOWDT,PROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=56000,xmit=pin_c6,rcv=pin_c7)//configuracion del puerto rs232 envia por pin_c6 y recibe por pin_c7
#use i2c (master,scl=PIN_B1,sda=PIN_B0,slow,force_hw)   //habilitación y configuración de las funciones I2C por hardware



// Librerías usadas
#include <STDLIB.H>
#include <MATH.H>
#include <STDIO.H>

//Declaración de las librerías para uso de controladora MD25
int I2C_Buffer [16]; //buffer de recepción de un dispositivo I2C
#include <I2C_16-18FXXX.H> //Incluye rutinas I2C básicas de propósito general
#include <MD23_16-18FXXX.H> //Incluye rutinas de control del driver MD25



//Con estas instrucciones evitamos que se este configurando cada vez que usamos alguna instruccion de entrada o salida
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)




void main()
{

//Configuración de puertos como entrada y salida
SET_TRIS_A(0xFF); // se configura el puerto A como entrada
SET_TRIS_B(0x00);     // se configura el puerto B como salida
SET_TRIS_C(0x00);     // activa las resistencias de pull-up

//Configuración del conversor AD
SETUP_ADC(ADC_CLOCK_DIV_64); // configuras esto para que el a/d funcione con un reloj interno del micro
SETUP_ADC_PORTS(ALL_ANALOG||VSS_VDD);     // aca determinar que el puerto RA0, RA1 será analógico

//Configuración de la interrupción RTCC
SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_1); //TIMER0: Clock Interno, Preescaler 1
ENABLE_INTERRUPTS(INT_RTCC);               // Habilito Interrupción RTCC
ENABLE_INTERRUPTS(GLOBAL);                 // Habilito Interrupciones

//MD23_Modo(2);

//Definición de variables locales del main
float  Bateria=0.0;

while(true)
{


//Leo el voltage de alimentación de la placa
         Bateria=MD23_Bat()/10.0;         //Esta funcion esta incluida en la libreria de la placa

//Envío valores  al PC
printf(" %f ",Bateria);//imprimo datos por puerto serie

     
}
}

El mismo código con algunas modificaciones como la líbrería del PIC, funciona correctamente para el PIC16F876A.

La única diferencia que encuentro es que estoy trabajando con un bootloader serie diferente para cada PIC. El bootloader del 18F, escribe los Fuses, lo cual no se si afecta.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #19 en: 19 de Abril de 2012, 22:59:00 »
  En el 18F estás configurando todas las posibles entradas analógicas, justamente como analógicas. Eso implica que si los pines B0 y/o B1 son configurados como entrada, serán analógicas por lo tanto cuando se las intente leer como digitales siempre leerán 0.

  Según el datasheet del 18F4550, para que funcione el módulo I2C por HardWare, los pines B0 y B1 deben ser configurados como entrada, además de activar dicho módulo.

  Si el código generado por la sentencia "USE I2C" de CCS coloca los pines B0 y B1 como entrada, posiblemente se genere algún conflicto ya que dichos pines también están configurados como entradas analógicas.

  Habría que ver en el manual de CCS la forma de que dichos pines no sean entradas analógicas.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado saveuc_siul

  • PIC10
  • *
  • Mensajes: 12
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #20 en: 20 de Abril de 2012, 00:53:05 »
gracias a todos por su ayuda y lo que encontre fue que únicamente se puede hacer i2c por software en el Master porque el si puede simular los pines necesarios, sin embargo en los esclavos (PIC18F2550) no es posible porque el esclavo hace uso de las interrupciones para funcionar. GRACIAS

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #21 en: 20 de Abril de 2012, 04:45:33 »
Hola, creo que el compilador se salta el sentido de las gpio cuando usas el modulo i2c.
Lo que yo nunca he usado en la configuración es el force_hw ni el slow, no creo que te afecten negativamente, pero si los quitas por probar a ver que pasa?.

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #22 en: 20 de Abril de 2012, 09:17:49 »
Hola!

AngelGris! Voy a estudiar el tema de la configuración de los puertos analógicos! Espero que sea ese mi problema!

NoSepcomo, a que te referís con gpio? Lo de sacar el force_hw y el slow ya lo intenté, pero tampoco funciono.

Saludos!

Desconectado nZeta

  • PIC16
  • ***
  • Mensajes: 130
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #23 en: 20 de Abril de 2012, 10:10:00 »
gracias a todos por su ayuda y lo que encontre fue que únicamente se puede hacer i2c por software en el Master porque el si puede simular los pines necesarios, sin embargo en los esclavos (PIC18F2550) no es posible porque el esclavo hace uso de las interrupciones para funcionar. GRACIAS
¿Porque tiene que ser PIC18F2550? en tu descripción no aparece nada que haga referencia a que los slave o masters necesiten USB y esa es la principal caracteristica de los 18F2550. Recuerda que tienes que escojer el mejor MCU que se acomode a tu aplicación y no tratar de acomodar tu aplicación a un MCU.

Por el costo de un 18f2550 yo compraría un PSOC3 de gama baja y puedo sintetizar I2C esclavo en hardware en cualquier pin y ademàs tengo interrupcion en todos los pines

Desconectado saveuc_siul

  • PIC10
  • *
  • Mensajes: 12
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #24 en: 21 de Abril de 2012, 00:05:32 »
Hola hola, si se me olvido comentar que necesito los puertos usb 2.0 porque están funcionando igual como daq para un robot, gracias a todos ya pude terminar el proyecto en buena forma....

gracias a todos por su ayuda y lo que encontre fue que únicamente se puede hacer i2c por software en el Master porque el si puede simular los pines necesarios, sin embargo en los esclavos (PIC18F2550) no es posible porque el esclavo hace uso de las interrupciones para funcionar. GRACIAS
¿Porque tiene que ser PIC18F2550? en tu descripción no aparece nada que haga referencia a que los slave o masters necesiten USB y esa es la principal caracteristica de los 18F2550. Recuerda que tienes que escojer el mejor MCU que se acomode a tu aplicación y no tratar de acomodar tu aplicación a un MCU.

Por el costo de un 18f2550 yo compraría un PSOC3 de gama baja y puedo sintetizar I2C esclavo en hardware en cualquier pin y ademàs tengo interrupcion en todos los pines

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #25 en: 21 de Abril de 2012, 21:21:31 »
FUNCIONO!!!

Gracias a la ayuda de ustedes y a Dios funciona la comunicación I2C entre mi PIC18F4550 y la placa controladora de motores!

Efectivamente, como lo mencionó el querido AngelGris, tuve que configurar sólo los canales que uso como analógicos, y que usa el protoloco I2C como digitales. Además, como dijo NoSepComo, tuve que quitar el Slow y el force_hw. Gracias a eso, ya estoy comunicando!

Muchas gracias chicos!!! Saludos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #26 en: 21 de Abril de 2012, 22:25:10 »
  Me alegro que haya funcionado  :-/ :-/ :-/
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #27 en: 24 de Abril de 2012, 06:21:33 »
Yo también me alegro :). Por terminar, con lo de GPIO me referia a "General Purpose Input Output", que son todas las entradas/salidas digitales que tiene el PIC.
Un saludo.

Desconectado risslock

  • PIC10
  • *
  • Mensajes: 1
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #28 en: 19 de Mayo de 2012, 13:28:26 »
Hola me alegro que te haya funcionado!

Yo también estoy trabajando una comunicación I2C con el microcontrolador 18f4550 pero entre él y un conversor analógico digital, pero no he logrado establecer la comunicación... podrías poner por favor la configuración que te funcionó???

Saludos!

Desconectado marito

  • PIC16
  • ***
  • Mensajes: 217
Re: Cómo hacer comunicación I2C con PIC18f4550/2550???
« Respuesta #29 en: 20 de Mayo de 2012, 18:08:53 »
Hola risslock!

La configuración del I2C es la que sigue:

Código: [Seleccionar]
#use i2c (master,scl=PIN_B1,sda=PIN_B0)
Además hay que tener en cuenta de configurar los puertos B0 y B1 como salidas digitales. Uno de los errores que yo tenía es el de haber configurado todos los puertos como analógicos.