Можно ли использовать два soft uart?

Тема в разделе "Arduino & Shields", создана пользователем jtag, 31 янв 2019.

  1. jtag

    jtag Нерд

    Здравствуйте. Собираю прототипную схему. К ардуино будет подключено два считывателя карт rdm6000 через uart. Хочу использовать arduino nano. Там один аппаратный uart. В библиотеке soft uart написано что при подключении двух uart, одновременно они не считыват. Не очень понятно. Если считывание происходит доли секунд, может это на практике и не заметно будет. И если поднести карты к обоим считывателям одновременно, для микроконтроллера это будет огромная разница во времени. Или все таки придется покупать arduino mega с тремя аппаратными uart'aми.
     
  2. parovoZZ

    parovoZZ Гуру

    подключи две считки на один uart.
     
  3. b707

    b707 Гуру

    можно два софтсериала - если перключаться между ними. В документации к SiftSerial описано как это делать.
    Или один считыватель к аппаратному, другой к программному.

    А вместо Меги лучше купить СТМ32 - стоит дешевле Нано, имеет три сериала и совместим с Ардуино ИДЕ
     
  4. jtag

    jtag Нерд

    А реально ли на СТМ32 реализовать http get запросы на сервер, и также работать с sd картой, arduino IDE сможет ли это осилить или пока это еще не отлажено?
     
  5. parovoZZ

    parovoZZ Гуру

    А какая линейка?
     
  6. jtag

    jtag Нерд

    ну вот такая вот, самая бюджетная,
    STM32F103C8T6
     
  7. b707

    b707 Гуру

    Начать с того, что как раз на Нано вы вряд ли сможете в одной программе делать HTTP запросы и использовать SD - памяти не хватит.
    На СТМ-дуино есть поддержва практически всей периферии, что для обычных ардуино, разве что библиотеки часто нужны другие.
     
  8. jtag

    jtag Нерд

    Спасибо что посоветовали СТМ32, завтра все закуплю, буду генерировать прошивку, ну и вопросов наверно куча возникнет))
     
  9. b707

    b707 Гуру

    программы не генерируют, их пишут.
    Судя по вопросам и сомнениям - вам еще очень далеко до HTTP запросов. Вы бы не хватались сразу за "проект века" - а для начала попробовали написать самостоятельно какой-нибудь термометр или мигалку. Главное - писать САМОСТОЯТЕЛЬНО, а не скопировать из инета или Ютуба...
     
  10. jtag

    jtag Нерд

    Всем доброй ночи. Не получилось заказать стм32, пришлось заказать ардуино мега. На данный момент написал соединение ардуины с сервером через http. Использую arduino mega с ethernet shield. Ардуина является клиентом и каждый час делает запрос на сервер, который передает ей номера карт. Массив из 4000 чисел, номер emmarine карт. Не получается отправить массив и записать на sd карте. После отправки массива становится не доступна sd карта. Нашел грань, если отправлять 500 чисел в запросе, то на карту сохраняет норм. У ардуины оперативки чтоли не хватает? Таким образом на сервере вычисляю колво запросов по длине массива, отправляю. Приходится коннектиться несколько раз, и тем самым на загрузку в sd карту уходит около 30 сек. Можно както одним запросом прислать весь массив?
     
  11. b707

    b707 Гуру

    Главное, что вам нужно понять - "одним запросом весь массив" присылать не только не нужно, а даже вредно.
    Вы наверно пытаетесь сначала принять весь массив, а потом записать его на карточку ? - это неправильный подход- так делать не нужно. Это сейчас у вас запрос довольно маленький - 10-15Кбайт, а ведь часто ответы на запросы бывыют десятки и сотни мегабайт. Какая бы ни была оперативка, такой запрос одним пакетом вы не перешлете и не обработаете.
    Надо делать последовательно : приняли сотню номеров карт записали в файл - потом снова приняли сотню карт и записали в файл... Таким образом даже на МК с маленькой памятью можно принять и 400 карт, и 4 тыс, и 400 тыс.

    Что касается "у меги не хватает оперативки" - это совершенно не удивительно. Если у вас номера карт по 4 байта. то массив 4000 шт займет 16К - а у меги оперативки всего 2.5К

    Интересно, как это "не удалось заказать СТМ32" - что интересно могло помешать, они в китае вроде не кончились :)
     
  12. b707

    b707 Гуру

    И еще замечу. что передавать каждый час 4 тыс номеров карт - вряд ли это можно назвать оптимальным алгоритмом. Правильнее было бы передать массив только первый раз, а потом передавать по сети только те номера, которые изменились .
     
  13. parovoZZ

    parovoZZ Гуру

    затор у латышей
     
  14. parovoZZ

    parovoZZ Гуру

    Тогда надо сперва передать прежний номер карты, а затем новый. А на SD карте номер перетереть.
     
  15. b707

    b707 Гуру

    да неважно, как это конкретно делать, важно то, что таких номеров придется передавать в десятки раз меньше
     
    DetSimen нравится это.
  16. jtag

    jtag Нерд

    так я не из китая заказывал, за три дня то. Щас буду думать над алгоритмом, вечером отпишусь.
     
  17. jtag

    jtag Нерд

    ну вроде на сервере с алгоритмом разобрался, при вклюении ардуино проверяет, если карт нет то загружаются все карты, и в бд на сервере в отдельной таблице сохраняются последние загруженные карты. Также в mysql имеется таблица текущих рабочих карт, при обновлении через час, сервер сравнивает две таблицы, находит карты новые, и карты которых больше нет, отправляет карты одним запросом в ардуино. "\n111111,222222,333333,444444\n666666,777777\n" Теперь со стороны ардуино: когда карты будут получены, чтобы удалить либо добавить нужно алгоритм поиска сделать, возможно ли это быстро сделать , около нескольких секунд затратить чтобы обновить карты на sd карте? Наверное карты лучше сразу сохранять по возрастанию, чтоб делать поиск быстрее. И второй вопрос, когда rdm6000 считал номер карты, как его быстрой найти на sd карте? Первая мысль приходит снова загрузить всю память и пробежаться по массиву, но здесь ведь так не выйдет. Для поиска номера карты имеется всего секунда. Возможно ли это вообще сделать?
     
  18. jtag

    jtag Нерд

    или сделать проще, как только rdm6000 присылает номер, так сразу отправляется запрос серверу с номером карты, сервер смотрит, имеется ли такая карта и отвечает на запрос.