Autor Tema: i2c ayuda por favor  (Leído 1384 veces)

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

Desconectado jmpmscorp

  • PIC10
  • *
  • Mensajes: 12
i2c ayuda por favor
« en: 18 de Junio de 2009, 15:13:22 »
Hola.

De nuevo con el mismo tema. Llevo mas de dos semanas intentanto de hacer funcionar el i2c con un expansor de bus en un PIC18f2455. Lo estoy realizando con C18 y utilizando las librerias todo parezco entenderlo. El problema es a la hora de simularlo. Tras la condicion de inicio, en todas las simulaciones me aparece una codicion de Reinicio, sin q yo la envie. Ya no se si es problema de mi codigo o problema al realizar mal la simulacion. Agradeceria todo tipo de ayuda. Adjunto ambos archivos, tanto el codigo, como la simulacion. Gracias desde ya.

#include <p18F2455.h>
#include <i2c.h>
#include <delays.h>

#pragma config IESO = OFF, FOSC = HSPLL_HS, PLLDIV = 5, CPUDIV = OSC4_PLL6      //configuracion de CONFIG1L
unsigned char fin_mensaje = 0;


void escribir_expansor (unsigned char DevAdd, unsigned char RegAdd, unsigned char valor);


void main (void)
{
   OSCCON=0b01110000;

   TRISA = 0x00;
   TRISB = 0x03;
   TRISC = 0x00;
   
   SSPADD = 39;   //
   OpenI2C (MASTER, SLEW_OFF);
   

   escribir_expansor (0x40,0x0A,0xC0);

   while (!fin_mensaje);

   fin_mensaje = 0;

   escribir_expansor (0x40,0x0A,0xFF);      

   while (!fin_mensaje);
   
   escribir_expansor (0x40,0x14,0XFF);

   fin_mensaje = 0;
      
   while (1);
}
   

void escribir_expansor (unsigned char DevAdd, unsigned char RegAdd, unsigned char valor)
{
   SSPCON2bits.RSEN = 0;
   StartI2C ();
   IdleI2C();
   WriteI2C (DevAdd);
   WriteI2C (RegAdd);
   WriteI2C (valor);
   StopI2C();
   
   fin_mensaje = 1;
}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: i2c ayuda por favor
« Respuesta #1 en: 18 de Junio de 2009, 16:45:49 »
Prueba así:

void escribir_expansor (unsigned char DevAdd, unsigned char RegAdd, unsigned char valor)
{
  IdleI2C();                      // ensure module is idle
  StartI2C();                     // initiate START condition
  while ( SSPCON2bits.SEN );      // wait until start condition is over
  WriteI2C( DevAdd );        
  IdleI2C();                      // ensure module is idle
  WriteI2C( RegAdd );          
  IdleI2C();                      // ensure module is idle
  WriteI2C ( valor );            
  IdleI2C();                      // ensure module is idle
  StopI2C();                      // send STOP condition
  while ( SSPCON2bits.PEN );      // wait until stop condition is over
  
  fin_mensaje = 1;
}
« Última modificación: 21 de Junio de 2009, 01:53:43 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado jmpmscorp

  • PIC10
  • *
  • Mensajes: 12
Re: i2c ayuda por favor
« Respuesta #2 en: 18 de Junio de 2009, 18:11:24 »
Muchas gracias por tu respuesta suky, pero ya lo he probado y sin exito. Todo igual q estaba. Os agrego una captura de pantalla de lo que me sale en el I2CDebugger al ejecutar este codigo.