Expansor I2C PIC - PIC PIC16F877A como esclavo y PIC18F2550 como maestro.

Hola a todos.

Acá les traigo un mini aporte donde se muestra como se utiliza un PIC en i2c como esclavo. Para esto hemos creado 2 programas 1 para el microcontrolador como esclavo y otro programa para el microcontrolador que actua como master.

Ambos programas están comentados y la aplicación propuesta es sencilla para que todos los puedan entender.

También pongo el diagrama de conexionado para que prueben la aplicación (Yo lo he probado y funciona perfecto).

Todos los comentarios y criticas constructivas serán bienvenidas.

PD: Este proyecto es parte de una controladora de 3 o más motores PAP controlado por USB.

1 Saludo ! :cool:
 

Adjuntos

  • i2c_master_slave_180.rar
    46.9 KB · Visitas: 2,314
gracias hermano por este pequeno aporte, ya habia leido sobre comunicacion ic2, lo voy a checar yo apenas estoy empezando con esto, ya habia empezado pero no logre comunicar mis micros, cheque rapido tu esquema, y pense que las resistencias pullup no hiban haa espero que eso haya sido mi error, Gracias
 
oye Jhonatan, me interesa aprender a utilizar bien el protocolo I2c para pic, en especial para el 16f877A, pero es que yo trabajo bien assembler y algo de basic, c no es de mi total agrado.. mi pergunta es en assembler es muy complejo??
 
saludos yo de nuevo pasando a molestar, ya he hecho la comunicacion, gracias a tu ejemplo y buen aporte, tengo un duda..., para esto el esclavo tiene un direccion predifinida por software, y lo datos son recividos cuando hay una senal de cloclk por parte del maestro, creo que asi funciona este modelo, mi duda en especifico es como puedo enviar un dato de esclavo a maestro, se le asigna un direccion ?? si has hecho esta comunicacion ojala me puedas ayudar...


Gracias otra vez, saludos
 
La verdad no he probado la bidireccionalidad en este tipo de comunicación, pero me parece que le tenés que asignar una dirección al master para poder enviar datos.
Que alguien me corriga si me equivoco.
 
una pregunta jonathan, estoy usanso dos micros 18f4550, me funciona tu codigo con el maestro y un cristal de 4 mhz, y el esclavo con uno de 20 mhz, pero la cuestion es si lo puedo hacer en forma inversa??
me explico, el sistema que tienes en tu codigo soslo le doy algunos cambios y me funciona con los dos micros, pero el esclovo debe de trabajar forsozamente a 4 mhz ya que le pongo un lcd grafico y a 20 mhz el lcd no funciona muy bien, entonces el cristal del esclavo siempre debe ser de 4mz, el del maestro lo puedo cambiar a culaquier frecuencia.
pero no me funciona con un esclavo a 4mhz y un maestro a 20 o 4mz.
cual sera el error?
o le tengo que cambiar alguna libreria??
en el maestro tienes
#use i2c(Master,Fast=400000,sda=PIN_B0,scl=PIN_B1,force_hw) // Utilizamos hardware I2C a 400Khz.Fast=400000

si la tengo que reducir.
el fuse de XT ya esta en HS y al contrariO

o algun otro detalle por lo que no se pueda dar esta funcion
saludos!!!
 
Tengo una pequeña pregunta acerca de como ampliar la longitud de separacion que debe haber entre los microcontroladores(los 2 cables que haran la cominicacion), en protocolo i2c, tengo el dato de que es de maximo 1 metro...

Ahora supongo que tendra que existir algun chip como el MAX 232 que ayuda en la cominicacion serial.

¿Alguno de ustedes sabe que chip o que método me puede ayudar a ampliar la distancia entre los microcontroladores usando el protocolo i2c?
 
Última edición:
Hola, simule tu(s) programas en proteus y no me anda, no llegan datos al esclavo y el master manda cualquier cosa(lo veo con la herramienta i2c debugger). Adjunto el archivo para que lo revisen.
Saludos.
 

Adjuntos

  • simulacion vegetal digital.rar
    19.7 KB · Visitas: 419
Disculpen ya voy a seguir con este tema pero por ahora no tengo internet ni el tiempo ni el dinero suficiente para hacer investigaciones por el momento....ya para más adelante sigo con esto.
Un saludo y disculpas !
 
No hay problema todos sabemos que a la mayoria de nosotros el tiempo no nos sobra.

Sobre la comunicacion I2C migre el codigo del master (18f2550) a un pic 16f877. Ahora funciona con los dos 16f877 siempre y cuando este enchufado la herramienta i2c debugger. Supongo que el problema era el pic 18f, que no se lleva bien con el isis.
Voy a seguir probando si puedo hacer andar en la simulacion y sino probare en la realidad.
Si alguien los quiere, subo los programas.
saludos
 
No hay problema todos sabemos que a la mayoria de nosotros el tiempo no nos sobra.

Sobre la comunicacion I2C migre el codigo del master (18f2550) a un pic 16f877. Ahora funciona con los dos 16f877 siempre y cuando este enchufado la herramienta i2c debugger. Supongo que el problema era el pic 18f, que no se lleva bien con el isis.
Voy a seguir probando si puedo hacer andar en la simulacion y sino probare en la realidad.
Si alguien los quiere, subo los programas.
saludos

A mi me interesa, y te lo agradeceria mucho.
 
Ahora ya tengo internet nuevamente y maquina nueva tambien asi que el que tenga problemas veremos de como solucionarlos
un saludo !

No se si me podrias explicar que funcion es la q debo esperar, ya que al igual que otro usuario anterior simule en ISIS PROTEUS pero no funciona, ¿fisicamente tu lo desarrollaste? si jala al 100?te agradeceria la información.
 
Si esto todo lo pobré en forma fisica usando de master un PIC16F818 y de esclavos 1 x PIC16F818, 1x PIC16F88 y una memoria 24C256 y funciona de maravilla. Ahora algo por lo que a muchos les falla es que no saben configurar bien el puerto serie sincronico par que trabaje en modo I2C , además hay que tener en cuenta la dirección de los registros según sea el micro y hacer las modificaciones pertinentes al código y fijarse si se están produciendo las interrupciones.
 
Dalu como estás !
Mirá primero nos tendría que decir que compilador estás usando ...yo todos mis desarrollos los he estado haciendo en CCS y con PIC de la línea 16 y 18...nunca he trabajado los DSpic :s
 
Atrás
Arriba