LCD и BMP180 по шине I2C
- Войдите на сайт для отправки комментариев
Ср, 04/03/2015 - 12:18
Народ, такое дело, есть экран, работает через переходник по шине I2C, когда висит один, то все хорошо работает. Есть BMP180, датчик давления и температуры, тестовые скейчи отлично работают, выводят даннтые в порт. При попытке объединить два скейча что-бы выводить данные с датчика на дисплей, ардуиноIDE выдает кучу ошибок. Подозреваю что из-за того что нет адресации, не знаю куда прописывать эти адреса. Гугл ни чего мне интересного не говорит, помогите разобраться.
З.Ы.Код выложу вечером и того что работает и того что не работает.
З.Ы.Ы. Прошу сильно не пинать я тольько учусь...
Ну без кода тяжеловато ответить.
Ну без кода тяжеловато ответить.
просьбу уловил, код дома, а я на работе, доберусь и выложу
Вот код, который отказывается работать, у дисплея адрес по умолчанию стоит (0х27), у датчика ВМР180 - видел в тестовом скейче 0х77 кажись...
Из за неправильной адресации ругаться не будет, там просто не работает. По отдельности все примеры работают (Dallas, BMP, RTC) правильно? Скиньте, что в ошибках выдает.
В стандартных примерах все то-же самое, но ни кто не ругается и все работает:
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
DS1302_LCD_DS18B20.ino: In function 'void loop()':
DS1302_LCD_DS18B20:59: error: 'Pressure' was not declared in this scope
DS1302_LCD_DS18B20:60: error: 'Temperature' was not declared in this scope
вот код датчика BMP180:
Если в первоначальном закоментировать все что касается датчика, то все прекрасно компилится и работает.
А куда у вас пропала строка 9 из кода BMP?
Упс, как-то порпустил... Вечером внесу изменения и буду пробовать...
А как происходит адресация команд?
Упс, как-то порпустил... Вечером внесу изменения и буду пробовать...
А как происходит адресация команд?
У них адреса не изменяемые и забиты жестко в библиотеку.
Всем спаибо, дело было в этой строке инициалиации переменных, поправил, все прекрасно работает.
осталось разобраться с DS1302, то это уже другая тема.
Доброго времени. Подскажите пожалуйста, пытаюсь совместить DHT11 и LCD 128*64. Ничего не получается. По отдельности оба ингридиента работают. DHT в мониторе все данные выдает, дисплей картинки крутит. Но чтобы данные с датчика выводились на дисплейчик не получается. Пытался корректировать код приведённый здесь, но компиляция постоянно с ошибками. Брал куски от тестовых и пытался их совместить. Опять же безрезультатно.
В сети много примеров, но для обычного дисплея 16*2. А для 128*64 не подходит.
Помогите кодом.
Привожу своё творение. Только сильно не смейтесь я только начал учиться.
PS не смог спрятать под спойлер
попробуй вот этот там с дисплем тебе придется повозится или заменить на свой
OdinochkA, у вас нет понимания того что вы делаете.
Зачем нужны скобки в 58 и 67 строке? В какое место экрана вы выводите надписи? Ещё и градус...
Да и пример похоже, изначально с дисплеем и датчиком был рабочий, но вы там зачем-то закомментировали.
Ну я же говорил что только учусь. У меня есть понимание того, что я хочу увидеть в железе. Я это делаю и в приниципе представляю взаимосвязь и работоспособность. Но я не могу кодить. Это к сожалению не моё. Я насмотрелся примеров кодов, пытался из одного сделать другое, как-то объеденить, чтобы это работало так как я себе это представил. НО увы.
Пример был сделан под стандартный экран 16*2 и соответсвующие библиотеки. Я пытался переделать на основе этого кода своё. Мои библиотеки #include <OLED_I2C.h> вот и начал заменять и временно вырезать то что казалось не подходит
58 и 67 незнаю ((. Наверное недоглядел.
Спасибо попробую. Хотя это похоже на пример с диспом 16*2.
И вопрос по 6-й строке. Указано что DHT11_PIN 7, а в коментах что он на пине 4. Где правда?
Завтра попробую. Связка и код на работе остались. попробую и отпишусь
да не доглядел но скетч же работает и то что я там за каментировал я еще не как не могу их акуратно над часами написать вот так как то
7пин я использовал под себя а вы делайте 4 пин
вот так они работают http://vk.com/id217713359?z=video217713359_171131276%2Fvideos217713359
Два дисплея на одном адресе? УПРЛС?
На расширителе есть контакты для задания одного из 8 возможных адресов (0x20 - 0x27). Замкни любуюб посмотри с помощью i2cscanner, что получилось, и исправь скетч.
он прикрасно работает и это не мишает работе моего термометра )))
to zugni подскажи что не так с твоим кодом. или с моими библиотеками. Вроде жалуется на DHT, но как видно по менеджеру у меня они все стоят
https://yadi.sk/i/hLf9SjCBhnNBo
Дабы закрыть самим же открытый вопрос. Нашел код. В нём была совсем другая библиотека для диспа.
Сборка работает.
Спасибо всем кто откликнулся.
Приветствую форумчане! Собираю свой первый проект на ардуино - метеостанцию. В качестве датчика атмосферного давления использую bmp180. С ним на шине I2C также висит дисплей 1602. И все вроде замечательно, кроме одного. Через случайный промежуток времени от нескольких минут до нескольких часов показания давления становятся вместо 630 мм.рт.ст 1700 мм.рт.ст., помогает только перезагрузка платы. Куда копать? Да и в принципе по коду буду рад "грамотным пинкам"!
Для начала, копайте в сторону отмывки флюса и проверки надежности соединений.
Тоже на это дело грешил, однако видимых проблем нет. И пока в режиме тестирования датчик стабильно работает. В одном тесте 8 часов, теперь в другом уже часа 4 стоит. Пока есть предположение о проблеме в запросах данных у датчика - если смотреть пример библиотеки SFE_BMP180, то там всегда есть задержка между измерением и запросом данных, плюс всегда(не только в этом примере) обмен начинается с температуры... может в этом есть проблема. Пока ищу решение. Вот выдержка из datasheet:
Чтение давления: (некомпенсированное значение) Записываем в регистр «Measurement Control» значение: 0x34 + (OSS<<6); Ожидаем спад флага состояния «CSO» в «0»; Читаем результат из регистров «Out MSB», «Out LSB» и «Out xLSB»; long UP = («Out MSB»<<16 + «Out LSB»<<8 + «Out xLSB») >> (8-OSS);
А в протеусе как работает?
В протеусе не моделировал, в принципе им не пользовался никогда, только слышал о нем.
Пока попробовал отключать прерывания на время измерения давления - не помогло. Сейчас в тестировании стоит скетч с "полным" опросом датчика:
В общем, все упирается в замер температуры, если я правильно понял даташит на английском и файлик Adafruit_BMP085.cpp т.к. она используется при расчете давления. А потому хочешь или нет, а температуру считывать надо. Более подробно и глубоко вникать, нет особого желания.
Скетч с опросом температуры и прочей херни уже отработал 9 часов - полет нормальный.