Исследование BH1750 датчик освещённости
Исходник + документация - скачать
'===============================================================================
' К О Н Ф И Г У Р А Ц И Я И С П О Л Ь З У Е М О Г О МК
'===============================================================================
$map ' Получаем карту распределения памяти
$regfile = "m328pdef.dat" ' Используемый контроллер
$crystal = 16000000
$framesize = 128 'размер области используемой и необходимой для преобразований
$hwstack = 128 ' Размер аппаратного стека
$swstack = 128 ' Размер программного стека'===============================================================================
' К О Н Ф И Г У Р А Ц И Я USART
'===============================================================================
$baud = 38400
'Ucsr0a.1 = 1 ' Baud = Baud * 2'===============================================================================
' К О Н Ф И Г У Р А Ц И Я Ш И Н Ы i2c
'===============================================================================
'0 - аппаратная реализация (МК - выводы аппаратные);
'1 - программная ускоренная реализация (МК - выводы любые);
'2 - программная реализация (МК - выводы любые)
Const Variant_realizacii_i2c = 0#if Variant_realizacii_i2c = 0
$lib "i2c_twi.lbx" ' Без этой библиотеки реализация работы с шиной I2c будет программной, с библиотекой реализация шины I2c происходит на уровне аппаратных средств МК
' SCL и SDA, аппаратные выводы МК!!!
Config Scl = Portc.5 ' Конфигурация вывода Scl
Config Sda = Portc.4 ' Конфигурация вывода Sda
Config Twi = 100000 ' Скорость работы шины I2c на аппаратном уровне
#endif#if Variant_realizacii_i2c = 1
$lib "i2c-x4.lib" ' Ускоренный вариант программной реализации шины I2c
Config Scl = Portc.5 ' Конфигурация вывода Scl
Config Sda = Portc.4 ' Конфигурация вывода Sda
Config I2cdelay = 1 ' Скорость работы шины I2c на программном уровне
#endif#if Variant_realizacii_i2c = 2 ' Программный вариант реализации шины I2c, выводы любые
Config Scl = Portc.5 ' Конфигурация вывода Scl
Config Sda = Portc.4 ' Конфигурация вывода Sda
Config I2cdelay = 1 ' Скорость работы шины I2c на программном уровне
#endifI2cinit ' Инициализация шины I2c
Waitms 50
'===============================================================================
' Н А С Т Р О Й К А Д А Т Ч И К А О С В Е Щ Ё Н Н О СТ И BH1750
'==============================================================================='----------------------- Адресация BH1750 ------------------------------------
' Adr_read_bh1750 Alias 71 ' Адрес чтения BH1750, если ADD датчика на Gnd
' Adr_write_bh1750 Alias 70 ' Адрес записи BH1750, если ADD датчика на GndAdr_read_bh1750 Alias 185 ' Адрес чтения BH1750, если ADD датчика на +5V
Adr_write_bh1750 Alias 184 ' Адрес записи BH1750, если ADD датчика на +5V'===============================================================================
' И С П О Л Ь З У Е М Ы Е К О Н С Т А Н Т Ы Д Л Я Р А Б О Т Ы С BH1750
'===============================================================================
Power_down_bh1750 Alias &B_0000_0000
Power_on_bh1750 Alias &B_0000_0001
Reset_bh1750 Alias &B_0000_0111Cyclic_measurements_x05_bh1750 Alias &B_0001_0001
Cyclic_measurements_x1_bh1750 Alias &B_0001_0000
Cyclic_measurements_x4_bh1750 Alias &B_0001_0011One_measurement_x05_bh1750 Alias &B_0010_0000
One_measurement_x1_bh1750 Alias &B_0010_0001
One_measurement_x4_bh1750 Alias &B_0010_0011'===============================================================================
' И С П О Л Ь З У Е М Ы Е П Е Р Е М Е Н Н Ы Е
'===============================================================================
Dim Bh1750_word As Word
Dim Bh1750_low_byte As Byte At Bh1750_word + 1 Overlay
Dim Bh1750_high_byte As Byte At Bh1750_word OverlayDim Bh1750_single As Single
Dim Bh1750_str As String * 10'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
' З А П У С К И П Р Е Д В А Р И Т Е Л Ь Н Ы Е Н А С Т Р О Й К И
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\Gosub Init_bh1750
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'===============================================================================' Г Л А В Н Ы Й Ц И К Л
Главный_цикл:
'==============================================================================='Чтение значений освещённости с датчика BH1750
Gosub Read_bh1750
Print Bh1750_strWaitms 500
' Idle
'===============================================================================
!jmp Главный_цикл
End
'==============================================================================='===============================================================================
Read_bh1750:
'-------------------------------------------------------------------------------
I2cstart
I2cwbyte Adr_read_bh1750 ' Адрес чтения BH1750, если ADD датчика на Gnd
I2crbyte Bh1750_low_byte , Ack
I2crbyte Bh1750_high_byte , Nack
I2cstopIf Err = 0 Then
Bh1750_single = Bh1750_word / 1.2
Bh1750_word = Bh1750_single
Bh1750_str = Str(bh1750_word)
Bh1750_str = Format(bh1750_str , " 0")
Bh1750_str = Bh1750_str + " люкс"
Else
Bh1750_str = "Err BH1750"
End If
'-------------------------------------------------------------------------------
Return
'==============================================================================='===============================================================================
Init_bh1750:
'-------------------------------------------------------------------------------
I2cstart
I2cwbyte Adr_write_bh1750 ' Адрес записи BH1750, если ADD датчика на Gnd
I2cwbyte Power_on_bh1750 ' Включаем датчик
I2cstopI2cstart
I2cwbyte Adr_write_bh1750
I2cwbyte Cyclic_measurements_x1_bh1750 ' Запускаем постоянные измерения
I2cstop
'-------------------------------------------------------------------------------
Return
'===============================================================================





