Исследование 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 на программном уровне
  #endif

  I2cinit       ' Инициализация шины I2c
  Waitms 50
'===============================================================================
'    Н А С Т Р О Й К А   Д А Т Ч И К А   О С В Е Щ Ё Н Н О СТ И   BH1750
'===============================================================================

'-----------------------  Адресация BH1750  ------------------------------------
'  Adr_read_bh1750 Alias 71       ' Адрес чтения BH1750, если ADD датчика на Gnd
'  Adr_write_bh1750 Alias 70       ' Адрес записи BH1750, если ADD датчика на Gnd

  Adr_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_0111

  Cyclic_measurements_x05_bh1750 Alias &B_0001_0001
  Cyclic_measurements_x1_bh1750 Alias &B_0001_0000
  Cyclic_measurements_x4_bh1750 Alias &B_0001_0011

  One_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 Overlay

  Dim Bh1750_single As Single
  Dim Bh1750_str As String * 10

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'    З А П У С К    И    П Р Е Д В А Р И Т Е Л Ь Н Ы Е    Н А С Т Р О Й К И
'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

  Gosub Init_bh1750

'\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'===============================================================================

'                   Г Л А В Н Ы Й         Ц И К Л
  Главный_цикл:
'===============================================================================

    'Чтение значений освещённости с датчика  BH1750
     Gosub Read_bh1750
     Print Bh1750_str

     Waitms 500

'   Idle
'===============================================================================
  !jmp Главный_цикл
End
'===============================================================================

'===============================================================================
  Read_bh1750:
'-------------------------------------------------------------------------------
    I2cstart
    I2cwbyte Adr_read_bh1750       ' Адрес чтения BH1750, если ADD датчика на Gnd
    I2crbyte Bh1750_low_byte , Ack
    I2crbyte Bh1750_high_byte , Nack
    I2cstop

    If 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       ' Включаем датчик
    I2cstop

    I2cstart
    I2cwbyte Adr_write_bh1750
    I2cwbyte Cyclic_measurements_x1_bh1750       ' Запускаем постоянные измерения
    I2cstop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

http://sh.uploads.ru/t/lxEcL.jpg http://sh.uploads.ru/t/KYn2f.jpg
http://sg.uploads.ru/t/eBNpM.jpg http://sg.uploads.ru/t/J49oH.jpg
http://sh.uploads.ru/t/OodsQ.jpg http://sg.uploads.ru/t/4iZ9a.jpg