Autor Tema: Problema con I2C en XC8  (Leído 3077 veces)

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

Desconectado calavia

  • PIC10
  • *
  • Mensajes: 14
Problema con I2C en XC8
« en: 11 de Abril de 2014, 08:22:21 »
Hola a todos! Vereis, estoy utilizando un sensor de temperatura DS1624 e intentar que un PIC18F4550 lea los datos de temperatura que recibe.

El código que estoy utilizando es el siguiente:

#include <xc.h>
#include <pic18f4550.h>
#include <plib/delays.h>
#include <plib/timers.h>
#include <plib/i2c.h>
#include <stdio.h>
#include <stdlib.h>
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <float.h>


////////////
///DEFINE //
////////////
#define SDA PORTBbits.RB0
#define SCL PORTBbits.RB1
#define DIR_ESC 0b10010000
#define DIR_LEC 0b10010001
#define LED1 PORTDbits.RD2
#define LED2 PORTDbits.RD3



void temperature_config()
{
   
   StartI2C();
   IdleI2C();
   WriteI2C(0x90);
   IdleI2C();
   WriteI2C(0xac);
   IdleI2C();
   WriteI2C(0x01);
   IdleI2C();
   StopI2C();
}


void inicio_temp()
{

   temperature_config();

   IdleI2C();
   StartI2C();
   WriteI2C(0x90);
   IdleI2C();
   WriteI2C(0xee);
   IdleI2C();
   StopI2C();
}


int leer_temp()        ////// Returns in farenheit
{
   int datah,datal;
   float dval,fval;
   StartI2C();
   IdleI2C();
   WriteI2C(0x90); //Escritura
   IdleI2C();
   WriteI2C(0xaa);
   IdleI2C();

   StartI2C();
   IdleI2C();
   WriteI2C(0x91); //Lectura
   IdleI2C();
   datah=ReadI2C();
   AckI2C();
   datal=ReadI2C();
   NotAckI2C();
   StopI2C();
   //dval=datah+.03125*shift_right(&datal,1,0);
   dval=datah+datal/256.0;//temperatura en grados
   //fval=(dval*1.8)+32;//Para grados Farenheit
   return(dval);
}

/*
 *
 */
void main()
{
    LED1 = 0;

    //////////////////////
    //CONFIGURACION BIT //
    //////////////////////
   
    TRISBbits.RB0 = 1; //SDA
    TRISBbits.RB1 = 0; //SCL

    TRISDbits.RD2 = 0; //LED1
    TRISDbits.RD3 = 0; //LED2


    ////////////////////
    //INI SENSOR TEMP //
    ////////////////////

    OpenI2C (MASTER, SLEW_OFF); //Slew rate disabled for 100 kHz mode
    SSPADD = 19; //SSPADD = ((Fosc/BitRate)/4)-1 para master

    LED1 = 1;
    inicio_temp();
    temperatura = leer_temp();
    LED2 = 1;

    while(1)
    {
    }

}

Los LEDs los utilizo para ver por donde va el código.

El problema es que cuando lo ejecuto se queda parado en " while ( !SSPSTATbits.BF );" al realizar la función de lectura del bus

A ver si entre todos podemos conseguir que funcione.

Gracias!

Desconectado calavia

  • PIC10
  • *
  • Mensajes: 14
Re: Problema con I2C en XC8
« Respuesta #1 en: 11 de Abril de 2014, 14:47:42 »
Nadie me puede ayudar? Esq lo necesito.

Gracias

Desconectado calavia

  • PIC10
  • *
  • Mensajes: 14
Re: Problema con I2C en XC8
« Respuesta #2 en: 15 de Abril de 2014, 18:25:20 »
[NO SOLUCIONADO] Al final he podido solucionarlo en Proteus, aunque en la realizad no va... no se si es xq está quemado el sensor o algo... pero ya va bien la cosa!!! :)
« Última modificación: 23 de Abril de 2014, 11:00:16 por calavia »

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Problema con I2C en XC8
« Respuesta #3 en: 18 de Abril de 2014, 18:04:38 »
Al fin que era , problema del simulador o el codigo estaba malo?.
if you can imagine it, you can embed it

Desconectado calavia

  • PIC10
  • *
  • Mensajes: 14
Re: Problema con I2C en XC8
« Respuesta #4 en: 23 de Abril de 2014, 04:55:39 »
Al fin que era , problema del simulador o el codigo estaba malo?.

Pues si te digo la verdad ahora no lo se... creia que era problema del sensor de temperatura, pero realicé un código similar en CCS y funcionó a la perfección.
Así que otra vez sigo con mis dudas...


 

anything