Официальный сайт компании Arduino по адресу arduino.cc
analogRead "ломает" ModBus
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 18/02/2020 - 00:17
#include <ModbusRtu.h> // assign the Arduino pin that must be connected to RE-DE RS485 transceiver #define TXEN 17 uint16_t au16data[] = {0,0}; Modbus slave(1, Serial1, TXEN); void setup() { Serial1.begin( 115200 ); // baud-rate at 115200 slave.start(); } void loop() { slave.poll(au16data, 2); au16data[REG_TEMPER] = analogRead(A0); // если эта строчка есть, то обмен по ModBus ломается }
Всем привет.
Похоже, забуксовал на граблях:
Есть скетч, который использует ModBus. Его задача получить значение с определенного канала АЦП и положить в регистр ModBus. Сам Modbus работает безупречно, но лишь до первого использования функции analogRead. Значения читаются, но после этого слей не отвечает мастеру. Осцилла, к сожалению, под руками нет. Может быть есть какой-то очевидный косяк?
Arduino Micro, если это важно...
Что за пин такой - 17?
REG_TEMPER откуда вылезло?
Что за пин такой - 17?
REG_TEMPER откуда вылезло?
Да я код пообрезал...
REG_TEMPER == 0, 17ый пин - кхм... 17ый порт...
Оно работает... Но до того, как я вызываю analogRead.
17й порт это еще хуже.
17й порт это еще хуже.
поменял, не помогло...
Целиком...
А с каких пор нулевой пин стал аналоговым?
А с каких пор нулевой пин стал аналоговым?
A0, конечно.
но это ничего не меняет.
Так "модбас ломается" только от analogRead в строке 176 или от любого, например в строке 164?
Если gettemp просто вызывать в лупе, но не сохранять в массиве.
А с каких пор нулевой пин стал аналоговым?
Да всю жизнь был! Как то слабовато, дядя. Зато одни понты.
А с каких пор нулевой пин стал аналоговым?
Да всю жизнь был!
Никада нулевой пин аналоговым не был. Был и есть четырнаццатый, он же A0.
Мы вещаем за то, что это
164
int16_t value = analogRead(0);
неправильно
А с каких пор нулевой пин стал аналоговым?
Да всю жизнь был!
Никада нулевой пин аналоговым не был. Был и есть четырнаццатый, он же A0.
Мы вещаем за то, что это
164
int16_t value = analogRead(0);
неправильно
Дед, 0 - это не пин, а канал АЦП для analogRead. А0 == 0.
ну лана, ошибся я, ну дак я и не настаиваю, зачем я буду спорить с умными людями? :)
Оправдываясь, ориентировался на ватэто, там нигде за 0 ничего не сказано, только за "A0 to A5 on most boards"
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
Вызов analogRead ломает модбас вне зависимости от аргументов и сохраняем ли мы возвращаемое значение или нет.
Если вызывать в setup - тоже самое.
Мой косяк. Причём аппаратный! Был коротыш между 3.3В и AREF.