Всем привет. Купил плату max31865, да вот только она не от PlayingWithFusion, а другая. Подойдет ли к ней код от PlayingWithFusion? Слевая моя плата, справа от PlayingWithFusion. Код (C++): #include <SPI.h> #include <MAX31865.h> #define RTD_CS_PIN 10 MAX31865_RTD rtd( MAX31865_RTD::RTD_PT100, RTD_CS_PIN ); void setup() { Serial.begin( 115200 ); /* Initialize SPI communication. */ SPI.begin( ); SPI.setClockDivider( SPI_CLOCK_DIV16 ); SPI.setDataMode( SPI_MODE3 ); /* Allow the MAX31865 to warm up. */ delay( 100 ); /* Configure: V_BIAS enabled Auto-conversion 1-shot disabled 3-wire enabled Fault detection: automatic delay Fault status: auto-clear 50 Hz filter Low threshold: 0x0000 High threshold: 0x7fff */ rtd.configure( true, true, false, true, MAX31865_FAULT_DETECTION_NONE, true, true, 0x0000, 0x7fff ); } void loop() { rtd.read_all( ); if( rtd.status( ) == 0 ) { double temperature = rtd.temperature( ); Serial.print( " T = "); Serial.print( temperature, 1 ); Serial.println(" deg C" ); } else { Serial.print( "RTD fault register: " ); Serial.print( rtd.status( ) ); Serial.print( ": " ); if( rtd.status( ) & MAX31865_FAULT_HIGH_THRESHOLD ) { Serial.println( "RTD high threshold exceeded" ); } else if( rtd.status( ) & MAX31865_FAULT_LOW_THRESHOLD ) { Serial.println( "RTD low threshold exceeded" ); } else if( rtd.status( ) & MAX31865_FAULT_REFIN ) { Serial.println( "REFIN- > 0.85 x V_BIAS" ); } else if( rtd.status( ) & MAX31865_FAULT_REFIN_FORCE ) { Serial.println( "REFIN- < 0.85 x V_BIAS, FORCE- open" ); } else if( rtd.status( ) & MAX31865_FAULT_RTDIN_FORCE ) { Serial.println( "RTDIN- < 0.85 x V_BIAS, FORCE- open" ); } else if( rtd.status( ) & MAX31865_FAULT_VOLTAGE ) { Serial.println( "Overvoltage/undervoltage fault"); } else { Serial.println( "Unknown fault; check connection" ); } } delay( 3000 ); }
а что есть какая-то разница между чипом MAX31865 с PlayingWithFusion и той китайской подделкой? думаю чип один и тот же. значит они оба подчиняются мануалу от компании MAXIM. значит и код должен подойти.
Начал использовать плату с pt100 и наткнулся на нюанс: ставлю 2 стакана с комнатной и горячей водой. Окунаю гильзу pt100 в горячую - показывает 66 градусов, окунаю в холодную и только спустя 7-9 секунд он выдает точную температуру холодной воды. Окунаю снова в горячую и опять - спустя 7-9 секунд он выдает точную температуру горячей воды. Я заказывал эту плату (max31865) только изза скорости измерения температуры. А скорость измерения не отличается от обычного Dallas 18b20. RTD pt100 заказывал на Aliexpress http://ru.aliexpress.com/item/Three...e-Shipping/2039115279.html?detailNewVersion=1 это RTD такой хреновый, что так долго прогревается или так и должно быть? Просто, в чем смысл высокоскоростного измерения температуры если изза RTD он прогревается в среднем 7 сек.
датчик DS18B20 измерение делает менее секунды .. но это время регулируется его точностью .. чем точнее тем дольше он определяет температуру .. плюс надо ждать пока капсула прогреется .. отсюда и время в пределах секунды двух на одно измерение .. в принципе это нормально .. синхронно ни один датчик не измеряет температуру .. особенно цифровой .. всегда будет лаг во времени на обработку результатов в миллисекундах - секундах
Получается по сути, что ds1820 за 200 рублей, что max31865 За 2 тыщи рублей работают одинаково? Что то мне кажется, вы ошибаетесь. Лаг во времени на обработку? Ну сколько времени займет обработка на МК? доли секунды. Мне кажется дела в капсуле. Дорогостоящая - быстрее прогревается. И, например, вместо 7 секунд дорогостояая будет за 1-2 сек прогреватся. Или я все таки не прав и ds18b20 ничем не отличается от времени преобразования температуры от max31865?
причём тут обработка на МК? МК получает уже готовое значение с преобразователя MAX31865. DS18B20 c 12бит точньстью если не ошибаюсь обрабатывает и выдаёт температуру примерно за 700мсек. вот тут и вопрос за какое время делает обработку измерений и выдачу числа температуры чип MAX31865? а вообще надо смотреть в монитор ком порта что там пишется .. согласно скопипастенного кода и изменения на 100мсек задержку в монитор ком порта должно каждые 100мсек выплёвываться или температура или если статус обнулился или другое отладочное сообщение .. так и можно подсчитать сколько проходит времени между статусом ==1 и статусом ==0 .. это и будет время затраченное преобразователем на измерение сопротивление ПТ100 и преобразование его в число так же не надо думать что если переложить датчик из стакана в стакан то мгновенно покажет температуру среды в стакане .. датчик лишь изменяет сопротивление остывая или нагреваясь на что нужно время соответственно будет видно изменение температуры от начальное и через пару таких изменений пока не прогреется капсула до температуры среды он не покажет ожидаемую температуру среды .. а будет показывать лишь температуру прогрева капсулы в данный момент запроса температуры так же не надо думать что раз есть ПТ100 датчик и преобразователь за 2 тыщи то это круто и он должен работать шустро .. это не так .. DS18B20 имеет диапазон температур всего -55 - +125 градусов по цельсию в то время как ПТ100 датчик может изменять сопротивление в пределах от -50 до +600 градусов в зависимости от типоисполнения облицовки сенсора .. другими словами сначала надо было определиться какой диапазон температур измерять .. потом уже датчик выбирать и преобразователь к нему .. и раз связались с ПТ100, то будьте так любезны для начала прочитать про этот тип датчика .. потом прочитать про этот преобразователь для этого датчика https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf .. потом изучить работу библиотеки для этого преобразователя .. и уже только потом задавать вопросы про время потому как задержки могут стоять и в библиотеке и желательно ещё бы вам научиться пользоваться поиском .. потому как вот в этом видео вообще не используется преобразователь для RTD PT100 и объясняется как датчик подключить к ардуино без всяких преобразователей, библиотек и тому подобной фигни
Добрый день! Прошу помощи в подключении PT100, через MAX31865 к ардуино. На данном этапе мне нужно понять, как соединить все вместе. И, по возможности, ссылку на библиотеку для MAX. PT100 имеет 3 вывода. Буду крайне благодарен за советы.
Гуглу спасибо, я просто поработал посредником между вами и им, раз вам было недосуг ввести парочку ключевых слов и ткнуть в первую ссылку. Понимаю, занятый человек, все дела...
Добрый день! В продолжении темы MAX 31865 - PT 100. Возникает проблема. прошу помощи в решении. Основываясь на ссылке с сайта adafruit, проделал необходимые шаги в подготовке MAX 31865 - разрезал/запаял перемычки, что бы активировать 3х проводной режим подключения PT100. Собрал все вместе, как указано на сайте. (картинка ниже) подключил библиотеку <Adafruit_MAX31865.h> (в скетче, она не подсветилась цветом, как подсвечиваются другие библиотеки - не знаю, что это означает. В списке библиотек статус "installed" есть) Загрузил скетч из "Examples". Приведен ниже. После запуска, программа выдает в монитор порта от 1 до 3 измерений (на первый взгляд - точных), а затем начинает в строчку генерить псевдографику. Вывести из этого состояния ее может только перезаливка скетча. выключение питания не помогает. (после включения, программа вновь молотит в строчку псевдографику). Пробовал отключать питание от MAX. Результат тот же 2-3 результата измерений с "нулями". затем псевдографика. Пробовал менять плату Ардуино - тот же эффект. Скажите плиз, что не так? Заранее благодарен, Николай #include <Adafruit_MAX31865.h> // Use software SPI: CS, DI, DO, CLK Adafruit_MAX31865 max = Adafruit_MAX31865(7, 8, 9, 10); // use hardware SPI, just pass in the CS pin //Adafruit_MAX31865 max = Adafruit_MAX31865(10); // The value of the Rref resistor. Use 430.0! #define RREF 430.0 void setup() { Serial.begin(115200); Serial.println("Adafruit MAX31865 PT100 Sensor Test!"); max.begin(MAX31865_3WIRE); // set to 2WIRE or 4WIRE as necessary } void loop() { uint16_t rtd = max.readRTD(); Serial.print("RTD value: "); Serial.println(rtd); float ratio = rtd; ratio /= 32768; Serial.print("Ratio = "); Serial.println(ratio,8); Serial.print("Resistance = "); Serial.println(RREF*ratio,8); Serial.print("Temperature = "); Serial.println(max.temperature(100, RREF)); delay(1000); }
Пожалуйста, ПОЛНЫЙ скетч в студию. И вставлять его надо правильно - есть кнопочка "<>" для вставки кода.
Век живи - век учись! Приведенный код - сокращенный вариант примера из библиотеки, из которого я руками выкинул шапку и часть относящуюся к обработке различных ошибок, что бы сделать его более читаем. "Обрезанный результат" и полный дают один и тот же эффект. Ниже привожу полный вариант скетча: И большое спасибо Вам за участие - боюсь один я не справлюсь... Код (C++): /*************************************************** This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865 Designed specifically to work with the Adafruit RTD Sensor ----> https://www.adafruit.com/products/3328 This sensor uses SPI to communicate, 4 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include <Adafruit_MAX31865.h> // Use software SPI: CS, DI, DO, CLK Adafruit_MAX31865 max = Adafruit_MAX31865(7, 8, 9, 10); // use hardware SPI, just pass in the CS pin //Adafruit_MAX31865 max = Adafruit_MAX31865(10); // The value of the Rref resistor. Use 430.0! #define RREF 430.0 void setup() { Serial.begin(115200); Serial.println("Adafruit MAX31865 PT100 Sensor Test!"); max.begin(MAX31865_3WIRE); // set to 2WIRE or 4WIRE as necessary } void loop() { uint16_t rtd = max.readRTD(); Serial.print("RTD value: "); Serial.println(rtd); float ratio = rtd; ratio /= 32768; Serial.print("Ratio = "); Serial.println(ratio,8); Serial.print("Resistance = "); Serial.println(RREF*ratio,8); Serial.print("Temperature = "); Serial.println(max.temperature(100, RREF)); // Check and print any faults uint8_t fault = max.readFault(); if (fault) { Serial.print("Fault 0x"); Serial.println(fault, HEX); if (fault & MAX31865_FAULT_HIGHTHRESH) { Serial.println("RTD High Threshold"); } if (fault & MAX31865_FAULT_LOWTHRESH) { Serial.println("RTD Low Threshold"); } if (fault & MAX31865_FAULT_REFINLOW) { Serial.println("REFIN- > 0.85 x Bias"); } if (fault & MAX31865_FAULT_REFINHIGH) { Serial.println("REFIN- < 0.85 x Bias - FORCE- open"); } if (fault & MAX31865_FAULT_RTDINLOW) { Serial.println("RTDIN- < 0.85 x Bias - FORCE- open"); } if (fault & MAX31865_FAULT_OVUV) { Serial.println("Under/Over voltage"); } max.clearFault(); } Serial.println(); delay(1000); }
На аппаратном SPI пробовали? И да, заметил в вашем предыдущем посте, в котором скрины приведены: в скетче указана скорость Serial 115200, а на скрине монитора порта - вижу скорость 9600. Это чего такое? Давайте договоримся, что информацию надо предоставлять комплексно и системно, чтобы никто не гадал, что вы там делаете и откуда берутся такие вот разногласия по скоростям тех же портов. А то не знаешь, на что ориентироваться - то ли лыжи не едут, то ли...
Договорились! Большое Вам спасибо- погарел на ерунде, скорость порта была проблемой! Поставил 9600 - все заработало. Буду продолжать . Следующий шаг- подключение 3х датчиков и вывод на lcd.