Autor Tema: Ayuda JM60 con sensor presión BMP180  (Leído 5960 veces)

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

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Ayuda JM60 con sensor presión BMP180
« en: 28 de Marzo de 2015, 10:53:41 »
Buenas Tardes,

Comencé un nuevo proyecto con un jm60 para poder medir la altura aproximada a medida que va ascendiendo un ascensor, los datos se transmitirán por xbee a una pc. El problema es que el BMP180 se comunica con el jm60 a través de I2C y no tengo ni la menor idea de como empezar, ya que nunca trabaje con esa interfaz. Precisaría solamente que alguien me pase algún código de como arrancar a leer datos del bmp180 en metros, después para transmitir por xbee hacia la pc ya lo hice. Estoy laburando con el Codewarrior.

Muchas gracias!!


Adjunto links de datasheets :

BMP180:

https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-12.pdf

JM60:

http://cache.freescale.com/files/microcontrollers/doc/data_sheet/MC9S08JM60.pdf?fpsp=1

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #1 en: 28 de Marzo de 2015, 10:59:08 »
Buenas FS2015

hechale un vistazo a esto: hay cuelgan algunos ejemplos de I2C, quiza no para tu microcontrolador, pero debe ser casi igual

https://community.freescale.com/message/456540#456540
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #2 en: 28 de Marzo de 2015, 11:48:42 »
Como vas a leer la altura del ascensor con un sensor de presión??
Me interesa saber como lo resuelves.. :shock: :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado juanml

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #3 en: 28 de Marzo de 2015, 14:08:42 »
Te dejo una librería de I2C que adapté de un Kinetis a un Coldfire V1 JM128. Creo que tendría que funcionar sin cambiar nada en el 9S08JM60.

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #4 en: 28 de Marzo de 2015, 14:45:42 »
Como vas a leer la altura del ascensor con un sensor de presión??
Me interesa saber como lo resuelves.. :shock: :shock: :shock:

El ascensor es al aire libre, es como un montacargas abierto en un edificio en construccion!

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #5 en: 28 de Marzo de 2015, 14:46:48 »
Te dejo una librería de I2C que adapté de un Kinetis a un Coldfire V1 JM128. Creo que tendría que funcionar sin cambiar nada en el 9S08JM60.

Muchas gracias! Lo probaré y te cuento como me ha ido  :-/

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #6 en: 28 de Marzo de 2015, 15:15:15 »
Te dejo una librería de I2C que adapté de un Kinetis a un Coldfire V1 JM128. Creo que tendría que funcionar sin cambiar nada en el 9S08JM60.

Muchas gracias! Lo probaré y te cuento como me ha ido  :-/

Probé tu librería, y luego de modificar algunas cosas que eran incompatibles, me he encontrado con el siguiente problema y nose como solucionarlo, quizá vos sabés porque..

Desconectado juanml

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #7 en: 28 de Marzo de 2015, 15:48:26 »
Recién probé con un JM60 y después de sacar el 1 que sobra en los macros (IICC1 en vez de IIC1C1, por ejemplo), compiló lo más bien! Estoy usando CodeWarrior v10.6.
Te adjunto los archivos modificados para el JM60.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #8 en: 28 de Marzo de 2015, 16:48:42 »
Como vas a leer la altura del ascensor con un sensor de presión??
Me interesa saber como lo resuelves.. :shock: :shock: :shock:

ese sensor mide presion barométrica. Se puede alcanzar una presicion de 10cm en teoría, se usa mucho en controladores de vuelo para UAV's
aqui hay algo del hermano menor, el BMP085:
http://www.todopic.com.ar/foros/index.php?topic=41982.0

sds!
-
Leonardo Garberoglio

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #9 en: 29 de Marzo de 2015, 20:24:35 »
Como vas a leer la altura del ascensor con un sensor de presión??
Me interesa saber como lo resuelves.. :shock: :shock: :shock:

ese sensor mide presion barométrica. Se puede alcanzar una presicion de 10cm en teoría, se usa mucho en controladores de vuelo para UAV's
aqui hay algo del hermano menor, el BMP085:
http://www.todopic.com.ar/foros/index.php?topic=41982.0

sds!

Muchas gracias por el aporte, lo leeré

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #10 en: 29 de Marzo de 2015, 20:25:35 »
Recién probé con un JM60 y después de sacar el 1 que sobra en los macros (IICC1 en vez de IIC1C1, por ejemplo), compiló lo más bien! Estoy usando CodeWarrior v10.6.
Te adjunto los archivos modificados para el JM60.

Excelente esa librería, me esta siendo de mucha utilidad. Cuando esté mas avanzado en el proyecto les muestro como va quedando el código!!

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #11 en: 31 de Marzo de 2015, 17:04:51 »
Que tal, luego de haber colocado las librerías correspondientes, que de hecho me fueron de gran ayuda, no logro poder comunicarme. Si alguien me puede dar una mano de como harían ustedes el código, me sería de gran ayuda. No necesito saber como calibrar el sensor ni nada de eso, solo poder tomar la información de los valores que esta sensando el BMP180... se me esta complicando mucho entender el protocolo del i2c. Muchas gracias

Desconectado juanml

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #12 en: 31 de Marzo de 2015, 18:33:00 »
Nunca usé ese sensor, pero acá hay una libraría de Arduino.

https://github.com/sparkfun/BMP180_Breakout/tree/master/software/Arduino/libraries/SFE_BMP180

Podés probar de adaptarla al JM60. Si encuentro algo más te aviso!



EDIT: Encontré otra librería pero para mbed:

https://developer.mbed.org/users/onehorse/code/BMP180/
« Última modificación: 31 de Marzo de 2015, 18:36:06 por juanml »

Desconectado Fs2015

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda JM60 con sensor presión BMP180
« Respuesta #13 en: 07 de Abril de 2015, 14:24:46 »
Buenas tardes!!

Les dejo el código que he escrito para ver si me pueden dar una mano, debido a que no logro tener una respuesta del sensor  :5] :5] YA ME ESTOY VOLVIENDO LOCO!!!}

Tengo un programador que me permite ir viendo el paso a paso del programa que le cargo al jm60, y se cuelga cuando espera el I2C_WAIT() del I2C_ReadRegister() luego de haber enviado el adress. Les dejo la libreria y el codigo:

Libreria utilizada:

#include "derivative.h"
#include "I2C.h"

void I2C_WriteRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress, /*unsigned*/ char u8Data)
{
   I2C_Start();            
   IICD = u8SlaveAddress << 1;                           /* Send I2C device address with W/R bit = 0 */
   I2C_Wait();

   IICD = u8RegisterAddress;                              /* Send register address */
   I2C_Wait();

   IICD = u8Data;                                    /* Send the data */
   I2C_Wait();

   I2C_Stop();

    Pause(50);
}

unsigned char I2C_ReadRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress)
{
   unsigned char result;
    
   I2C_Start();            
   IICD = u8SlaveAddress << 1;                           /* Send I2C device address with W/R bit = 0 */
   I2C_Wait();                              

   IICD = u8RegisterAddress;                              /* Send register address */
   I2C_Wait();

   I2C_RepeatedStart();
   
   IICD = (u8SlaveAddress << 1) | 0x01;                     /* Send I2C device address this time with W/R bit = 1 */
   I2C_Wait();   

   I2C_EnterRxMode();
   I2C_DisableAck();

   result = IICD;                                    
   I2C_Wait();
   I2C_Stop(); 
   result = IICD;
   Pause(50);
   return result;
}


Codigo principal:


#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "I2C.h"


#ifdef __cplusplus
 extern "C"
#endif
void MCU_init(void); /* Device initialization function declaration */


 unsigned char BMP180_ADRESS = 0x77; // 7-bit address
 
 unsigned char BMP180_REG_CONTROL = 0xF4;

 unsigned char   BMP180_REG_RESULT = 0xF6;
 
  long ut;
  char msb;
  char lsb;
  char result;
 
  unsigned short ac5;
  unsigned short ac6;
  short mc;
  short md;
 
  long x1;
  long x2;
  long b5;
 
#define   BMP180_COMMAND_TEMPERATURE 0x2E



void main(void) {
  MCU_init(); /* call Device Initialization */



  for(;;) {
 
  /* Lee datos para calibracion de temperatura */
 
  I2C_ReadRegister(BMP180_ADRESS, 0xB2) ;
  ac5=result;                                   
 
  I2C_ReadRegister(BMP180_ADRESS, 0xB4) ;
  ac6=result;
 
   I2C_ReadRegister(BMP180_ADRESS, 0xBC) ;
  mc=result;
 
   I2C_ReadRegister(BMP180_ADRESS, 0xBE) ;
  md=result;
 
  /* Lee temperatura descompensada para luego ser compensada con los valores de calibracion*/
 
  I2C_WriteRegister(BMP180_ADRESS,BMP180_REG_CONTROL, 0x2E) ;  /*BMP180_COMMAND_TEMPERATURE*/
 
  I2C_ReadRegister(BMP180_ADRESS, BMP180_REG_RESULT) ;
 
   msb=result;
 
  I2C_ReadRegister(BMP180_ADRESS, 0xF7) ;
 
   lsb=result;

  ut= msb << 8 + lsb ;
 
  /* Calcula temperatura con la UT medida y los valores de calibración */
 
 
 
    /* __RESET_WATCHDOG(); by default, COP is disabled with device init. When enabling, also reset the watchdog. */
  } /* loop forever */
  /* please make sure that you never leave main */
}