Перейти к содержанию

ximik_se

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Владивосток

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    МК

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения ximik_se

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. К сожалению, он продолжает ругаться. Но это не важно. Я решил проблему, точнее нашел корень зла в этом вопросе )) Когда я закомментил строчку и залил код. то влажность у меня показывалась верно. а вот температуру показывал "-39" - чушь. Так вот это хрень вылазиет, если после подачи питания коснуться датчика - видеть легкое дребезжание контактов приводит к каким-то сбоям. Это же происходило, когда я его подключал к УНЕ на прямую. решалось просо перезапуском уны. А тут я этого не учел, ведь питание на считывающий микроконтроллер было постоянным и я его не перезапускал. Спасибо ВАМ большое, что отозвались на тему! Я поставил ваш код. Не ругается. Но оказалось, что проблема в другом была! И я ее решил, точнее понял и убрал )) Выше я ответил и вам продублирую свой ответ, т.к. вы так же, как предидущий пользовались ответили на мой крик о помощи! Когда я закомментил строчку и залил код. то влажность у меня показывалась верно. а вот температуру показывал "-39" - чушь. Так вот это хрень вылазиет, если после подачи питания коснуться датчика - видеть легкое дребезжание контактов приводит к каким-то сбоям. Это же происходило, когда я его подключал к УНЕ на прямую. решалось просо перезапуском уны. А тут я этого не учел, ведь питание на считывающий микроконтроллер было постоянным и я его не перезапускал. Спасибо ВАМ большое, что отозвались на тему!
  2. Всем привет. Решил сделать небольшую домашнюю метеостанцию. Есть приемник с экраном, куда выводится инфа (построено на ATMEGA 328P) и есть передатчик, который посылает инфу по возудху (построено на ATtiny85). В передатчике использую обычные DHT22. В принципе качество чуть ниже среднего. Но главный недостаток - порой сбоит, присылая данные в 2 раза больше предидущих, потом опять приходит в себя. и так повторяется постоянно. При этом время между измерениями не меньше 20 сек. В общем заказал я себе с Китаюшки более точные датчики - CJMCU-1080 HDC1080 Вещица прекрасная, но общается по I2C. А библиотеку рабочую под нее я смог найти только одну "ClosedCube_HDC1080.h" и никаких модификаций под ATtiny я найти не смог. Для ее работы соответственно нужен Wire.h В общем решил я его поковырять самостоятельно, хоть и не прогер. Забрался во внутренности ClosedCube_HDC1080.cpp и везде заменил Wire на TinyWireM (некий аналог Wire для ATtiny). И у меня даже получилось считывать валжность, но вот вместо температуры приходит гадость. Ибо при компиляции Arduino IDE ругалась на строку (я ее ниже в коде закомментировал) uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } Ошибку пишет следующую: \ClosedCube_HDC1080.cpp: In member function 'void ClosedCube_HDC1080::heatUp(uint8_t)': \ClosedCube_HDC1080.cpp:81:13: error: 'class USI_TWI' has no member named 'readBytes' TinyWireM.readBytes(buf, (size_t)4); Может есть ребята более понимающие в коде и сумеющие победить эту проблему, чтобы и температуру этот датчик смог передавать через ATtiny85. Вот полный текст файла ClosedCube_HDC1080.cpp (уже замененный ну и строчка закоментирована): #include <TinyWireM.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080::ClosedCube_HDC1080() { } void ClosedCube_HDC1080::begin(uint8_t address) { _address = address; TinyWireM.begin(); // Heater off, 14 bit Temperature and Humidity Measurement Resolution TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(0x0); TinyWireM.write(0x0); TinyWireM.endTransmission(); } HDC1080_Registers ClosedCube_HDC1080::readRegister() { HDC1080_Registers reg; reg.rawData = (readData(CONFIGURATION) >> 8); return reg; } void ClosedCube_HDC1080::writeRegister(HDC1080_Registers reg) { TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(reg.rawData); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(10); } void ClosedCube_HDC1080::heatUp(uint8_t seconds) { HDC1080_Registers reg = readRegister(); reg.Heater = 1; reg.ModeOfAcquisition = 1; writeRegister(reg); uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } reg.Heater = 0; reg.ModeOfAcquisition = 0; writeRegister(reg); } float ClosedCube_HDC1080::readT() { return readTemperature(); } float ClosedCube_HDC1080::readTemperature() { uint16_t rawT = readData(TEMPERATURE); return (rawT / pow(2, 16)) * 165 - 40; } float ClosedCube_HDC1080::readH() { return readHumidity(); } float ClosedCube_HDC1080::readHumidity() { uint16_t rawH = readData(HUMIDITY); return (rawH / pow(2, 16)) * 100; } uint16_t ClosedCube_HDC1080::readManufacturerId() { return readData(MANUFACTURER_ID); } uint16_t ClosedCube_HDC1080::readDeviceId() { return readData(DEVICE_ID); } uint16_t ClosedCube_HDC1080::readData(uint8_t pointer) { TinyWireM.beginTransmission(_address); TinyWireM.write(pointer); TinyWireM.endTransmission(); delay(9); TinyWireM.requestFrom(_address, (uint8_t)2); byte msb = TinyWireM.read(); byte lsb = TinyWireM.read(); return msb << 8 | lsb; }
×
×
  • Создать...