Я использую микроконтроллер ATMEGA32HVB, который имеет функцию для балансировки ячеек, с помощью которой мы можем подключить 4 батареи последовательно и использовать по одной за раз. Это очень полезно для управления питанием, поэтому я не могу использовать другой микроконтроллер. Пожалуйста, предложите несколько способов добавить UART, чтобы я мог легко подключаться к последовательным устройствам.
microcontroller
uart
user27475
источник
источник
Ответы:
Как уже отмечали другие, вы можете либо добавить дополнительное оборудование в вашу систему для обеспечения функциональности 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 вместо логических уровней (например, ПК), это может быть полезно, так как это избавит вас от добавления другой ИС драйвера линии на вашу плату.
источник
Если вы ищете аппаратное решение, у Maxim есть несколько микросхем UART с интерфейсом SPI к микроконтроллеру (который входит в вашу часть). Посмотрите на MAX3100 или другие варианты здесь: http://www.maximintegrated.com/products/interface/controllers-expanders/uart.cfm
источник
Вам нужно будет использовать программный драйвер UART. В зависимости от того, что именно вы ожидаете от этого UART, вы можете использовать AVR305 (чрезвычайно компактный, но не имеющий функций, кроме блокирования полудуплексной передачи / приема), AVR274 (управляемый прерываниями, довольно полный набор функций), вы можете написать свой собственный программный драйвер UART или Вы можете использовать тот, который вы найдете в Интернете, например, прибегая к помощи «avr software uart»
источник
Краткое примечание о дизайне программного обеспечения «UART»: в зависимости от требований можно использовать как минимум качественно разные подходы:
Драйвер бита взрыва «перехватит все» отключит все прерывания и использует код с циклическим счетом для синхронизации каждого бита. Для получения данных с помощью драйвера «перехватить все» требуется, чтобы при получении данных контроллер не делал ничего, кроме как ожидал его.
Драйвер бита взрыва «перехватить основной цикл» будет вести себя почти так же, как и выше, за исключением того, что он будет использовать ресурс таймера для битовых таймингов, а не для подсчета циклов. Прерывания, которые не требуют много времени для обслуживания, могут быть оставлены включенными. Для последовательной передачи ресурс таймера с фиксированной скоростью может использоваться совместно с другими целями; однако для последовательного приема драйвер сдвоенного взрыва должен иметь возможность перезагружать таймер при поступлении начального бита, чтобы истечь его в середине каждого входящего битового времени.
Драйвер полного прерывания, управляемый прерываниями, использует таймер с фиксированной скоростью, который работает с некоторой кратностью скорости передачи данных, предпочтительно (3x и 5x лучше, чем 4x), и делает все через этот таймер. Такой драйвер может работать одновременно со всем остальным, но потребует более быстрого процессора, чем требовалось для драйверов предыдущих типов.
Чтобы не допустить, чтобы первые два стиля контроллера ожидали данные, которые могут никогда не прийти, всегда, в подпрограммах чтения обычно указывается значение времени ожидания. Обратите внимание, что если цикл контроллера, например, «получает байт, ожидая его до 100 мсек, делает другие вещи, если ничего не пришло, затем получает следующий байт и т. Д.» и байт прибывает между временем ожидания процедуры get и контроллер снова начинает ждать, этот байт будет потерян; устройство, с которым оно связывается, должно ожидать такую возможность.
Только третий стиль драйвера сможет справиться с возможностью начала поступления байта данных во время передачи байта данных. Однако первые два стиля могут использоваться для некоторых полнодуплексных протоколов связи с полной скоростью, если контроллер говорит только тогда, когда с ним разговаривают. Хитрость заключается в том, чтобы иметь подпрограмму «чтение и запись данных», которая будет ожидать входящий стартовый бит, и когда он обнаружен, перекрываются операции чтения и записи, так что контроллер отправляет каждый бит, как только собирается проверить входящие данные. Как только контроллер обнаружит входящий стартовый бит, он будет точно знать, когда ему нужно искать следующие 8 битов данных и стоповый бит, и, таким образом, будет знать, что он может безопасно использовать время между для вывода своих собственных данных.
Одно прощальное примечание: контроллер, который использует один из первых двух стилей битового взрыва uart для получения данных, должен обрабатывать каждый байт данных до того, как спадет начальный бит следующего байта, чтобы избежать потери данных. Если контроллер знает, что обработка займет, по крайней мере, половину бита, он может максимизировать время, доступное для обработки, принимая каждый байт, как только он захватит последний бит данных, а не ожидая стоп-бита. Однако в качестве дополнительного средства предоставления контроллеру большего количества времени может оказаться полезным, чтобы устройство, передающее ему данные, передавало два стоповых бита, а не один. Если можно настроить «отметку четности», это добавит еще один дополнительный бит времени. Передача, например, в 115200-8-M-2, обеспечит большее время обработки, чем 57600-8-N-1, даже несмотря на то, что он будет передавать данные более чем в 1,6 раза быстрее.
источник
Вы можете просто использовать вывод ввода-вывода контроллера. Единственное, что при переключении или передаче данных на эти контакты, вы должны иметь частоту контактов, удваивающую скорость передачи данных. Вот как обычно работает UART, он будет дискретизировать битовый сигнал в середине.
источник