trust already work Программный полудуплексный UART для AVR, поддерживающий работу с одним выводом » Портал инженера

Программный полудуплексный UART для AVR, поддерживающий работу с одним выводом

Большинство микроконтроллеров ATtiny не имеют аппаратного модуля UART из-за ограниченного количества выводов. Ядра Arduino tiny используют класс TinyDebugSerial, который обеспечивает только передачу данных, для приема данных нужно писать дополнительный код. Поэтому ниже предлагается компактный код и простая схема для организации программного UART, поддерживающего работу с одним выводом.

Когда TTL-адаптер последовательного порта не передает данные, напряжение на выводе Tx поддерживает транзистор Q1 открытым, и на выводе микроконтроллера Tx/Rx будет напряжение высокого логического уровня, что будет свидетельствовать о состоянии ожидания. Когда AVR отправит 0 при включенном Q1, Rx подтянется к низкому логическому уровню, что будет означать прием 0. Резистор R1 нужен для того, чтобы ток, текущий через базу транзистора, был менее 1 мА. Когда AVR отправит 1, Rx не будет больше подтянут к логическому нулю, а значит вернется в высокое состояние. Когда адаптер последовательного порта будет передавать 0, диод D1 позволит подтянуть вывод микроконтроллера к нижнему логическому уровню. При отсутствии тока, текущего через базу, транзистор Q1 выключится, и линия Rx последовательного адаптера отключится.

{banner_rca-news-1-1}

Код, работающий в качестве Arduino-библиотеки, можно взять Вы не можете скачивать файлы с нашего сервера. Ему требуется только 62 байта флеш-памяти и не требуется оперативной памяти, поскольку буферизация не предполагается. Он поддерживает высокие скорости передачи до 460.8 Кб/с при 16 МГц. По умолчанию в BasicSerial3.h определена скорость 115.2 Кб/с и может быть изменена в define-константе BAUD_RATE. По умолчанию библиотека использует вывод PB5 как для Tx, так и для Rx. Это может быть изменено путем изменения UART_Tx и UART_Rx в BasicSerial3.S. Ниже представлен скетч с использованием этой библиотеки:



#include <BasicSerial3.h>
void setup()
{ }
void serOut(const char* str)
{ while (*str) TxByte (*str++); }
void loop()
{
byte c;
serOut("Serial echo test\n\r");
while ( c = RxByte() ){
TxByte(c);
}
delay(1000);
}


 

 

Перевод © digitrode.ru



Обсудить на форуме

Комментарии

Добавить комментарий
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent

    Что такое последовательный канал?

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

    Отбор энергии у интерфейса RS232 для питания подключенных к нему устройств

    Типичные ИС приемопередатчиков интерфейса RS232, которые можно найти во многих встраиваемых системах генерируют выходные сигналы с уровнями ±6 В. В то время, как эти сигналы не предназначены для передачи мощности, в некоторых ситуациях они могут

    Преобразователь RS232 - RS485

    Уже довольно давно компания Advantech выпускает линейку устройств серии Adam 4000-5000. В зависимости от конкретной модификации, они имеют различное количество входов и выходов, а управление и вывод данных в них осуществляется посредством интерфейса

    Гальваническая развязка COM порта

    Во многих типах оборудования в настоящее время продолжает использоваться универсальный асинхронный приёмопередатчик. Это и многие универсальные программаторы, и винчестеры, ADSL модемы, офисные АТС. 

    Простейшая схема интерфейса 1-Wire – UART

    Протокол 1-Wire обычно используется для общения с различными датчиками температуры, например, DS18S20. Также он применяется и в датчиках заряда аккумулятора и в некоторых светодиодных драйверах.