Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » BH1750 light meter на 16f84a с экраном :) (bh1750fvi)
BH1750 light meter на 16f84a с экраном :)
defaultNick Дата: Ср, 05.08.2015, 22:25  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 23
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

Вообщем меряет сенсор люксы 0-65535
если кому надо, вот говнокод. извините за такой код. цель не стояла сделать красиво, памяти полно smile

INCLUDE "bs2defs.bas"
DEFINE OSC 4             'HS 8 or 4
define LCD_DREG PORTB    'LCD DATA PORT
DEFINE LCD_DBIT 0        'Starting data bit 0 or 4
DEFINE LCD_RSREG PORTB   'register select port (pin 4 of lcd)
DEFINE LCD_RSBIT 5       'rgister select bit
DEFINE LCD_EREG PORTB    'enable port (pin 6 of lcd)
DEFINE LCD_EBIT 6        'enable bit
DEFINE LCD_BITS 4        ' 4 OR 8. 4: d4,d5,d6,d7 jf lcd
DEFINE LCD_LINES 2      
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
a var word : x var byte : lux var word
pause 10 : lux = 0

Lcdout $fe, 1 : lcdout "Lux"
lcdout $fe, $c0 : lcdout "Meter"

pause 2000
    
mainloop:
lux = 0
   I2CWrite porta.0, porta.1, %01000110, [%00100000], bogus1 'Sziklai
   Pause 130              
   I2CRead porta.0, porta.1, %01000110, [a.byte1, a.byte0], bogus2
     
if a.bit0 = 1 then lux = lux + 1
if a.bit1 = 1 then lux = lux + 2
if a.bit2 = 1 then lux = lux + 4
if a.bit3 = 1 then lux = lux + 8
if a.bit4 = 1 then lux = lux + 16
if a.bit5 = 1 then lux = lux + 32
if a.bit6 = 1 then lux = lux + 64
if a.bit7 = 1 then lux = lux + 128
if a.bit8 = 1 then lux = lux + 256
if a.bit9 = 1 then lux = lux + 512
if a.bit10 = 1 then lux = lux + 1024
if a.bit11 = 1 then lux = lux + 2048
if a.bit12 = 1 then lux = lux + 4096
if a.bit13 = 1 then lux = lux + 8192
if a.bit14 = 1 then lux = lux + 16384
if a.bit15 = 1 then lux = lux + 32768
  
   LCDOut $fe, 1 : lcdout dec lux 

                                      
GoTo mainloop                       

bogus1:
   LCDOut $fe,1, "Error W"           
   Pause 1000
   End
bogus2:
   LCDOut $fe,1, "Error R"        
   Pause 1000
   End
ЯНДЕКС Дата: 05.08.2015
ADMIN Дата: Чт, 06.08.2015, 08:06  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А какая тогда стояла цель?
Хотелось бы хоть каких-то пояснений к данному набору буковок и циферок... Фотографий, описаний чего-либо.  А так - какой смысл?
defaultNick Дата: Чт, 06.08.2015, 17:06  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 23
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline

цель - чтоб влезало в этот пик и работало. оптимизация не нужна smile
а что тут объяснять? а.0 и а.1 к сенсору.
на экране показывает значение в люксах от 0 до 65535. вот и всё smile

сенсор распространённый, но простого кода не нашёл. они все используют готовую библиотеку для общения с ним. люкс-метер, так сказать.
ADMIN Дата: Чт, 06.08.2015, 19:06  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я к тому, что ни названия датчика, ни комментариев.... Мне вот непонятно, о чем и к чему этот топик. Если в железе есть, можно оформить статью в каталоге. Только покрасивей. С фотками и комментами. Не затеряется.
defaultNick Дата: Ср, 28.10.2015, 03:19  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 23
Репутация: 0   ±
Замечания:   ±
На сайте с 06.06.2010

Статус: Offline


тут всё понятно же. в названии темы датчик: BH1750
вот схема

единственное что: у меня lcd экран 1х16, но строчки поделены на 1х8 + 1х8
там немного поменять, чтоб или одна нормальная линия 1х16 была или 2х16.
но это мелочи.
Прикрепления: 2465494.png(107Kb)

Сообщение отредактировал defaultNick - Ср, 28.10.2015, 03:23
MiXaS Дата: Ср, 28.10.2015, 20:38  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 618
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Спасибо, даже не знал, что такой сенсор есть. Надо будет купить и проверить его на точность. На работе есть поверенный прибор
Matrix252005 Дата: Чт, 29.10.2015, 08:31  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!!!

defaultNick, не пойму этого:
Цитата defaultNick ()
if a.bit0 = 1 then lux = lux + 1
if a.bit1 = 1 then lux = lux + 2
....
if a.bit14 = 1 then lux = lux + 16384
if a.bit15 = 1 then lux = lux + 32768

На сколько я понимаю, bit15 = 1 это и есть 32768... И зачем эти все манипуляции???
Не проще сделать так:

lux = a

Или я чет не понял???


THE TRUTH IS OUT THERE.

С уважением, Николай.
Форум Picbasic.ru » Программирование МК » PicBasicPro » BH1750 light meter на 16f84a с экраном :) (bh1750fvi)
Страница 1 из 11
Поиск: