Re: TM WEB универсальная WI-FI автоматика своими руками
kvic,
Сделаю проверку в проге и фсе! Не позволю использовать левые датчики.
Кранты всем!
Зато не будет вопросов "а че у меня такие загогулины на графике"...
Форум самогонщиков, винокуров, виноделов, пивоваров, бондарей и очень хороших людей |
Назад 1 … 20 21 22 23 24 … 69 Следующая
Чтобы отправить ответ, вы должны войти или зарегистрироваться
с 421 по 440 из 1 367
kvic,
Сделаю проверку в проге и фсе! Не позволю использовать левые датчики.
Кранты всем!
Зато не будет вопросов "а че у меня такие загогулины на графике"...
Сделаю проверку в проге и фсе! Не позволю использовать левые датчики.
А вот это кстати хорошая идея
d.styler, мне вот загадочно, почему тмас на тех же датчиках и разъёмах показывает стабильную температуру, в тмвеб ежесекундно меняет туда сюда. Вот вопрос...
valera, хз - мне тоже... Может железка другая? И в Ардуино +5В, а тут +3В.
Зашёл сегодня в Чип и Дип, купил у них два DS18B20 (по 180 рублей).
Проверил в той программе.
---
13:37:38.959 -> 28-01-83-4D-0B-00-00-10: ROM ok.
13:37:38.959 -> Scratchpad Register: A6/01/4B/46/7F/FF/0A/10/F6
13:37:39.006 -> Info only: Scratchpad bytes 2,3,4 (4B/46/7F): Maxim default values.
13:37:39.006 -> Scratchpad byte 5 (0xFF): ok.
13:37:39.006 -> Scratchpad byte 6 (0x0A): ok.
13:37:39.006 -> Scratchpad byte 7 (0x10): ok.
13:37:39.006 -> 0x4E modifies alarm registers: ok.
13:37:39.006 -> 0x4E accepts 10 bit resolution: ok.
13:37:39.006 -> 0x4E preserves reserved bytes: ok.
13:37:39.053 -> 0x4E accepts 12 bit resolution: ok.
13:37:39.053 -> 0x4E preserves reserved bytes: ok.
13:37:39.053 -> Checking byte 6 upon temperature change: not necessary. Skipped.
13:37:39.053 -> --> Sensor responded like a genuie Maxim.
---
13:38:51.936 -> 28-D5-7A-4D-0B-00-00-5D: ROM ok.
13:38:51.936 -> Scratchpad Register: FD/01/4B/46/7F/FF/03/10/B6
13:38:51.936 -> Info only: Scratchpad bytes 2,3,4 (4B/46/7F): Maxim default values.
13:38:51.936 -> Scratchpad byte 5 (0xFF): ok.
13:38:51.936 -> Scratchpad byte 6 (0x03): ok.
13:38:51.936 -> Scratchpad byte 7 (0x10): ok.
13:38:51.983 -> 0x4E modifies alarm registers: ok.
13:38:51.983 -> 0x4E accepts 10 bit resolution: ok.
13:38:51.983 -> 0x4E preserves reserved bytes: ok.
13:38:51.983 -> 0x4E accepts 12 bit resolution: ok.
13:38:51.983 -> 0x4E preserves reserved bytes: ok.
13:38:52.030 -> Checking byte 6 upon temperature change: not necessary. Skipped.
13:38:52.030 -> --> Sensor responded like a genuie Maxim.
---
Утверждается, что ответ как у оригиналов от Maxim.
Теперь им дорога в гильзы и на испытательный стенд.
---
Надо от Платана датчики потестить.
Там ценник пониже.
А почему нельзя пользоваться библиотекой для bmp280
Преимуществом данной библиотеки является: возможность заменять датчики BMP180 / BMP280 без изменения скетча и схемы включения
kvic, там скетч под атмегу? Мне как раз 5 штук россыпью приехало, гравировка лазером, но сзади нет буквы P ...
там скетч под атмегу?
Да.
В ардуино нано работает.
kvic, попозжа сегодня проверю то, что пришло с али
/*
* Copyright Chris Petrich
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* File: discover_fake_DS18B20.ino
* Author: Chris Petrich
* Version: 22 Oct 2019
*
* Source: https://github.com/cpetrich/counterfeit_DS18B20/
* Documentation: https://github.com/cpetrich/counterfeit_DS18B20/
*
* This demonstration script performs authenticity tests on DS18B20 sensors by
* evaluating ROM code and Scratchpad Register. It uses documented ROM commands
* F0h and 55h and Function Commands 44h, 4Eh and BEh, only.
* It does not test the power-up state and it does not write to or test the EEPROM.
* It is INTENDED for EDUCATIONAL PURPOSES, only.
* There may be circumstances under which the sketch permanently damages one-wire
* sensors in obvious or non-obvious ways.
* (I don't think it does that to authentic Maxim sensors, but I won't guarantee
* anything. See licence text for details.)
*
*
* This script is written for Arduino. Wiring:
*
* CPU Vcc -------o------ DS18B20 Vcc
* |
* [R] <- choose resistor appropriate for supply voltage and current that the microcontroller is able to sink.
* |
* CPU pin_onewire -------o------ DS18B20 data
*
* CPU GND -------------- DS18B20 GND
*
*/
// Tested with OneWire Version 2.3
// https://github.com/PaulStoffregen/OneWire
#include "OneWire.h"
#define pin_onewire 7
#define pin_LED 13
#define Comm Serial
OneWire *ds;
void print_hex(uint8_t value) {
if (value < 16) Comm.write('0');
Comm.print(value, HEX);
}
void print_array(uint8_t *data, int n, char sep = ',') {
int idx;
for (idx=0; idx<n; idx++) {
print_hex(data[idx]);
if (idx != n-1)
Comm.write(sep);
}
}
bool read_scratchpad(uint8_t *addr, uint8_t *buff9) {
ds->reset();
ds->select(addr);
ds->write(0xBE); // read scratchpad
int idx;
for (idx=0; idx<9; idx++)
buff9[idx] = ds->read();
return 0 == OneWire::crc8(buff9, 9);
}
void setup() {
Comm.begin(115200);
Comm.println();
digitalWrite(pin_LED, HIGH);
pinMode(pin_LED, OUTPUT);
ds = new OneWire(pin_onewire);
{
// output file name without leading path
char *file = __FILE__;
int i;
for (i = strlen(file); i > 0; i--)
if ((file[i] == '\\') || (file[i] == '/')) {
i++;
break;
}
Comm.print(F("\n--- # "));
Comm.println(&file[i]);
}
digitalWrite(pin_LED, LOW);
Comm.println(F("This sketch will test DS18B20 sensors attached to"));
Comm.print(F(" pin "));
Comm.print(pin_onewire, DEC);
Comm.println(F(" for differences with Maxim Integrated-produced DS18B20"));
Comm.println(F(" using only functionality documented in the datasheet and in"));
Comm.println(F(" Maxim Application Note AN4377."));
Comm.println();
}
void loop() {
// ROM address of current sensor
uint8_t addr[8];
// buffers for scratchpad register
uint8_t buffer0[9];
uint8_t buffer1[9];
uint8_t buffer2[9];
uint8_t buffer3[9];
// flag to indicate if validation
// should be repeated at a different
// sensor temperature
bool t_ok;
ds->reset_search();
while (ds->search(addr)) {
int fake_flags = 0;
print_array(addr, 8, '-');
if (0 != OneWire::crc8(addr, 8)) {
// some fake sensors can have their ROM overwritten with
// arbitrary nonsense, so we don't expect anything good
// if the ROM doesn't check out
fake_flags += 1;
Comm.print(F(" (CRC Error -> Error.)"));
}
if ((addr[6] != 0) || (addr[5] != 0) || (addr[0] != 0x28)) {
fake_flags += 1;
Comm.print(F(": ROM does not follow expected pattern 28-xx-xx-xx-xx-00-00-crc. Error."));
} else {
Comm.print(F(": ROM ok."));
}
Comm.println();
if (!read_scratchpad(addr, buffer0)) read_scratchpad(addr, buffer0);
Comm.print(F(" Scratchpad Register: "));
print_array(buffer0, 9, '/');
if (0 != OneWire::crc8(buffer0, 9)) {
// Unlikely that a sensor will mess up the CRC of the scratchpad.
// --> Assume we're dealing with a bad connection rather than a bad
// sensor, dump data, and move on to next sensor.
Comm.println(F(" CRC Error. Check connections or replace sensor."));
continue;
}
Comm.println();
// Check content of user EEPROM. Since the EEPROM may have been programmed by the user earlier
// we do not use this as a test. Rather, we dump this as info.
Comm.print(F(" Info only: Scratchpad bytes 2,3,4 ("));
print_array(buffer0+2,3,'/');
Comm.print(F("): "));
if ((buffer0[2] != 0x4b) || (buffer0[3] != 0x46) || (buffer0[4] != 0x7f))
Comm.println(F(" not Maxim default values 4B/46/7F."));
else
Comm.println(F(" Maxim default values."));
Comm.print(F(" Scratchpad byte 5 (0x"));
print_hex(buffer0[5]);
Comm.print(F("): "));
if (buffer0[5] != 0xff) {
fake_flags += 1;
Comm.println(F(" should have been 0xFF according to datasheet. Error."));
} else {
Comm.println(F(" ok."));
}
Comm.print(F(" Scratchpad byte 6 (0x"));
print_hex(buffer0[6]);
Comm.print(F("): "));
if ( ((buffer0[6] == 0x00) || (buffer0[6] > 0x10)) || // totall wrong value
( ((buffer0[0] != 0x50) || (buffer0[1] != 0x05)) && ((buffer0[0] != 0xff) || (buffer0[1] != 0x07)) && // check for valid conversion...
(((buffer0[0] + buffer0[6]) & 0x0f) != 0x00) ) ) { //...before assessing DS18S20 compatibility.
fake_flags += 1;
Comm.println(" unexpected value. Error.");
} else
Comm.println(" ok.");
Comm.print(F(" Scratchpad byte 7 (0x"));
print_hex(buffer0[7]);
Comm.print(F("): "));
if (buffer0[7] != 0x10) {
fake_flags += 1;
Comm.println(F(" should have been 0x10 according to datasheet. Error."));
} else {
Comm.println(F(" ok."));
}
// set the resolution to 10 bit and modify alarm registers
ds->reset();
ds->select(addr);
ds->write(0x4E); // write scratchpad. MUST be followed by 3 bytes as per datasheet.
ds->write(buffer0[2] ^ 0xff);
ds->write(buffer0[3] ^ 0xff);
ds->write(0x3F);
ds->reset();
if (!read_scratchpad(addr, buffer1)) read_scratchpad(addr, buffer1);
Comm.print(F(" 0x4E modifies alarm registers: "));
if ((buffer1[2] != (buffer0[2] ^ 0xff)) || (buffer1[3] != (buffer0[3] ^ 0xff))) {
fake_flags += 1;
Comm.print(F(" cannot modify content as expected (want: "));
print_hex(buffer0[2] ^ 0xff);
Comm.write('/');
print_hex(buffer0[3] ^ 0xff);
Comm.print(F(", got: "));
print_array(buffer1+2, 2, '/');
Comm.println(F("). Error."));
} else
Comm.println(F(" ok."));
Comm.print(F(" 0x4E accepts 10 bit resolution: "));
if (buffer1[4] != 0x3f) {
fake_flags += 1;
Comm.print(F(" rejected (want: 0x3F, got: "));
print_hex(buffer1[4]);
Comm.println(F("). Error."));
} else
Comm.println(F(" ok."));
Comm.print(F(" 0x4E preserves reserved bytes: "));
if ((buffer1[5] != buffer0[5]) || (buffer1[6] != buffer0[6]) || (buffer1[7] != buffer0[7])) {
fake_flags += 1;
Comm.print(F(" no, got: "));
print_array(buffer1+5, 3, '/');
Comm.println(F(". Error."));
} else
Comm.println(F(" ok."));
// set the resolution to 12 bit
ds->reset();
ds->select(addr);
ds->write(0x4E); // write scratchpad. MUST be followed by 3 bytes as per datasheet.
ds->write(buffer0[2]);
ds->write(buffer0[3]);
ds->write(0x7f);
ds->reset();
if (!read_scratchpad(addr, buffer2)) read_scratchpad(addr, buffer2);
Comm.print(F(" 0x4E accepts 12 bit resolution: "));
if (buffer2[4] != 0x7f) {
fake_flags += 1;
Comm.print(F(" rejected (expected: 0x7F, got: "));
print_hex(buffer2[4]);
Comm.println(F("). Error."));
} else
Comm.println(F(" ok."));
Comm.print(F(" 0x4E preserves reserved bytes: "));
if ((buffer2[5] != buffer1[5]) || (buffer2[6] != buffer1[6]) || (buffer2[7] != buffer1[7])) {
fake_flags += 1;
Comm.print(F(" no, got: "));
print_array(buffer2+5, 3, '/');
Comm.println(F(". Error."));
} else
Comm.println(F(" ok."));
Comm.print(" Checking byte 6 upon temperature change: ");
if (( ((buffer2[0] == 0x50) && (buffer2[1] == 0x05)) || ((buffer2[0] == 0xff) && (buffer2[1] == 0x07)) ||
((buffer2[6] == 0x0c) && (((buffer2[0] + buffer2[6]) & 0x0f) == 0x00)) ) &&
((buffer2[6] >= 0x00) && (buffer2[6] <= 0x10)) ){
// byte 6 checked out as correct in the initial test but the test ambiguous.
// we need to check if byte 6 is consistent after temperature conversion
// We'll do a few temperature conversions in a row.
// Usually, the temperature rises slightly if we do back-to-back
// conversions.
int count = 5;
do {
count -- ;
if (count < 0)
break;
// perform temperature conversion
ds->reset();
ds->select(addr);
ds->write(0x44);
delay(750);
if (!read_scratchpad(addr, buffer3)) read_scratchpad(addr, buffer3);
} while ( ((buffer3[0] == 0x50) && (buffer3[1] == 0x05)) || ((buffer3[0] == 0xff) && (buffer3[1] == 0x07)) ||
((buffer3[6] == 0x0c) && (((buffer3[0] + buffer3[6]) & 0x0f) == 0x00)) );
if (count < 0) {
Comm.println(F(" Inconclusive. Please change sensor temperature and repeat."));
t_ok = false;
} else {
t_ok = true;
if ((buffer3[6] != 0x0c) && (((buffer3[0] + buffer3[6]) & 0x0f) == 0x00)) {
Comm.println(F(" ok."));
} else {
fake_flags += 1;
Comm.print(F(" Temperature LSB = 0x"));
print_hex(buffer3[0]);
Comm.print(F(" but byte 6 = 0x"));
print_hex(buffer3[6]);
Comm.println(F(". Error."));
}
}
} else {
Comm.println(F("not necessary. Skipped."));
t_ok = true;
}
Comm.print(F(" --> "));
if (!t_ok) {
Comm.print(F("DS18S20 counterfeit test not completed, otherwise sensor"));
} else
Comm.print(F("Sensor"));
if (fake_flags == 0) {
Comm.println(F(" responded like a genuie Maxim."));
Comm.println(F(" Not tested: EEPROM, Parasite Power, and undocumented commands."));
} else {
Comm.print(F(" appears to be counterfeit based on "));
Comm.print(fake_flags, DEC);
Comm.println(F(" deviations."));
if (fake_flags == 1) {
Comm.println(F(" The number of deviations is unexpectedly small."));
Comm.println(F(" Please see https://github.com/cpetrich/counterfeit_DS18B20/"));
Comm.println(F(" to help interpret the result."));
}
}
Comm.println();
} // done with all sensors
Comm.println(F("------------------------------------------------"));
delay(1000);
digitalWrite(pin_LED, digitalRead(pin_LED) == HIGH ? LOW : HIGH);
}
Такс.. Воткнул датчик который покупал лет 5 назад россыпью..
Резистор обязательно, без него не пашет...
28-FF-6F-B3-64-14-02-7F: ROM does not follow expected pattern 28-xx-xx-xx-xx-00-00-crc. Error.
Scratchpad Register: 50/05/55/00/7F/FF/7F/10/C2
Info only: Scratchpad bytes 2,3,4 (55/00/7F): not Maxim default values 4B/46/7F.
Scratchpad byte 5 (0xFF): ok.
Scratchpad byte 6 (0x7F): unexpected value. Error.
Scratchpad byte 7 (0x10): ok.
0x4E modifies alarm registers: ok.
0x4E accepts 10 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/3F/10. Error.
0x4E accepts 12 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/7F/10. Error.
Checking byte 6 upon temperature change: not necessary. Skipped.
--> Sensor appears to be counterfeit based on 4 deviations.
Теперь датчик из новой серии..
28-07-01-16-A8-01-3C-6D: ROM does not follow expected pattern 28-xx-xx-xx-xx-00-00-crc. Error.
Scratchpad Register: 90/01/55/05/7F/A5/81/66/4E
Info only: Scratchpad bytes 2,3,4 (55/05/7F): not Maxim default values 4B/46/7F.
Scratchpad byte 5 (0xA5): should have been 0xFF according to datasheet. Error.
Scratchpad byte 6 (0x81): unexpected value. Error.
Scratchpad byte 7 (0x66): should have been 0x10 according to datasheet. Error.
0x4E modifies alarm registers: ok.
0x4E accepts 10 bit resolution: ok.
0x4E preserves reserved bytes: ok.
0x4E accepts 12 bit resolution: ok.
0x4E preserves reserved bytes: ok.
Checking byte 6 upon temperature change: not necessary. Skipped.
--> Sensor appears to be counterfeit based on 4 deviations.
Первый датчик из тех, что сейчас работает на комплексе без качелей...
Сделаю проверку в проге и фсе! Не позволю использовать левые датчики.
Остынь
Такс... еще один из старой партии
28-FF-90-44-67-18-01-0A: ROM does not follow expected pattern 28-xx-xx-xx-xx-00-00-crc. Error.
Scratchpad Register: 50/05/4B/46/7F/FF/7F/10/FF
Info only: Scratchpad bytes 2,3,4 (4B/46/7F): Maxim default values.
Scratchpad byte 5 (0xFF): ok.
Scratchpad byte 6 (0x7F): unexpected value. Error.
Scratchpad byte 7 (0x10): ok.
0x4E modifies alarm registers: ok.
0x4E accepts 10 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/3F/10. Error.
0x4E accepts 12 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/7F/10. Error.
Checking byte 6 upon temperature change: not necessary. Skipped.
--> Sensor appears to be counterfeit based on 4 deviations.
И еще
28-FF-07-14-66-18-03-23: ROM does not follow expected pattern 28-xx-xx-xx-xx-00-00-crc. Error.
Scratchpad Register: 50/05/4B/46/7F/FF/7F/10/FF
Info only: Scratchpad bytes 2,3,4 (4B/46/7F): Maxim default values.
Scratchpad byte 5 (0xFF): ok.
Scratchpad byte 6 (0x7F): unexpected value. Error.
Scratchpad byte 7 (0x10): ok.
0x4E modifies alarm registers: ok.
0x4E accepts 10 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/3F/10. Error.
0x4E accepts 12 bit resolution: ok.
0x4E preserves reserved bytes: no, got: FF/7F/10. Error.
Checking byte 6 upon temperature change: not necessary. Skipped.
--> Sensor appears to be counterfeit based on 4 deviations.
Отличия есть... максимовский немного крупней по габаритам корпуса и текст написан более крупными буквами
Остынь
d.styler, прикол в том, что у меня не оригинальный датчик вполне нормально работает, так что ты не горячись
Ну а у кого глючит - сперва проверяют. Вон скетч специально выше сюда кинул..
так что ты не горячись
Ну я же не Кавказский джигит, чего мне горячиться?
что бы не вваливаться в загрузчик при старте?
Да.
Info only: Scratchpad bytes 2,3,4 (55/00/7F): not Maxim default values 4B/46/7F.
2 и 3 байты - тревожная уставка или данные пользователя. Могут принимать любые значения.
4 байт - конфигурационный.
Эти три байта корректны, просто установлены не по дефолту.
5, 6 и 7 - зарезервированные. Документированных функций не несут.
Так что ничего криминального не вижу.
почему тмас на тех же датчиках и разъёмах показывает стабильную температуру, в тмвеб ежесекундно меняет туда сюда
Питания маловато. У DS18B20 минимум по даташиту 3В, а у модуля на выходе - хорошо, если 3,3В. Маловат запас.
И в Ардуино +5В, а тут +3В.
Я пробовал питать датчики от отдельных 5В - вообще не работало. Хотя, может я что-то не так сделал.
JohnJohnov, я не парюсь, у меня все работает нормально.
Хотя, может я что-то не так сделал.
Без схемы включения сложно сказать.
У меня на тмасе работает стабильно, на тмвебе редко-редко проскакивают сталактиты. Термометры из разных партий, брал россыпью на алишке, подключение проводом 0,2мм2 10м (почти на пределе).
Мануал по термометрам на русском, если кому вдруг интересно.
Питания маловато. У DS18B20 минимум по даташиту 3В, а у модуля на выходе - хорошо, если 3,3В. Маловат запас.
Может есть смысл запитать датчики отдельно от +5В?
на тмвебе редко-редко проскакивают сталактиты.
странно - я ж в последней прошивке сделл проверку СРС
странно - я ж в последней прошивке сделл проверку СРС
На последней версии нет пиков. Было даже как-то отваливание в режиме AP и браузер продолжал рисовать прямую, но свечей не было.
Может есть смысл запитать датчики отдельно от +5В?
Ага!
В даташите, который выложил, есть схема подключения, на седьмой странице.
странно - я ж в последней прошивке сделл проверку СРС
Я последнюю версию не заливал. Тмвеб погонял, но пользую тмас. Спасибо тебе ещё раз.
Было даже как-то отваливание в режиме AP и браузер продолжал рисовать прямую, но свечей не было.
Вот из-за этого, в числе прочего, не использую тмвеб. Есть вероятность, что датчик отвалится, а я буду преспокойненько наблюдать идеальную спиртовую полку.
с 421 по 440 из 1 367