Autor Tema: Configuración BH1750  (Leído 3875 veces)

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

Desconectado villa

  • PIC10
  • *
  • Mensajes: 2
Configuración BH1750
« en: 20 de Junio de 2016, 15:31:31 »
Hola a todos! He leído bastante pero nunca había escrito en este foro...

Me ha surgido un problema en un proyecto. He conectado un chip BH1750 a un PIC16f886 a través del bus I2C y mi objetivo es mostrar el valor de iluminación dado en un LCD de 2x16 caracteres. Hace poco que comencé a programar en CCS y nunca he realizado ningún proyecto en el que use el bus para enviar o recibir datos.

Llevo ya bastantes días peleándome con el código pero tengo el problema de que no encuentro ejemplos en la web (todos son para Arduino) y tampoco puedo simularlo en Proteus porque no existe el componente BH1750.

¿Alguien puede echarme una mano? alguna librería o pauta para conseguir configurar el BH1750 y guardar el valor en un registro del PIC.

Adjunto el programa que he realizado:

Código: [Seleccionar]
//******************LUXOMETRO*****************************
//
#Include <16f886.h>


#fuses INTRC_IO,NOWDT,PUT,MCLR,BROWNOUT,NOLVP,NOCPD,NOPROTECT
#use delay (Internal=4000000)
#use fast_io(A)
#use standard_io(B)
#use fast_io(C)
#use I2C(MASTER, sda=PIN_C4, scl=PIN_C3, fast=450000)

#define PWR_DOWN             0x00
#define PWR_ON                  0x01
#define RESET                     0X07
#define MODE_HIGH_RES1    0X10
#define MODE_HIGH_RES2    0X11
#define MODE_LOW_RES       0x13
#define ADDRESS_L             0X23
                               
#Include <lcd_portb.c>

//**********************VARIABLES GLOBALES****************************

unsigned long LUX;
char HB,LB;

//*******************FUNCIONES DE PROGRAMA*****************************

void lcd_defecto(){
lcd_init();                                  //función de inicialización del LCD
delay_ms(10);
lcd_putc('\f');                              //se limpia el LCD
delay_ms(10);
lcd_gotoxy(2,1);                             //Apunta a posición 2, fila 1
delay_ms(10);
printf(lcd_putc, "LUXOMETRO");         
delay_ms(10);
lcd_putc('\n');                              //Apunta al inicio de la línea 2
delay_ms(10);
}

void BH1750_init(){
   I2C_start();
   I2C_write(ADDRESS_L);       
   I2C_write(PWR_ON);
   delay_ms(100);
   I2C_write(RESET);
   delay_ms(100);
   I2C_write(MODE_HIGH_RES1);
   I2C_stop();
   delay_ms(200);
}


//*********************PROGRAMA PRINCIPAL***************************

void main () {

set_tris_a(0x0F);                            //Configuración de I/O puerto A
set_tris_b(0x01);                            //Configuración de I/O puerto B
set_tris_c(0xC0);                            //Configuración de I/O puerto C

lcd_defecto();
BH1750_init();

while(TRUE){
   I2C_start();
   I2C_write(ADDRESS_L);     
   hb = I2C_read(1); 
   lb = I2C_read(0);
   I2c_stop();
   LUX = make16(hb, lb);
   LUX = LUX/1.2;
   delay_ms(500);
   lcd_gotoxy(4,2);
   printf(lcd_putc, "%5lu",LUX);
   delay_ms(500);
   };   

}

Cuando pruebo todo esto, en el LCD veo el mensaje "Luxometro" correctamente por lo que se que tanto el PIC como el LCD están bien. Pero la lectura que debería venirme del BH1750 se queda fija en el valor 54612...

Saludos.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Configuración BH1750
« Respuesta #1 en: 20 de Junio de 2016, 16:29:35 »
has pasado por el foro del CCS?

Código: [Seleccionar]
https://www.ccsinfo.com/forum/viewtopic.php?t=50385
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado villa

  • PIC10
  • *
  • Mensajes: 2
Re:Configuración BH1750
« Respuesta #2 en: 21 de Junio de 2016, 12:00:47 »
Hola, pues la verdad es que si había probado ese código y no me funcionaba. Pero he vuelto a intentarlo y ahora si.  :-)

Imagino que habría escrito algo incoherente entre el programa y mi cabecera... la verdad es que he hecho tantas pruebas que ya no lo se, jeje. :oops:

Gracias!

Desconectado Wino

  • PIC10
  • *
  • Mensajes: 2
Re:Configuración BH1750
« Respuesta #3 en: 20 de Diciembre de 2016, 21:24:51 »
Puedes subir el codigo corregido por favor

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Configuración BH1750
« Respuesta #4 en: 20 de Diciembre de 2016, 22:06:59 »
Puedes subir el codigo corregido por favor

Lo tenes en el link que paso PalitroqueZ, ese es el codigo de la libreria. Incluso te dice el nombre que deben tener los archivos.

En un main.c luego haces:

#include "BH1750.h"

Con lo cual:
- Tendrias Configurado el I2C
- En la parte de setup simplemente usas BH1750_init();
- Para leer el dispositivo usas get_lux_value(unsigned char mode, unsigned long delay_time);

Donde los modos estan en el .h ( los defines ) y el delay_time es para la demora de adentro, tendrias que ver el datasheet cual es el minimo.

Desconectado Wino

  • PIC10
  • *
  • Mensajes: 2
Re:Configuración BH1750
« Respuesta #5 en: 21 de Diciembre de 2016, 00:07:52 »
estaba revisando ese codigo pero no entiendo bien estoy usando un pic 18f4550 no se  que modificaciones tengo que hacer podrias explicarme un poco mas por favor


 

anything