Модуль обратной связи DCC (токовый) для LocoNet

Вопросы и ответы связанные с цифровым управлением, аналоговой автоматикой и их элементами
Сообщение
Автор
Аватара пользователя
Engineer_Keen
Сообщения: 313
Зарегистрирован: Ср фев 24, 2010 11:15 am
Имя: Василий
Откуда: Москва
Поблагодарили: 5 раз

Re: Модуль обратной связи DCC (токовый) для LocoNet

#181 Непрочитанное сообщение Engineer_Keen »

Кстати да, в одну, если оптопара не с двумя светодиодами... Поэтому на DCC реагирует, а на аналоге так просто не получится.

Аватара пользователя
Onegin
Модератор
Сообщения: 4621
Зарегистрирован: Пт мар 14, 2008 12:02 pm
Откуда: Нижний Тагил

Re: Модуль обратной связи DCC (токовый) для LocoNet

#182 Непрочитанное сообщение Onegin »

Оптопара реагирует на одну полярность. Достаточно перед ней разместить диодный мост, чтобы при наличии на входе любого напряжения, на входе в оптопару была именно эта полярность.
VBLO Digital Research.

shalex
Сообщения: 285
Зарегистрирован: Сб июн 06, 2015 3:26 pm
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Re: Модуль обратной связи DCC (токовый) для LocoNet

#183 Непрочитанное сообщение shalex »

Пришлось немного допиливать скетч, т.к. обнаружилась проблема при увеличении кол-ва датчиков: при одновременной отправке статусов по примерно 100 датчикам часть пакетов терялось (включение питания на рельсах). Терялось немного, 1-2 датчика, но и это критично.

В качестве простого решения переделал ф-ию отправки статуса.
[Оффтопик]
void sendSensor1 (int addr, boolean state)
{
LN_STATUS ret;
ret = LocoNet.reportSensor(addr, state);
Serial.print("SEND addr:");
Serial.print(addr);
Serial.print(" state:");
Serial.print(state);
Serial.print("try:");
Serial.print(tries);
Serial.print("ret:");
Serial.println(ret);
}

Стало:
#define SEND_TRIES 4
#define SEND_TIMEOUT 50
#define SEND_TIMEOUT_RAND 5


void sendSensor1 (int addr, boolean state)
{
byte tries = 0;
LN_STATUS ret;
do {
tries ++;
ret = LocoNet.reportSensor(addr, state);
if (ret != LN_DONE) delay(SEND_TIMEOUT + random(SEND_TIMEOUT_RAND + 1));
Serial.print("SEND addr:");
Serial.print(addr);
Serial.print(" state:");
Serial.print(state);
Serial.print("try:");
Serial.print(tries);
Serial.print("ret:");
Serial.println(ret);

} while(tries <= SEND_TRIES && ret != LN_DONE);
if (ret != LN_DONE) Serial.println("send FAILED");
}

shalex
Сообщения: 285
Зарегистрирован: Сб июн 06, 2015 3:26 pm
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Re: Модуль обратной связи DCC (токовый) для LocoNet

#184 Непрочитанное сообщение shalex »

Найден более дешевый и компактный вариант диодного моста и оптопары (вместо MCT6 и 1N4004):

- DB107
- EL357

Ответить

Вернуться в «Цифровое управление, Аналоговая автоматика и их элементы»