Доброе время суток эксперты
у меня проблема, не могу понять где делаю не так помогите, привожу кон скетча
#include <ModbusMaster.h> //библиотека для ModbusMaster
#include <SoftwareSerial.h>
#define MAX485_DE 2
#define MAX485_RE_NEG 3
ModbusMaster node; //объект node класса ModbusMaster
SoftwareSerial Serial_2(6, 7); // RX, TX
void setup() {
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
Serial_2.begin(115200); // стандартный для модбас для передачи приема
node.begin(1, Serial_2); //Slave ID (адрес ведомого) - 1
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.begin(9600);
}
void loop() {
ReadTempMinMax(); //считывание мин и макс функция
}
void ReadTempMinMax() {
while (1) {
uint8_t result = node.readHoldingRegisters(0x000C,2);
delay(100);
if (result == node.ku8MBSuccess)
{
Serial.print("OK - ");
Serial.println(result);
Serial.println(node.getResponseBuffer(0));
Serial.println(node.getResponseBuffer(1));
delay(3000);
break;
}
else
{
Serial.print("no - ");
Serial.println(result);
delay(500);
}
}
}
Пытаюсь считать 2 регистра, и вывести в сериал, в итоге первые значения result==224, далее после 10-50 транзакций цикла (по разному бывает, может считать через 40 запросов) считывает нормально и выдает правильное значение регистров, соответственно result==0. Подскажите пож. в чем проблема что не так считываю, почему такие провалы??? Не могу понять. Пробовал менять скоростя сериал на ведомом и ведущем не помогает, да много чего пробовал так и не пойму. Подскажите куда лезть.
В качестве слейва панель ИП320 от Овна, значения ввожу прямо с панели, запись происходит без проблем и задержек.
Мастер Ардуино Nano
Кагда считаю слейв программой Simple Modbus Master, считывает нормально с первого раза без задержек, значения соотвествуют заданным в слейве, проблем нет, то есть панель ип320 исправна и работает.
Спасибо уважаемые эксперты за советы, но даже не знаю что сказать, полез ковырять Serial, переключился на встроенный (SoftSerial отключил), не заработало.
Поставил rx и tx на 2 и 3 ногу (SoftSerial подключил), MAX485_DE на 7, MAX485_RE_NEG на 6, и о всё работает.
Спасибо всем, завтра верну все на место, буду смотреть и искать косяк. Потом отпишусь
Кстати попробовал на всех частотах от 9600 до 115200, работает сбоев нет иногда проскакивать ошибка контрольной суммы 227, но очень редко.
Всем доброго времени суток, вернул все на место как было изначально не заработало, переделал назад в последний вариант опять не работает, обратил внимание что греется камень, при том палец с трудом терпит, плюнул и выбросил, под руками валялась stm32 переписал скетч (в моем примере только часть кода), все заработало в иделе на всех частотах, видно коротнул где то нано и не заметил. Теперь другая проблема, сразу перестал работать DS18B20, выдает 0,00 или -0,06, пробовал на stm32 и на ардуине уно, не подскажите какое сопротивление между контактами датчика? хотя мне кажется его на свалку надо отправить. Спасибо
И еще уважаемые эксперты, в stm32 нет EEPROM, а он очень нужен, может посоветуете решение, пока я заказал с алиэкспрес 24C256 I2C EEPROM, есть опыт работы с ним??? может кто поделиться опытом, спасибо
На одном буржуйском сайте вычитал, предлагают такую схему работы с ЕЕПРОМ, например нам надо писать 500б , берем ЕЕПРОМ на 1кл, используем первые 500 байт и всегда проверяем исправность ячеек при записи, если есть косяк, битые ячейки, то переходим на вторые 500 байт, как думаете уважаемые эксперты, рабочая идея??? скетча там не приводят просто идею описывают.
Чушь собачья. Хотя, в И-нете еще и не такое можно найти…
Люди (и, кстати, достаточно образованные) уже не первое столетие разрабатывают математику для детектирования и исправления ошибок, а тут - нате, берем первые 500 байт, а потом - вторые. Детский сад.
Ну я поэтому у Вас и спросил, буржуи нас обмануть хотят, короче это происки врагов, как пел великий Высоцкий Владимир Семенович, идею выбросил из головы, спасибо за ответ