На основе блоков от Boroda из предыдущего поста сделал блок отправки переменной и получения переменной. Скорость примерно в 10 раз больше, чем у исходных блоков, также убран служебный бит, блоки не совместимы с протоколом 2262. Позволяют передавать переменную в 24 бита от одной Ардуины к другой, ошибок нет даже при значительном отклонении частоты, можно использовать внутреннее тактирование (без кварца).
В экспериментальных блоках:
В передающем пока жёсткая привязка к пину 13, так как используются конструкции типа PORTB|=_BV(PB5) и PORTB &=~_BV(PB5) для увеличения скорости, но в принципе можно использовать ЛЮБОЙ цифровой выход. Подаваемое на вход число ULong не более 16777215 (24 бит единиц), так же легко можно увеличить до 32 бит редактированием обоих блоков.
В приёмном блоке используется пин 2 или пин 3 (в настройках блока), так как задействованы аппаратные прерывания.
Прикладываю два проекта для опытов- в одну ардуину загружаете ...TX-02 (непрерывная передача заданной переменной с пина 13), в другую ...Rx-02 (приём на пин 2, при правильных данных светится светик на 13 пине, полученную переменную пересылает в КОМпорт на скорости 38400 для наглядности). Ну и пин 13 от передающей соединяете с пином 2 принимающей.
Хотелось бы ещё модифицировать блоки для возможности менять передающий пин и количество передаваемых бит, а в идеале чтоб на входы передающего подавалось и с выходов принимающего снималось произвольное количество байт, с передающим у меня получается, с приёмным сам не могу. Технически без ошибок возможна передача десятка байт за одну передачу, но при нынешней реализации максимум 4 байта (ULong). Время посылки 200 мкс*количество бит (сейчас 200*24=4800 мкс=4,8 мс). То есть без проблем можно обновлять данные больше 100 раз в секунду.
Sancho, посмотрите, пожалуйста.
Прошу протестировать и высказать своё мнение. Очень хотелось бы увидеть циклограмму передачи с таймингами, может кто снимет анализатором?
И, кстати, может кто подскажет по проблемам, упомянутым в предыдущем посте?