Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/06/2016 #1


Configuración BH1750
Hola!

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.

Gracias!
19/06/2016 #2


Copio la última versión de código que he realizado a ver si alguien me puede decir que estoy haciendo mal...

Código:
//******************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, 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.
19/06/2016 #3
Moderador

Avatar de D@rkbytes

Saludos.
Mira por aquí: BH1750 Digital Light Sensor / Lux Meter Chip Driver
20/06/2016 #4


Gracias por responder.

Ya vi el ejemplo del enlace que me indicas pero, revisando el datasheet del BH1750, no entiendo las direcciones que usa para comunicarse con el chip...

De todas formas también probé a realizar un programa copiando ese ejemplo y usando la cabecera para mi PIC pero tampoco funcionaba.
21/06/2016 #5


Hola, he vuelto a intentar hacerlo funcionar con ese programa 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.

Gracias!
23/10/2016 #6


Sensor BH1750
Hola buenos días, también estoy manejando este sensor de Luminosidad pero no he podido hacerlo funcionar y he intentado con tu código y no funciona, seria posible que me indiques cual es el error o que debo hacer para que este funcione te lo agradezco y gracias
25/10/2016 #7
Moderador

Avatar de D@rkbytes

El programa que debe funcionar, es el del enlace del post #3
Sería mejor que pruebes con ese programa.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.