Здравствуйте! Подскажите, пожалуйста, правильно ли я мыслю. Задача: есть несколько устройств (измерительные приборы), которые передают данные по протоколу RS-232, один из них работает в обычном асинхронном режиме (типа COM-порт), другой же в синхронном (HDLC-кадры). У меня есть задумка передавать эти данные по ethernet, в виде UDP пакетов, а потом обрабатывать на компьютере. Передавать что-либо от компьютера к устройствам ненужно, т.е. односторонняя передача. На данный момент вижу такую реализацию: вход1-->буферFIFO-\ вход2-->буферFIFO--->(ATMegaXXX)--<SPI-интерфейс>-->(модуль ENC28J60)--> TCP/IP сеть (UDP) входN-->буферFIFO-/ Алгоритм вижу такой: Буфера-FIFO принимают данные от устройств, а микроконтроллер поочередно опрашивает их и передает содержимое по SPI на сетевой модуль. Что использовать в качестве буферов? какие микросхемы? Необходимая скорость работы RS-232 в асинхронном/синхронном режиме 9,6-128Kbit. реальная скорость передачи данных меньше. Правилен ли мой подход в принципе? Или правильнее использовать один микроконтроллер без входного буфера, и один сетевой модуль на каждый канал? Есть ли смысл использовать мегу с двумя USART? В перспективе возможно увеличение каналов мониторинга до, скажем, десятка. Как быть с точки зрения рационализации?
Непонятно, зачем вообще здесь нужен еще какой-то буфер. Разве у атмеги нету своей памяти чтобы буферизовать приходящие данные? А вообще для такого кол-ва ком-портов я бы взял камушек посерьезнее типа многоножки STM32. У старших моделей и 5 USARTов и Ethernet на борту есть.
Передают по запросу или когда им вздумается? Если по запросу, что логично, то можно поставить мультиплексор для RS-232 (видел такое самодельное). А имхо лучше каждому прибору 485 интерфейс. И компьютеру 485 интерфейс и не надо эзернета.
Ну тогда или действительно STM32 (или другой микроконтроллер) с нужным количеством UARTов. Или на каждый прибор по меге (например мега48) и одна центральная мега, забираюшая данные с других мег, например по SPI и отправляющая эти данные по эзернету.
oleg110592, поддерживаю. Вот только мега48 зачем? Тут и тини2313 хватит за глаза. 128 байт ОЗУ - половину смело можно под FIFO буфер отдать (о котором тут упоминалось). Приём/передачу сделать на прерываниях. Т.е. несколько тинек2313 подчинёнными (slave) на SPI. SPI запустить на 1...4МГц, чтобы заведомо успевать обмениваться. Ну и что-нибудь вроде меги16 (или поболее) в качестве центрального, главного на SPI, и передающего по езернету. Если это будет на одной плате, ну или достаточно близко размещено, то всё очень даже может получиться.
Вот только по езернету просто так? Или по tcp/ip? Если последнее, то может и меги32 не хватить. (что-то я не помню ТТХ софта TCP/IP для маленьких МК, поправьте кто знает)
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Спасибо, идея понятна. Думал, может есть готовые FIFO с буферной памятью.
Kavka писал(а):
Вот только по езернету просто так? Или по tcp/ip? Если последнее, то может и меги32 не хватить. (что-то я не помню ТТХ софта TCP/IP для маленьких МК, поправьте кто знает)
Думаю, по UDP. Тут вот в 88-ую мегу целый HTTP-сервер запихали.
Последний раз редактировалось FoxBat Пт июн 15, 2012 23:35:28, всего редактировалось 1 раз.
Вот только мега48 зачем у нас сложилось так что мега48 дешевле тиней (кроме 13) а USART tiny2313 не пересекается с ли с SPI? Нет, посмотрел - с I2C пересекается. Не помню - чем-то SPI в тини2313 мне не подошел. а для эзернета я б применил что-то типа готового модуля WIZ810MJ - подключал такой к меге по SPI - прекрасно работает.
W5100 аппаратно реализует TCP, UDP, IPv4, ICMP, ARP, IGMP и MAC. скорость как 100 так и 10 (автоопределение), потребление 185mA(3.3V) ENC28J60 я не пробовал, но вначале почитал интернет - отзывы - глючная, много жрет, греется ну и это почитал: Существуют два основных варианта шилдов для работы с Ethernet — на основе старого доброго чипа ENC28J60 от Microchip и более совершенного W5100 от Wiznet. Оба решения используют для обмена шину SPI, отнимая всего четыре пина Arduino. Но ENC28J60 появился много раньше и явно проигрывает продвинутому W5100: только 10 Мбит/с, нет аппаратной поддержки IP, UDP, TCP. Кроме того, W5100 позволяет работать с четырьмя сокетами (что означает поддержку до четырех одновременных соединений). В общем, настоятельно рекомендую использовать именно W5100, потому что он существенно экономит ключевой ресурс микроконтроллера — оперативную память (SRAM), которую приходится экономить (у Atmega328 — всего один килобайт). Ну и все остальные преимущества предобработки налицо: пока W5100 сам переспрашивает пакеты по протоколу TCP и считает контрольные суммы заголовков, Atmegа может спокойно заниматься более важными вещами.(c) Ну и цена за готовый модуль, у буржуев - 19.50$ http://www.saelig.com/BRD/ETH027.htm еще, правда не пробовали закупать - пока не знаю во сколько обойдется с доставкой
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения