Autor Tema: S.O.S(ayuda) con el i2c  (Leído 1237 veces)

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

Desconectado robertdanyel

  • PIC10
  • *
  • Mensajes: 26
S.O.S(ayuda) con el i2c
« en: 21 de Junio de 2010, 14:54:13 »
Hola a todos, les pido su ayuda con esta comunicacion de dos pic. pase el fin de semana con esto y no doy con el problema. aqui les adjunto los codigos:



//////// MAESTRO ///////

Código: [Seleccionar]
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use i2c(MASTER, SDA=PIN_C0, SCL=PIN_C1)
void main(void)
{

      while(TRUE)
      {        i2c_start();      //inicio
               i2c_write(7);  //direccion del esclavo
               delay_ms(3);
               i2c_write(baja);     //enviamos un dato, p.e el entero 6
               delay_ms(3);
               i2c_stop();       //parada
               delay_ms(1000);
        }
}


//////// ESCLAVO   ////////

Código: [Seleccionar]
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use i2c(SLAVE, SDA=PIN_C0, SCL=PIN_C1, address=0xa0)

void ssp();

int address, buffer,state,dato,flag=0;

void main ()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_SSP);

   while (TRUE) {}
}

#INT_SSP
void ssp()
{
 
   flag=1;                       // ESTE FLAG NUNCA SE PONE A 1, ES DECIR, NO HACE LA INTERRUPCION
   state = i2c_isr_state();

   if(state < 0x80)                     //El Master esta enviando un dato
   {
      buffer = i2c_read();
      if(state == 1)                     //Primer byte recibido es la direccion
         address = buffer;
      if(state == 2)                     //Segundo byte recibido es el dato
         dato = buffer;
   }
   if(state == 0x80)                     //Master quiere un dato, pero no quiero enviar nada
   {                                     // por eso lo dejo en blanco
     delay_cycles(1);
   }
}


Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: S.O.S(ayuda) con el i2c
« Respuesta #1 en: 22 de Junio de 2010, 07:40:01 »

 En este post puse un ejemplo de programa de testeo para el 4550 que usa i2c. Échale un vistazo a esa parte por si te sirve.

http://www.todopic.com.ar/foros/index.php?topic=31010.msg258685#msg258685

 Mira también a la frecuencia, usas 10Mhz y creo que el 4550 no la soporta.

 Un saludo