diod.club » Проектирование и дебаг » Программирование » Выбор программного интерфейса

Страниц (1): [1]
 

1. Буратино - 04 Октября, 2015 - 19:14:57 - перейти к сообщению
В процессе разработки простенького устройства для автоматизации курятника остался свободным один пин на АТМеге32 (PB0 (SS/PCINT0). На нем есть возможность обрабатывать внешнее прерывание.
Вдруг (у меня так бывает частенько) возникает насущная необходимость в минимальные сроки и с минимальными потерями ресурсов принимать информацию на контроллер с удаленного скажем так датчика. Никаких требований по скорости и надежности нет.
В идеале еще бы и передавать данные.
Данные это пакет из 2-3 байт на контроллер ну и если че от контроллера к датчику.

Всегда работал с UART да еще и аппаратным да еще и на прерываниях (спер где то в свое время и по сей день пользуюсь решением), SPI аппаратно и в обе стороны ну и банально пинами дергал. Все.

Что бы такое правильное выбрать/посмотреть из протоколов/интерфейсов для реализации данного функционала?
СпасибО!

PS
пару пинов(но не аппаратных, с регистров сдвиговых) и таймерочек найдем думаю свободный если чеУлыбка
2. koyodza - 04 Октября, 2015 - 19:52:51 - перейти к сообщению
Если нужно быстро, то проще всего организовать синхронный интерфейс типа SPI, но понадобится хотя бы один (лучше два) дополнительный сигнал для тактирования. Сами данные можно сделать двунаправленными.
(Добавление)
Но я обычно стараюсь решать подобные задачи более комплексно если это возможно, а для этого надо знать что еще есть в системе и какого характера сигналы хотим вводить и выводить. Выше говорилось:
Буратино пишет:
пару пинов(но не аппаратных, с регистров сдвиговых) и таймерочек найдем думаю свободный

значит в системе уже присутствуют сдвиговые регистры (предположу что-то типа 74164 / 165 / 595). Почему бы просто не удлинить их?
3. Буратино - 04 Октября, 2015 - 20:12:31 - перейти к сообщению
Расстояние между контроллером и датчиком(и) десятками или даже сотнями метров измеряется.

Еще раз (самому понятнее будет): есть контроллер с одним свободным аппаратным пином и парочкой не аппаратных пинов с регистров (если будет принципиально то наверное смогу еще один аппаратный пин высвободить заменой на регистровый).
Нужно слушать несколько 1-10 датчиков расположенных удаленно (до сотни метров).
Датчики работают асинхронно и думаю, что в моем случае можно мириться с тем что могут несколько датчиков одновременно что-то передавать на контроллер и соответственно не передать ничего.
Посылки от датчиков в несколько байт. Датчики с небольшим процом и свободным UARTом.
(Добавление)
Может вот так сделать:
[Rx Датчик1 Tx] -> [Rx Датчик2 Tx] -> [Rx Датчикn Tx] -> { ATMega32 }
Скорость взять самую низкую и реализовать UART на свободном пине?
4. koyodza - 04 Октября, 2015 - 21:02:13 - перейти к сообщению
Последовательное соединение датчиков не всегда удобно. При неисправном датчике связь с остальными невозможна. Лучше подключить датчики к линии параллельно. Для того чтобы избежать коллизий датчик перед началом передачи некоторое время слушает линию, если сохраняется тишина в течение заданного времени, то начинает передавать. Время лучше сделать немного разным у всех датчиков.

Электрический интерфейс может быть на базе 485 или открытый коллектор. Во втором случае скорость передачи придётся делать очень низкой.
5. Буратино - 05 Октября, 2015 - 13:26:04 - перейти к сообщению
Спасибо, буду думать.
А какое таки по факту расстояние можно осилить на 4800 бод и без 485го драйвера?
6. koyodza - 05 Октября, 2015 - 14:13:54 - перейти к сообщению
Зависит от многих факторов: ёмкость кабеля, сопротивление нагрузки, наличие мощных источников помех, характер потребления датчиков и т.д.

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
UaExBB Style

[Script Execution time: 0.0094]     [ Gzip Disabled ]