Autor Tema: esclavos en i2c?  (Leído 2557 veces)

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

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
esclavos en i2c?
« en: 15 de Mayo de 2004, 08:01:00 »
estoy re enredadado con i2c como diablos se direccionan los esclavos, alguien podria mandarme un ejemplito de esclavo y maestro por favor es para un programa re largo cuando lo termine los subo gracias



COLOMBIA!!!!!!!!!!!

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: esclavos en i2c?
« Respuesta #1 en: 15 de Mayo de 2004, 09:59:00 »
Hola.

Yo te puedo comentar mi escasa experiencia (yo tambien empiezo con este protocolo), la direccion de esclavo de los dispositivos, viene en el datasheet de éstos, yo estoy trabajando con un PCF8583 (reloj) y las direcciones me las marca el datasheet:

Escribir A0 ó A2
Leer A1 ó A3

Segun tenga puesto el pin de dirección de entrada que en este dispositivo es el pin nº3, si este pin esta a masa, la direccción de escribir será A0 y la de leer A1 y si está a Vcc la de escribir será A2 y leer A3.

Generalmente estas direcciones suelen ser seleccionables mediante hardware, te recomiendo mirar el datasheet de tus dispositvos, que allí indicarán como seleccionarlas.

Para comunicacion entre pics mediante este protocolo, tambien te hago referncia al datasheet de estos, donde dice como trabaja el pic en modo master y esclavo.

Debes de saber bien las especificaciones del bus, hay mucha información en la web, como por ejemplo:

http://cipres.cec.uchile.cl/%7Eel54d/trabajos_exposiciones/I2C.html#1

Es un buen documento por donde empezar.

Incluso puedes visitar el foro de i2c oficial, de la web de los creadores de este protocolo (Philips), y de esta misma web tambien se puede bajar todas las especificaciones de este protocolo de comunicaciones (una lectura apasionante, jeje).

Como ves, por documentación no será...

En cuanto al ejemplo, buscando por internet también salen muchísimos ejemplos, uno muy sencillito utilizando un PCF8574:

Codigo:

/*-------------------------------------------*
 |  EJEMPLO 3.11                             |
 |  Autor: Pedro Mª Jiménez                  |
 |  (c) Microsystems Engineering (Bilbao)    |
*-------------------------------------------*/

// Ejemplo para MicroPIC Trainer y Trainer PLUS

// Interface I2C gestionado por software.

// Haciendo uso de las rutinas incluidas las librerias del compilador C, se trata
// de controlar el funcionamiento de los distintos dispositivos I2C, existentes
// en la tarjeta Trainer PLUS. Estos dispositivos están conectados entre sí al bus
// I2C común. Se recomienda leer las especificaciones técnicas de los mismos, para
// tener un mayor conocimiento de sus posibilidades. Igualmente es importane
// desconectar los leds de la MicroPIC Trainer mediante el jumper J7 pues de lo
// contrario actuarían como carga adicional en las líneas RB6 y RB7 que, es estos
// ejemplos, forman el bus I2C.

// El dispositivo I2C PCF8574. Puerto de E/S de 8 bits.

// Los leds de la Trainer PLUS que pilotan el estado de las líneas de E/S del
// PCF8574 están complementados. Es decir, se activan cuando la línea
// correspondiente está a "0".

// El ejemplo que se presenta a continuación lee el estado de los interruptores
// RA0-RA4 de la MicroPIC Trainer y lo saca por la puerta de salida del
// dispositivo PCF8574.



#include <16f84.h>

#use delay(clock=4000000,RESTART_WDT)
#use I2C(MASTER,SDA=PIN_B6,SCL=PIN_B7,SLOW,RESTART_WDT)
//
// Opciones:
//  - MASTER:    El PIC se configura como master. La otra opción es SLAVE, y en
//      este caso hay que usar la opción ADDRESS=n para especificar la
//      dirección del esclavo.
//
//  - SDA:   Pin del microcontrolador al que estará conectada la línea SDA
//      del bus I2C.
//
//  - SCL:   Pin del microcontrolador al que estará conectada la línea SDA
//      del bus I2C.
//
//  - SLOW:   Modo de baja velocidad en el bus I2C. Recomendado cuando se
//      implementa la gestión del bus I2C por software.
//      Nota: Para hacer la gestión por hardware únicamente se requiere
//      usar un PIC que lo incluya e indicar en SDA y SCL los pines a los
//      que se encuentra conectado el bus I2C.
//
//  - RESTART_WDT:
//      Cuando se estan realizando operaciones de lectura sobre el bus
//      I2C se refresca el WDT.
//
//

#byte port_a = 5

main()
{
  int dato;

  while(1)
  {
    restart_wdt();
    i2c_start();      // Condición de inicio en el bus I2C
    i2c_write(0b01110000);   // Dirección (modo escritura) del dispositivo PCF8574
    dato = ~(port_a & 0x1F);
    i2c_write(dato);      // Se envía el dato al PCF8574
    i2c_stop();         // Condición de stop
  }
}



Espero que sea esto a lo que te referias.

Suerte.

Saludos.

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
RE: esclavos en i2c?
« Respuesta #2 en: 15 de Mayo de 2004, 11:14:00 »
y si uno tiene digamos al bus conectados 4 16f877 como se direcciona cada uno????????

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: esclavos en i2c?
« Respuesta #3 en: 15 de Mayo de 2004, 11:50:00 »
Hola..

Pues en PCW, tienes que especificar la direccion de cada esclavo.. el master no necesita direccion... mas o menos seria esto ..

#use i2c(Slave,Slow,sda=PIN_C4,scl=PIN_C3,address=0x02)

Con el master seria

#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)

Ya para pedirle algo a un esclavo, se haria mas o menos de esta forma


       i2c_start();            //Condicion de inicio
       i2c_write(0x02);    //Esta es la direccion del esclavo
       i2c_write(2);          //Envia algun dato a este esclavo
       x = i2c_read();       //Espera a que el esclavo responda
       i2c_stop();             //Condicon de parada

Espero te sirva