Страница 6 из 12

Re: Простейший DCC декодер на Arduino

Добавлено: Ср мар 09, 2016 10:04 am
Engineer_Keen
Ну тогда тут еще запас по быстродействию приличный.

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 12:56 am
Василий
Коллеги, читаю стандарт и не понимаю...

в S-9.2.1 есть такое место:

A: Address Partitions
The first data byte of an Extended Packet Format packet contains the primary address. In order to allow for
different types of decoders this primary address is subdivided into fixed partitions as follows.
Address 00000000 (0): Broadcast address
Addresses 00000001-01111111 (1-127)(inclusive): Multi-Function decoders with 7 bit addresses
Addresses 10000000-10111111 (128-191)(inclusive): Basic Accessory Decoders with 9 bit addresses and Extended Accessory Decoders with 11-bit addresses
Addresses 11000000-11100111 (192-231)(inclusive): Multi Function Decoders with 14 bit addresses
45 Addresses 11101000-11111110 (232-254)(inclusive): Reserved for Future Use
Address 11111111 (255): Idle Packet

Если я правильно понимаю, то локомотив не может иметь короткие адреса со 128 по 191. Но, Мультимыша легко назначает адрес из этого диапазона и шлет его обычным пакетом как для лока.
WTF? :)

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 4:42 am
Федюнь
А разве локомотивы могут иметь адрес больше 127?
Так вроде и написано : Basic Accessory Decoders with 9 bit addresses and Extended Accessory Decoders with 11-bit addresses
Accessory Decoders

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 11:34 am
Василий
Собственно я об этом же. Мышь позволяет.

Нет, на самом деле несмотря на пересечение адресов, аксессуарники с локомотивными не пересекаются, так как у них формат пакета разный. Но тогда непонятен смысл этой таблицы.

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 12:09 pm
Федюнь
Ну ка же не понятен? Всё по полкам.
с 1-127 Локдекодеры
с 128-191 Аксесуарные
с 192-231 Функциональные
45 с 232-254 Резервные
Василий,ты ли это?)))) Что то на тебя не похоже)))

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 2:26 pm
Василий
Я это, я :) Таблицу я прекрасно понимаю. Меня в тупик поставило несоответствие поведения рокомышки, тому что написано в стандарте.

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 3:31 pm
Федюнь
Не знаю как все, но я ешё понял, что лок декодер может иметь адрес более 127.Но при этом надо соблюдать битность,которая написана в таблице.Или я не так понял?

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 3:51 pm
И.К.С.
Федюнь писал(а):Ну ка же не понятен? Всё по полкам.
нет Федя. более менее стройно и понятно было при использовании только двухбайтных базовых пакетов, не считая преамбулы и контрольного байта.
"General Packet Format" http://nmra.org/sites/default/files/s-92-2004-07.pdf
но! это только 127 локомотивных и 512 аксессуарных адресов. и на локе только 14 градаций скорости и одна функция (прожектор), или 28 градаций скорости, но без света и это все сразу в одном пакете.
Поэтому и придумали "Extended Packet Formats" длиной от трёх до нескольких байт http://nmra.org/sites/default/files/s-9.2.1_2012_07.pdf
И главное отличие от базовых пакетов: отдельные для изменения скорости и отдельные для изменения дополнительных функций, всего до трёх десятков, а не один прожектор.
Федюнь писал(а):А разве локомотивы могут иметь адрес больше 127?
Федя могут, длинный адрес это 14 бит, в теории: от 1 до 16384, но реально до 9999 или даже еще меньше.
и кстати правильно читать вот так:
A: деление адресного пространства
Address 00000000 (0): броадкастовый адрес - для всех локомотивных декодеров
Addresses 00000001-01111111 (1-127)(включая): Локомотивные декодеры с коротким адресом 7 бит (базовые пакеты) адреса в чистом виде
Addresses 10000000-10111111 (128-191)(включая): аксессуарные декодеры с коротким адресом 9 бит, (базовые пакеты) адреса от 1 до 512 либо аксессуарные декодеры с длинным адресом 11 бит, адреса от 1 до 2048 (расширенные пакеты)
Addresses 11000000-11100111 (192-231)(включая): Локомотивные декодеры с длинным адресом 14 бит, адреса от 1 до 9999 или 16384 (расширенные пакеты)
45 Addresses 11101000-11111110 (232-254)(включая): зарезервировано (ИМХО никогда не будет) ;)
Address 11111111 (255): Пакет ожидания
тут кстати цифры (128-191) и (192-231) это не адреса в чистом виде, а старшие биты адресов! недостающие младшие биты во втором байте вместо части данных.

Василий писал(а):Коллеги, читаю стандарт и не понимаю...
Вася "нутыжепрограмист" ;) должен понимать, что стандарт, задача от заказчика и реализация программы совершенно разные вещи ;)

Там писец как напутано, и есть варианты, когда можно толковать в свою пользу.
Василий писал(а):Если я правильно понимаю, то локомотив не может иметь короткие адреса со 128 по 191. Но, Мультимыша легко назначает адрес из этого диапазона и шлет его обычным пакетом как для лока.
WTF? :)
Давай по порядку:
1. ограничений при записи в любую CV со стороны станции нет, то есть в CV 1 можно прописать от 0 до 255, если конечно декодер примет это значение.
2. Раньше экономили каждый бит, и были декодеры у которых ограничение было до 31, до 63, до 99 и до 127.
Но что то не попался ни один в который можно прописать больше. и опять же режимы SS 14 и 28.
3. Длинный адрес это 14 бит: два бита всегда ="11" и старшая часть адреса = 6 адресных бит в CV17 и младшая часть адреса = 8 бит в CV18, а вот здесь есть нюанс: длинные адреса начинаются не с 192, а тоже с единицы, так, что дырок нет! так как значение в CV18 = от 0 до 255. и главное длинный адрес это расширенный пакет и обычно режим SS 128, нет?

Так что мыша должна посылать расширенные пакеты и проблем не должно быть.
70. The first address byte contains 8 bits of address information. If the most significant bits of the address are "11"and the remaining bits are not “111111”, then a second address by te must immediately follow. This second address byte will then contain an additional 8 bits of address data. When 2 bytes of address information are present they are separated by a "0" bit. The most significant bit of two byte addresses is bit 5 of the first address byte. (bits #6 and #7 having the value of "1" in this case.

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 8:26 pm
Василий
Костя, я все понимаю, да :) Дело в том, что если я ничего не напутал (дело-то было к часу ночи), то мультимыша шлет пакеты с адресами от 128 до 191 именно basic пакетами.
Сегодня вроде более вменяем, точно проверю как на самом деле :)

А еще я пытался понять как устанавливаются значения CV17-18. Сначала сходу реализовал как младший байт адреса в CV18, и 6 бит старшего байта адреса в CV17 (то есть за вычетом двух единичек в 6-7 битах). Это работает :) Но потом полез смотреть инструкцию к локпилоту и втупил в схему назначения длинного адреса :)

В общем нужно все еще раз внимательно перепроверить и пересмотреть. Занимательно все это.

Re: Простейший DCC декодер на Arduino

Добавлено: Сб мар 12, 2016 11:53 pm
Василий
Все еще интереснее. Мышка шлет baseline пакеты для коротких адресов до 99 включительно. Для адреса 100 и выше - Extended Packet Format.

Во как оказывается...