Коллеги, кто работал с датчиком Si7021, подскажите, что делаю не так? PIC16F628A, I2C софтверный, само собой, на одной шине висят часы DS3231 и вышеуказанный датчик. C часами все прекрасно - данные записываются и читаются, а с Si7021 всегда читается 01FF... Вот процедура измерения/чтения влажности, где ошибка?
throgvar, тот кусок кода, что Вы дали ничего не говорит. Давайте нормальный. Датчик 3.3в., надеюсь Вы уровни согласовали. И адрес датчика 0x40, а не 0x80.
Сообщение отредактировал
ivan_fd - Чт, 30.06.2016, 18:23
ivan_fd, датчик взял на готовой платке c обвязкой (стаб и конвертер уровней) Если приписать к адресу 0x40 ноль или единицу справа (младший бит, R/W) - получаем 0x80 или 0x81.
Вот код всей проги, после небольшой оптимизации, не повлиявшей на результат.
Symbol carry=STATUS.0 Symbol wr_3231=%11010000 Symbol rd_3231=%11010001 Symbol wr7021=%10000000 Symbol rd7021=%10000001 Symbol hr_3231=$02 Symbol min_3231=$01 Symbol sec_3231=$00
Dim hour As Byte Dim minute As Byte Dim second As Byte Dim ds_num As Byte Dim num As Byte Dim leftkey As Bit Dim rightkey As Bit Dim buttmode As Byte Dim buttset As Byte Dim keycount As Byte Dim temper As Word Dim humidity As Word Dim oldsec As Byte
Clear OPTION_REG.7 TRISB=%00000000 TRISA=$ff Clear humidity Clear temper Clear second
inc_hour: Inc hour If hour=24 Then Clear hour num=hour: Call dec_to_bindec: Clear ds_num.6: Call ds_write_hour Return
inc_minute: minute=minute+1 If minute=60 Then Clear minute num=minute: Call dec_to_bindec: Call ds_write_minute
bindec_to_dec: Clear num Ror ds_num,0 If carry=1 Then Inc num Ror ds_num,0 If carry=1 Then num=num+2 Ror ds_num,0 If carry=1 Then num=num+4 Ror ds_num,0 If carry=1 Then num=num+8 Ror ds_num,0 If carry=1 Then num=num+10 Ror ds_num,0 If carry=1 Then num=num+20 Ror ds_num,0 If carry=1 Then num=num+40 Return
dec_to_bindec: Clear ds_num While num>9 num=num-10 Inc ds_num Wend Rol ds_num,0 Rol ds_num,0 Rol ds_num,0 Rol ds_num,0 ds_num=ds_num+num Return
Matrix252005, быстренько пишите еще один пост. Любой.
Спасибо Иван!!! Что то я не заметил этого...
Добавлено (01.07.2016, 08:08) --------------------------------------------- throgvar, есть пару вопросов по Вашему коду:
зачем Вы 2 раза считываете влажность???
Цитатаthrogvar ()
If second<>oldsec Then Call humid: Call termo:Call humid
попробуйте накидать отдельную прогу, для считывания с Si7021... Вы пробовали свой код в протеусе???
И наконец, попробуйте так:
humid: BStart BusOut wr7021 BusOut $e5 BReStart BusOut rd7021 humidity.HighByte=BusIn humidity.LowByte=BusIn CRC = BusIn ' это может и не нужно BusNack BStop Return
Добавлено (01.07.2016, 10:40) --------------------------------------------- throgvar, попробуйте этот пример:
Matrix252005, двойное измерение - ошибка, там было чтение CRC, не заметил
в протеусе не пробовал, да и зачем протеус, если уже собран макет? Да ине очень я протеусу доверяю, в личной практике был случай, когда простенькая прога, управляющая встроенными PWM в протеусе работала, а в железе - нет.
Ваша версия кода с Si7021 считывает нули, а вдобавок сбивает чтение с часов: вместо времени через раз считываются FF
Matrix252005, спасибо за подсказку! После команды на измерение влажности нужна была задержка, 100 мс - перебор, вполне достаточно 20. И еще, ваш код выдает FF в младшем байте, немного поправил - все заработало
температуру лучше читать командой E0, она не запускает измерение, а выдает температуру, при которой в последний раз мерялась влажность, т.е. работает быстрее и экономичнее.
Сообщение отредактировал
throgvar - Пт, 01.07.2016, 13:14
Здравствуйте дамы и господа! Предлагаем Вашему вниманию интересный сайт https://dengi-do-zarplaty.ru/ Займ на карту онлайн – популярная микрофинансовая услуга. Ее основными достоинствами, по сравнению с обычным банковским кредитом, выступают: оперативность выдачи денег на карточку и доступность большей части потенциальных заемщиков, включая проблемных, то есть имеющих плохую кредитную историю, текущие долги и непогашенные финансовые обязательства.Займы на карту стали реальной возможностью получить деньги не в банке, что требует много времени и доступно далеко не всем. Важным дополнением становится минимум формальностей при получении займа и лояльность со стороны МФО по отношению к потенциальным клиентам. Получить быстрый займ на карту онлайн можно в случае острой нехватки денежных средств, например, при задержке зарплаты, при обнаружении болезни и т.д. тонировка окон пвх