У меня нет микроконтроллера UART, так как я могу его добавить?

13

Я использую микроконтроллер ATMEGA32HVB, который имеет функцию для балансировки ячеек, с помощью которой мы можем подключить 4 батареи последовательно и использовать по одной за раз. Это очень полезно для управления питанием, поэтому я не могу использовать другой микроконтроллер. Пожалуйста, предложите несколько способов добавить UART, чтобы я мог легко подключаться к последовательным устройствам.

user27475
источник
11
Программный UART-способ, описанный пользователем 26129, называется бит-биингом .
Johan.A
4
Просто мои очень субъективные $ 0,02, но я бы предпочел отдельный контроллер батареи и UART-интегрированный UART, а не наоборот. Зачем вам нужно интегрированное управление батареями в uC?
Мелс
Я должен использовать перезаряжаемые батареи, которые будут заряжаться от солнечной батареи, поэтому мне нужно 4 батарейки подряд, которые будут использоваться по одной
user27475
4
Один вопрос - сколько вы хотите использовать UART и в каких направлениях. Если вы хотите генерировать только случайное отладочное сообщение или сообщение о состоянии, в то время, когда ваш процессор не испытывает особого спроса, последовательный вывод с битами может выглядеть очень привлекательно. Есть тики, такие как использование прерываний смены штырьков, которые могут уменьшить среднюю загрузку наличия входного канала, но если вы ожидаете получать символы с высокой скоростью передачи данных в то время, когда у вас есть другие обязательства в реальном времени, это может быть вопрос.
Крис Страттон

Ответы:

17

Как уже отмечали другие, вы можете либо добавить дополнительное оборудование в вашу систему для обеспечения функциональности UART, либо вы можете эмулировать одно в программном обеспечении. Если у вас есть контроль над всем дизайном оборудования, и вы можете добавить еще одну микросхему, я бы настоятельно рекомендовал использовать аппаратный подход. Вы, конечно, можете заставить программный UART работать с использованием бит-бэнгинга , но вам может не потребоваться выделять ресурсы ЦП для генерации требуемого времени.

Из таблицы данных видно, что ваш микроконтроллер имеет и SPI, и I2C (который Atmel называет двухпроводным интерфейсом (TWI)). Это, вероятно, будет лучшим интерфейсом для подключения внешнего UART. Указанные устройства доступны от ряда производителей. Несколько примеров:

  • Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts ) предлагает линейку 1- и 2-канальных устройств UART SPI / I2C, охватывающую ~ 1.6- 3,3 В рабочий диапазон. Я не использовал ни одну из этих частей специально, но в прошлом я использовал устройства Exar (с параллельными интерфейсами шины памяти), и они работали хорошо.

  • NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ ) предлагает линейку устройств SPI / I2C UART / IrDA / GPIO, также в 1 и 2 -канальные разновидности в паре диапазонов напряжения. В прошлом я широко использовал эти детали (в частности, SC16IS762) с большим успехом.

  • Максим ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 ) имеет устройства MAX3110E и MAX3111E, которые представляют собой UART с SPI-подключением. Уникальной особенностью этих устройств является то, что они имеют встроенный линейный драйвер RS-232. Так что, если вам нужен UART для взаимодействия с устройством, которое использует линейные напряжения RS-232 вместо логических уровней (например, ПК), это может быть полезно, так как это избавит вас от добавления другой ИС драйвера линии на вашу плату.

Джейсон Р
источник
Вау, я никогда не знал, что у Максима есть эти вещи, если бы я мог, я получил +2
Tevo D
8

Вам нужно будет использовать программный драйвер UART. В зависимости от того, что именно вы ожидаете от этого UART, вы можете использовать AVR305 (чрезвычайно компактный, но не имеющий функций, кроме блокирования полудуплексной передачи / приема), AVR274 (управляемый прерываниями, довольно полный набор функций), вы можете написать свой собственный программный драйвер UART или Вы можете использовать тот, который вы найдете в Интернете, например, прибегая к помощи «avr software uart»

user36129
источник
3

Краткое примечание о дизайне программного обеспечения «UART»: в зависимости от требований можно использовать как минимум качественно разные подходы:

  • Драйвер бита взрыва «перехватит все» отключит все прерывания и использует код с циклическим счетом для синхронизации каждого бита. Для получения данных с помощью драйвера «перехватить все» требуется, чтобы при получении данных контроллер не делал ничего, кроме как ожидал его.

  • Драйвер бита взрыва «перехватить основной цикл» будет вести себя почти так же, как и выше, за исключением того, что он будет использовать ресурс таймера для битовых таймингов, а не для подсчета циклов. Прерывания, которые не требуют много времени для обслуживания, могут быть оставлены включенными. Для последовательной передачи ресурс таймера с фиксированной скоростью может использоваться совместно с другими целями; однако для последовательного приема драйвер сдвоенного взрыва должен иметь возможность перезагружать таймер при поступлении начального бита, чтобы истечь его в середине каждого входящего битового времени.

  • Драйвер полного прерывания, управляемый прерываниями, использует таймер с фиксированной скоростью, который работает с некоторой кратностью скорости передачи данных, предпочтительно (3x и 5x лучше, чем 4x), и делает все через этот таймер. Такой драйвер может работать одновременно со всем остальным, но потребует более быстрого процессора, чем требовалось для драйверов предыдущих типов.

Чтобы не допустить, чтобы первые два стиля контроллера ожидали данные, которые могут никогда не прийти, всегда, в подпрограммах чтения обычно указывается значение времени ожидания. Обратите внимание, что если цикл контроллера, например, «получает байт, ожидая его до 100 мсек, делает другие вещи, если ничего не пришло, затем получает следующий байт и т. Д.» и байт прибывает между временем ожидания процедуры get и контроллер снова начинает ждать, этот байт будет потерян; устройство, с которым оно связывается, должно ожидать такую ​​возможность.

Только третий стиль драйвера сможет справиться с возможностью начала поступления байта данных во время передачи байта данных. Однако первые два стиля могут использоваться для некоторых полнодуплексных протоколов связи с полной скоростью, если контроллер говорит только тогда, когда с ним разговаривают. Хитрость заключается в том, чтобы иметь подпрограмму «чтение и запись данных», которая будет ожидать входящий стартовый бит, и когда он обнаружен, перекрываются операции чтения и записи, так что контроллер отправляет каждый бит, как только собирается проверить входящие данные. Как только контроллер обнаружит входящий стартовый бит, он будет точно знать, когда ему нужно искать следующие 8 битов данных и стоповый бит, и, таким образом, будет знать, что он может безопасно использовать время между для вывода своих собственных данных.

Одно прощальное примечание: контроллер, который использует один из первых двух стилей битового взрыва uart для получения данных, должен обрабатывать каждый байт данных до того, как спадет начальный бит следующего байта, чтобы избежать потери данных. Если контроллер знает, что обработка займет, по крайней мере, половину бита, он может максимизировать время, доступное для обработки, принимая каждый байт, как только он захватит последний бит данных, а не ожидая стоп-бита. Однако в качестве дополнительного средства предоставления контроллеру большего количества времени может оказаться полезным, чтобы устройство, передающее ему данные, передавало два стоповых бита, а не один. Если можно настроить «отметку четности», это добавит еще один дополнительный бит времени. Передача, например, в 115200-8-M-2, обеспечит большее время обработки, чем 57600-8-N-1, даже несмотря на то, что он будет передавать данные более чем в 1,6 раза быстрее.

Supercat
источник
1

Вы можете просто использовать вывод ввода-вывода контроллера. Единственное, что при переключении или передаче данных на эти контакты, вы должны иметь частоту контактов, удваивающую скорость передачи данных. Вот как обычно работает UART, он будет дискретизировать битовый сигнал в середине.

Нитин
источник